Class: Ruote::Tracker
- Inherits:
-
Object
- Object
- Ruote::Tracker
- Defined in:
- lib/ruote/svc/tracker.rb
Overview
The tracker service is used by the “listen” expression. This services sees all the msg processed by a worker and triggers any listener interested in a particular msg.
Look at the ListenExpression for more details.
Instance Method Summary collapse
-
#add_tracker(wfid, action, tracker_id, conditions, msg) ⇒ Object
Adds a tracker (usually when a ‘listen’ expression gets applied).
-
#initialize(context) ⇒ Tracker
constructor
A new instance of Tracker.
-
#on_msg(msg) ⇒ Object
The worker calls this method via the context after each successful msg processing.
-
#on_pre_msg(msg) ⇒ Object
The worker calls this method via the context before each msg gets processed.
-
#remove_tracker(fei_sid_or_id, wfid = nil) ⇒ Object
Removes a tracker (usually when a ‘listen’ expression replies to its parent expression or is cancelled).
Constructor Details
#initialize(context) ⇒ Tracker
Returns a new instance of Tracker.
37 38 39 40 |
# File 'lib/ruote/svc/tracker.rb', line 37 def initialize(context) @context = context end |
Instance Method Details
#add_tracker(wfid, action, tracker_id, conditions, msg) ⇒ Object
Adds a tracker (usually when a ‘listen’ expression gets applied).
The tracker_id may be nil (one will then get generated).
Returns the tracker_id.
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/ruote/svc/tracker.rb', line 64 def add_tracker(wfid, action, tracker_id, conditions, msg) tracker_id ||= [ 'tracker', wfid, action, Ruote.generate_subid(conditions.hash.to_s + msg.hash.to_s) ].collect(&:to_s).join('_') conditions = conditions && conditions.remap { |(k, v), h| h[k] = Array(v) } doc = @context.storage.get_trackers doc['trackers'][tracker_id] = { 'wfid' => wfid, 'action' => action, 'id' => tracker_id, 'conditions' => conditions, 'msg' => msg } r = @context.storage.put(doc) add_tracker(wfid, action, tracker_id, conditions, msg) if r # the put failed, have to redo the work tracker_id end |
#on_msg(msg) ⇒ Object
The worker calls this method via the context after each successful msg processing.
53 54 55 56 |
# File 'lib/ruote/svc/tracker.rb', line 53 def on_msg(msg) (false, msg) end |
#on_pre_msg(msg) ⇒ Object
The worker calls this method via the context before each msg gets processed.
45 46 47 48 |
# File 'lib/ruote/svc/tracker.rb', line 45 def on_pre_msg(msg) (true, msg) end |
#remove_tracker(fei_sid_or_id, wfid = nil) ⇒ Object
Removes a tracker (usually when a ‘listen’ expression replies to its parent expression or is cancelled).
94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/ruote/svc/tracker.rb', line 94 def remove_tracker(fei_sid_or_id, wfid=nil) tracker_id = if fei_sid_or_id.is_a?(String) fei_sid_or_id else Ruote.to_storage_id(fei_sid_or_id) end remove([ tracker_id ], wfid) end |