Class: Ruote::Workitem
- Inherits:
-
Object
- Object
- Ruote::Workitem
- Defined in:
- lib/ruote/workitem.rb
Overview
A workitem can be thought of an “execution token”, but with a payload (fields).
The payload/fields MUST be JSONifiable.
Instance Attribute Summary collapse
-
#h ⇒ Object
readonly
Returns the value of attribute h.
Class Method Summary collapse
-
.add_tag(hworkitem, tag) ⇒ Object
Used by FlowExpression when entering a tag.
-
.from_json(json) ⇒ Object
Given a JSON String, decodes and returns a Ruote::Workitem instance.3 If the decode thing is not an object/hash, will raise an ArgumentError.
-
.remove_tag(hworkitem, tag) ⇒ Object
Used by FlowExpression when leaving a tag.
Instance Method Summary collapse
-
#==(other) ⇒ Object
(also: #eql?)
Warning : equality is based on fei and not on payload !.
-
#as_json(pretty = false) ⇒ Object
Encodes this workitem as JSON.
-
#command=(com) ⇒ Object
(advanced).
-
#commmand ⇒ Object
(advanced).
-
#dispatched_at ⇒ Object
When was this workitem dispatched ?.
-
#dup ⇒ Object
Returns a complete copy of this workitem.
-
#error ⇒ Object
Shortcut for wi.fields.
-
#fei ⇒ Object
Returns a Ruote::FlowExpressionId instance.
-
#field_or_param(key) ⇒ Object
Like #param_or_field, but priority is given to the field.
-
#fields ⇒ Object
Returns the payload, ie the fields hash.
-
#fields=(fields) ⇒ Object
Sets all the fields in one sweep.
-
#hash ⇒ Object
Warning : hash is fei’s hash.
-
#initialize(h) ⇒ Workitem
constructor
A new instance of Workitem.
-
#lookup(key, container_lookup = false) ⇒ Object
(also: #lf)
For a simple key.
-
#param_or_field(key) ⇒ Object
Sometimes a value is passed as a[n expression] parameter or as a workitem field, with priority to the parameter.
-
#param_text ⇒ Object
When a participant is invoked like in.
-
#params ⇒ Object
Shortcut for wi.fields.
-
#participant_name ⇒ Object
The participant for which this item is destined.
-
#result ⇒ Object
A shortcut to the value in the field named __result__.
-
#result=(r) ⇒ Object
Sets the value of the ‘special’ field __result__.
-
#set_field(key, value) ⇒ Object
Like #lookup allows for nested lookups, #set_field can be used to set sub fields directly.
-
#sid ⇒ Object
Returns the String id for this workitem (something like “0_0!!20100507-wagamama”).
-
#t ⇒ Object
Shortcut to the temporary/trailing fields.
-
#tags ⇒ Object
Shortcut for wi.fields.
-
#timed_out ⇒ Object
Shortcut for wi.fields[‘timed_out’].
-
#to_h ⇒ Object
Returns the underlying Hash instance.
-
#wf_name ⇒ Object
(also: #definition_name)
Returns the name of the workflow to which this workitem belongs, or nil.
-
#wf_revision ⇒ Object
(also: #definition_revision)
Returns the revision of the workflow to which this workitem belongs, or nil.
-
#wfid ⇒ Object
Returns the “workflow instance id” (unique process instance id) of the process instance which issued this workitem.
Constructor Details
#initialize(h) ⇒ Workitem
Returns a new instance of Workitem.
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/ruote/workitem.rb', line 42 def initialize(h) @h = h class << @h; include Ruote::HashDot; end #class << @h['fields'] # alias_method :__get, :[] # alias_method :__set, :[]= # def [](key) # __get(key.to_s) # end # def []=(key, value) # __set(key.to_s, value) # end #end # indifferent access, not activated for now end |
Instance Attribute Details
#h ⇒ Object (readonly)
Returns the value of attribute h.
40 41 42 |
# File 'lib/ruote/workitem.rb', line 40 def h @h end |
Class Method Details
.add_tag(hworkitem, tag) ⇒ Object
Used by FlowExpression when entering a tag.
350 351 352 353 |
# File 'lib/ruote/workitem.rb', line 350 def self.add_tag(hworkitem, tag) (hworkitem['fields']['__tags__'] ||= []) << tag end |
.from_json(json) ⇒ Object
Given a JSON String, decodes and returns a Ruote::Workitem instance.3 If the decode thing is not an object/hash, will raise an ArgumentError.
382 383 384 385 386 387 388 389 390 391 |
# File 'lib/ruote/workitem.rb', line 382 def self.from_json(json) h = Rufus::Json.decode(json) raise ArgumentError( "Arg not a JSON hash/object, but a #{h.class}. Cannot create workitem" ) unless h.is_a?(Hash) self.new(h) end |
.remove_tag(hworkitem, tag) ⇒ Object
Used by FlowExpression when leaving a tag.
357 358 359 360 361 362 363 364 365 366 367 368 369 |
# File 'lib/ruote/workitem.rb', line 357 def self.remove_tag(hworkitem, tag) # it's a bit convoluted... trying to cope with potential inconsistencies # # normally, it should only be a tags.pop(), but since user have # access to the workitem and its fields... better be safe than sorry = (hworkitem['fields']['__tags__'] || []) if index = .rindex(tag) .delete_at(index) end end |
Instance Method Details
#==(other) ⇒ Object Also known as: eql?
Warning : equality is based on fei and not on payload !
173 174 175 176 177 |
# File 'lib/ruote/workitem.rb', line 173 def ==(other) return false if other.class != self.class self.h['fei'] == other.h['fei'] end |
#as_json(pretty = false) ⇒ Object
Encodes this workitem as JSON. If pretty is set to true, will output prettified JSON.
374 375 376 377 |
# File 'lib/ruote/workitem.rb', line 374 def as_json(pretty=false) pretty ? Rufus::Json.pretty_encode(@h) : Rufus::Json.encode(@h) end |
#command=(com) ⇒ Object
(advanced)
Shortcut for wi.fields = x
__command__ is read by the ‘cursor’ and the ‘iterator’ expressions when a workitem reaches it (apply and reply).
332 333 334 335 336 337 338 339 |
# File 'lib/ruote/workitem.rb', line 332 def command=(com) com = com.is_a?(Array) ? com : com.split(' ') com = [ com.first, com.last ] com[1] = com[1].to_i if com[1] and com[0] != 'jump' @h['fields']['__command__'] = com end |
#commmand ⇒ Object
(advanced)
Shortcut for wi.fields
__command__ is read by the ‘cursor’ and the ‘iterator’ expressions when a workitem reaches it (apply and reply).
320 321 322 323 |
# File 'lib/ruote/workitem.rb', line 320 def commmand @h['fields']['__command__'] end |
#dispatched_at ⇒ Object
When was this workitem dispatched ?
166 167 168 169 |
# File 'lib/ruote/workitem.rb', line 166 def dispatched_at fields['dispatched_at'] end |
#dup ⇒ Object
Returns a complete copy of this workitem.
96 97 98 99 |
# File 'lib/ruote/workitem.rb', line 96 def dup Workitem.new(Rufus::Json.dup(@h)) end |
#error ⇒ Object
Shortcut for wi.fields
236 237 238 239 |
# File 'lib/ruote/workitem.rb', line 236 def error @h['fields']['__error__'] end |
#fei ⇒ Object
Returns a Ruote::FlowExpressionId instance.
89 90 91 92 |
# File 'lib/ruote/workitem.rb', line 89 def fei FlowExpressionId.new(@h['fei']) end |
#field_or_param(key) ⇒ Object
Like #param_or_field, but priority is given to the field.
298 299 300 301 302 303 |
# File 'lib/ruote/workitem.rb', line 298 def field_or_param(key) key = key.to_s @h['fields'][key] || (@h['fields']['params'] || {})[key] end |
#fields ⇒ Object
Returns the payload, ie the fields hash.
131 132 133 134 |
# File 'lib/ruote/workitem.rb', line 131 def fields @h['fields'] end |
#fields=(fields) ⇒ Object
Sets all the fields in one sweep.
Remember : the fields must be a JSONifiable hash.
140 141 142 143 |
# File 'lib/ruote/workitem.rb', line 140 def fields=(fields) @h['fields'] = fields end |
#hash ⇒ Object
Warning : hash is fei’s hash.
183 184 185 186 |
# File 'lib/ruote/workitem.rb', line 183 def hash self.h['fei'].hash end |
#lookup(key, container_lookup = false) ⇒ Object Also known as: lf
For a simple key
workitem.lookup('toto')
is equivalent to
workitem.fields['toto']
but for a complex key
workitem.lookup('toto.address')
is equivalent to
workitem.fields['toto']['address']
204 205 206 207 |
# File 'lib/ruote/workitem.rb', line 204 def lookup(key, container_lookup=false) Ruote.lookup(@h['fields'], key, container_lookup) end |
#param_or_field(key) ⇒ Object
Sometimes a value is passed as a[n expression] parameter or as a workitem field, with priority to the parameter.
sequence do
set 'f:country' => 'uruguay'
participant 'toto'
# in toto, workitem.param_or_field(:country) will yield 'uruguay'
participant 'toto', :country => 'argentina'
# workitem.param_or_field(:country) will yield 'argentina'
end
289 290 291 292 293 294 |
# File 'lib/ruote/workitem.rb', line 289 def param_or_field(key) key = key.to_s (@h['fields']['params'] || {})[key] || @h['fields'][key] end |
#param_text ⇒ Object
When a participant is invoked like in
accounting 'do_invoice', :customer => 'acme corp'
then
p workitem.params
# => { 'ref' => 'accounting', 'do_invoice' => nil, 'customer' => 'acme corp' }
and
p workitem.param_text
# => 'do_invoice'
It returns nil when there is no text passed directly.
273 274 275 276 |
# File 'lib/ruote/workitem.rb', line 273 def param_text (params.find { |k, v| v.nil? } || []).first end |
#params ⇒ Object
Shortcut for wi.fields
When a participant is invoked like in
participant :ref => 'toto', :task => 'x"
then
p workitem.params
# => { 'ref' => 'toto', 'task' => 'x' }
252 253 254 255 |
# File 'lib/ruote/workitem.rb', line 252 def params @h['fields']['params'] || {} end |
#participant_name ⇒ Object
The participant for which this item is destined. Will be nil when the workitem is transiting inside of its process instance (as opposed to when it’s being delivered outside of the engine).
105 106 107 108 |
# File 'lib/ruote/workitem.rb', line 105 def participant_name @h['participant_name'] end |
#result ⇒ Object
A shortcut to the value in the field named __result__
This field is used by the if expression for instance to determine if it should branch to its ‘then’ or its ‘else’.
150 151 152 153 |
# File 'lib/ruote/workitem.rb', line 150 def result fields['__result__'] end |
#result=(r) ⇒ Object
Sets the value of the ‘special’ field __result__
See #result
159 160 161 162 |
# File 'lib/ruote/workitem.rb', line 159 def result=(r) fields['__result__'] = r end |
#set_field(key, value) ⇒ Object
Like #lookup allows for nested lookups, #set_field can be used to set sub fields directly.
workitem.set_field('customer.address.city', 'Pleasantville')
Warning : if the customer and address field and subfield are not present or are not hashes, set_field will simply create a “customer.address.city” field and set its value to “Pleasantville”.
222 223 224 225 |
# File 'lib/ruote/workitem.rb', line 222 def set_field(key, value) Ruote.set(@h['fields'], key, value) end |
#sid ⇒ Object
Returns the String id for this workitem (something like “0_0!!20100507-wagamama”).
It’s in fact a shortcut for
Ruote::FlowExpressionId.to_storage_id(h.fei)
74 75 76 77 |
# File 'lib/ruote/workitem.rb', line 74 def sid Ruote::FlowExpressionId.to_storage_id(h.fei) end |
#t ⇒ Object
Shortcut to the temporary/trailing fields
groups.google.com/group/openwferu-users/browse_thread/thread/981dba6204f31ccc
309 310 311 |
# File 'lib/ruote/workitem.rb', line 309 def t @h['fields']['t'] ||= {} end |
#tags ⇒ Object
Shortcut for wi.fields
343 344 345 346 |
# File 'lib/ruote/workitem.rb', line 343 def @h['fields']['__tags__'] || [] end |
#timed_out ⇒ Object
Shortcut for wi.fields[‘timed_out’]
229 230 231 232 |
# File 'lib/ruote/workitem.rb', line 229 def timed_out @h['fields']['__timed_out__'] end |
#to_h ⇒ Object
Returns the underlying Hash instance.
62 63 64 65 |
# File 'lib/ruote/workitem.rb', line 62 def to_h @h end |
#wf_name ⇒ Object Also known as: definition_name
Returns the name of the workflow to which this workitem belongs, or nil.
112 113 114 115 |
# File 'lib/ruote/workitem.rb', line 112 def wf_name @h['wf_name'] end |
#wf_revision ⇒ Object Also known as: definition_revision
Returns the revision of the workflow to which this workitem belongs, or nil.
122 123 124 125 |
# File 'lib/ruote/workitem.rb', line 122 def wf_revision @h['wf_revision'] end |
#wfid ⇒ Object
Returns the “workflow instance id” (unique process instance id) of the process instance which issued this workitem.
82 83 84 85 |
# File 'lib/ruote/workitem.rb', line 82 def wfid h.fei['wfid'] end |