Class: Finist
- Inherits:
-
Object
- Object
- Finist
- Defined in:
- lib/finist.rb
Constant Summary collapse
- SCRIPT =
<<-EOS local curr = redis.call("GET", KEYS[1]) local next = redis.call("HGET", KEYS[2], curr) if next then redis.call("SET", KEYS[1], next) return { next, true } else return { curr, false } end EOS
Instance Method Summary collapse
- #event_key(ev) ⇒ Object
-
#initialize(redis, name, init) ⇒ Finist
constructor
A new instance of Finist.
- #on(ev, curr_state, next_state) ⇒ Object
- #rm(ev) ⇒ Object
- #send_event(ev) ⇒ Object
- #state ⇒ Object
- #trigger(ev) ⇒ Object
Constructor Details
#initialize(redis, name, init) ⇒ Finist
Returns a new instance of Finist.
18 19 20 21 22 |
# File 'lib/finist.rb', line 18 def initialize(redis, name, init) @name = sprintf("finist:%s", name) @redis = redis @redis.call("SET", @name, init, "NX") end |
Instance Method Details
#event_key(ev) ⇒ Object
24 25 26 |
# File 'lib/finist.rb', line 24 def event_key(ev) sprintf("%s:%s", @name, ev) end |
#on(ev, curr_state, next_state) ⇒ Object
28 29 30 |
# File 'lib/finist.rb', line 28 def on(ev, curr_state, next_state) @redis.call("HSET", event_key(ev), curr_state, next_state) end |
#rm(ev) ⇒ Object
32 33 34 |
# File 'lib/finist.rb', line 32 def rm(ev) @redis.call("DEL", event_key(ev)) end |
#send_event(ev) ⇒ Object
40 41 42 |
# File 'lib/finist.rb', line 40 def send_event(ev) @redis.call("EVAL", SCRIPT, "2", @name, event_key(ev)) end |
#state ⇒ Object
36 37 38 |
# File 'lib/finist.rb', line 36 def state @redis.call("GET", @name) end |
#trigger(ev) ⇒ Object
44 45 46 47 |
# File 'lib/finist.rb', line 44 def trigger(ev) result = send_event(ev) return result[0], result[1] != nil end |