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
-
.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.
Instance Method Summary collapse
-
#==(other) ⇒ Object
(also: #eql?)
Warning : equality is based on fei and not on payload !.
-
#[](key) ⇒ Object
Shortcut for #lookup(key).
-
#[]=(key, value) ⇒ Object
Shortcut for #set_field(key, value).
-
#as_json(pretty = false) ⇒ Object
Encodes this workitem as JSON.
-
#command ⇒ Object
(advanced).
-
#command=(com) ⇒ 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.
-
#owner ⇒ Object
Used by some participants, returns the “owner” of the workitem.
-
#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.
-
#re_dispatch_count ⇒ Object
How many times was this workitem re_dispatched ?.
-
#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”).
-
#sub_wf_launched_at ⇒ Object
Returns the UTC time string indicating when the sub-workflow was launched.
-
#sub_wf_name ⇒ Object
Returns the name of the sub-workflow the workitem is currently in.
-
#sub_wf_revision ⇒ Object
The equivalent of #sub_wf_name for revisions.
-
#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_launched_at ⇒ Object
(also: #launched_at)
Returns the UTC time string indicating when the workflow was launched.
-
#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
.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.
415 416 417 418 419 420 421 422 423 424 |
# File 'lib/ruote/workitem.rb', line 415 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 |
Instance Method Details
#==(other) ⇒ Object Also known as: eql?
Warning : equality is based on fei and not on payload !
193 194 195 196 197 |
# File 'lib/ruote/workitem.rb', line 193 def ==(other) return false if other.class != self.class self.h['fei'] == other.h['fei'] end |
#[](key) ⇒ Object
Shortcut for #lookup(key)
workitem.fields['customer']['city']
# or
workitem.lookup('customer.city')
# or
workitem['customer.city']
255 256 257 258 |
# File 'lib/ruote/workitem.rb', line 255 def [](key) lookup(key.to_s) end |
#[]=(key, value) ⇒ Object
Shortcut for #set_field(key, value)
workitem.fields['customer']['city'] = 'Toronto'
# or
workitem.set_field('customer.city', 'Toronto')
# or
workitem['customer.city'] = 'Toronto'
268 269 270 271 |
# File 'lib/ruote/workitem.rb', line 268 def []=(key, value) set_field(key.to_s, value) end |
#as_json(pretty = false) ⇒ Object
Encodes this workitem as JSON. If pretty is set to true, will output prettified JSON.
407 408 409 410 |
# File 'lib/ruote/workitem.rb', line 407 def as_json(pretty=false) pretty ? Rufus::Json.pretty_encode(@h) : Rufus::Json.encode(@h) end |
#command ⇒ Object
(advanced)
Shortcut for wi.fields
__command__ is read by the ‘cursor’ and the ‘iterator’ expressions when a workitem reaches it (apply and reply).
366 367 368 369 |
# File 'lib/ruote/workitem.rb', line 366 def command @h['fields']['__command__'] 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).
378 379 380 381 382 383 384 385 |
# File 'lib/ruote/workitem.rb', line 378 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 |
#dispatched_at ⇒ Object
When was this workitem dispatched ?
186 187 188 189 |
# File 'lib/ruote/workitem.rb', line 186 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
282 283 284 285 |
# File 'lib/ruote/workitem.rb', line 282 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.
344 345 346 347 348 349 |
# File 'lib/ruote/workitem.rb', line 344 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.
151 152 153 154 |
# File 'lib/ruote/workitem.rb', line 151 def fields @h['fields'] end |
#fields=(fields) ⇒ Object
Sets all the fields in one sweep.
Remember : the fields must be a JSONifiable hash.
160 161 162 163 |
# File 'lib/ruote/workitem.rb', line 160 def fields=(fields) @h['fields'] = fields end |
#hash ⇒ Object
Warning : hash is fei’s hash.
203 204 205 206 |
# File 'lib/ruote/workitem.rb', line 203 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']
224 225 226 227 |
# File 'lib/ruote/workitem.rb', line 224 def lookup(key, container_lookup=false) Ruote.lookup(@h['fields'], key, container_lookup) end |
#owner ⇒ Object
Used by some participants, returns the “owner” of the workitem. Mostly used when reserving workitems.
144 145 146 147 |
# File 'lib/ruote/workitem.rb', line 144 def owner @h['owner'] 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
335 336 337 338 339 340 |
# File 'lib/ruote/workitem.rb', line 335 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.
319 320 321 322 |
# File 'lib/ruote/workitem.rb', line 319 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' }
298 299 300 301 |
# File 'lib/ruote/workitem.rb', line 298 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 |
#re_dispatch_count ⇒ Object
How many times was this workitem re_dispatched ?
It’s used by LocalParticipant re_dispatch mostly, or by participant which poll a resource and re_dispatch after a while.
399 400 401 402 |
# File 'lib/ruote/workitem.rb', line 399 def re_dispatch_count @h['re_dispatch_count'] || 0 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’.
170 171 172 173 |
# File 'lib/ruote/workitem.rb', line 170 def result fields['__result__'] end |
#result=(r) ⇒ Object
Sets the value of the ‘special’ field __result__
See #result
179 180 181 182 |
# File 'lib/ruote/workitem.rb', line 179 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”.
242 243 244 245 |
# File 'lib/ruote/workitem.rb', line 242 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 |
#sub_wf_launched_at ⇒ Object
Returns the UTC time string indicating when the sub-workflow was launched.
139 |
# File 'lib/ruote/workitem.rb', line 139 def sub_wf_launched_at; @h['sub_wf_launched_at']; end |
#sub_wf_name ⇒ Object
Returns the name of the sub-workflow the workitem is currently in. (If it’s in the main flow, it will return the name of the main flow, if that flow has a name…)
131 |
# File 'lib/ruote/workitem.rb', line 131 def sub_wf_name; @h['sub_wf_name']; end |
#sub_wf_revision ⇒ Object
The equivalent of #sub_wf_name for revisions.
135 |
# File 'lib/ruote/workitem.rb', line 135 def sub_wf_revision; @h['sub_wf_revision']; end |
#t ⇒ Object
Shortcut to the temporary/trailing fields
groups.google.com/group/openwferu-users/browse_thread/thread/981dba6204f31ccc
355 356 357 |
# File 'lib/ruote/workitem.rb', line 355 def t @h['fields']['t'] ||= {} end |
#tags ⇒ Object
Shortcut for wi.fields
389 390 391 392 |
# File 'lib/ruote/workitem.rb', line 389 def @h['fields']['__tags__'] || [] end |
#timed_out ⇒ Object
Shortcut for wi.fields[‘timed_out’]
275 276 277 278 |
# File 'lib/ruote/workitem.rb', line 275 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_launched_at ⇒ Object Also known as: launched_at
Returns the UTC time string indicating when the workflow was launched.
121 |
# File 'lib/ruote/workitem.rb', line 121 def wf_launched_at; @h['wf_launched_at']; end |
#wf_name ⇒ Object Also known as: definition_name
Returns the name of the workflow to which this workitem belongs, or nil.
112 |
# 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.
117 |
# File 'lib/ruote/workitem.rb', line 117 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 |