You could try something like this:
---begin---
class Gate
@@gates = Array.new
def Gate.[](key)
@@gates[key]
end
def Gate.<<(g)
@@gates << g
end
def Gate.each
@@gates.each { yield }
end
def initialize
@state = rand(2)
@@gates << self
end
def state
@state
end
def update
@state = @@gates.first.state
self
end
end
g = Gate.new
=> #<Gate:0x27f2218 @state=1>
h = Gate.new
=> #<Gate:0x27dbb08 @state=0>
g.state
=> 1
h.state
=> 0
Gate[0] == g
=> true
Gate[1] == h
=> true
h.update
=> #<Gate:0x27dbb08 @state=0>
h.state
=> 1
---end---
Does that fit what you're looking for?
Lennon