joshsusser (owner)

Forks

Revisions

gist: 124130 Download_button fork
public
Public Clone URL: git://gist.github.com/124130.git
Embed All Files: show embed
protocol.rb #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# an object representing a duck type that can be used in a case expression
class Protocol
  def initialize(*selectors)
    @selectors = selectors
  end
 
  def ===(object)
    @selectors.all? {|selector| object.respond_to?(selector)}
  end
end
 
rest = Protocol.new(:get, :post, :put, :delete)
sql = Protocol.new(:select, :insert, :update, :delete)
 
case obj
when rest
  obj.get(things)
when sql
  obj.select(things)
end