Class: Finist

Inherits:
Object
  • Object
show all
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

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

#stateObject



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