Class: Ruote::FlowExpressionId
- Inherits:
-
Object
- Object
- Ruote::FlowExpressionId
- Defined in:
- lib/ruote/fei.rb
Overview
The FlowExpressionId (fei for short) is an process expression identifier. Each expression when instantiated gets a unique fei.
Feis are also used in workitems, where the fei is the fei of the
- participant
-
expression that emitted the workitem.
Feis can thus indicate the position of a workitem in a process tree.
Feis contain four pieces of information :
-
wfid : workflow instance id, the identifier for the process instance
-
subid : a unique identifier for expressions (useful in loops)
-
expid : the expression id, where in the process tree
-
engine_id : only relevant in multi engine scenarii (defaults to ‘engine’)
Constant Summary collapse
- CHILD_SEP =
'_'
- SUBS =
%w[ subid sub_wfid ]
- IDS =
%w[ engine_id expid wfid ]
Instance Attribute Summary collapse
-
#h ⇒ Object
readonly
Returns the value of attribute h.
Class Method Summary collapse
-
.child_id(h) ⇒ Object
Returns child_id…
-
.direct_child?(parent_fei, other_fei) ⇒ Boolean
Returns true if other_fei is the fei of a child expression of parent_fei.
-
.extract(arg) ⇒ Object
Attempts at extracting a FlowExpressionId from the given argument (workitem, string, …).
-
.extract_h(arg) ⇒ Object
Attempts at extracting a FlowExpressionId (as a Hash instance) from the given argument (workitem, string, …).
-
.from_id(s, engine_id = 'engine') ⇒ Object
Turns the result of to_storage_id back to a FlowExpressionId instance.
-
.is_a_fei?(h) ⇒ Boolean
Returns true if the h is a representation of a FlowExpressionId instance.
- .to_storage_id(hfei) ⇒ Object
Instance Method Summary collapse
- #<=>(other) ⇒ Object
-
#==(other) ⇒ Object
(also: #eql?)
Returns true if the other is a FlowExpressionId instance and it points to the same expression as this one.
-
#child_id ⇒ Object
Returns the last number in the expid.
- #engine_id ⇒ Object
- #expid ⇒ Object
- #hash ⇒ Object
-
#initialize(h) ⇒ FlowExpressionId
constructor
A new instance of FlowExpressionId.
- #sid ⇒ Object
- #subid ⇒ Object (also: #sub_wfid)
- #to_h ⇒ Object
- #to_sortable_id ⇒ Object
- #to_storage_id ⇒ Object
- #wfid ⇒ Object
Constructor Details
#initialize(h) ⇒ FlowExpressionId
Returns a new instance of FlowExpressionId.
111 112 113 114 115 116 117 118 |
# File 'lib/ruote/fei.rb', line 111 def initialize(h) @h = h class << h; include Ruote::HashDot; end @h['subid'] = @h.delete('sub_wfid') if @h['sub_wfid'] # TODO : for 2.1.13, remove this end |
Instance Attribute Details
#h ⇒ Object (readonly)
Returns the value of attribute h.
109 110 111 |
# File 'lib/ruote/fei.rb', line 109 def h @h end |
Class Method Details
.child_id(h) ⇒ Object
Returns child_id… For an expid of ‘0_1_4’, this will be 4.
196 197 198 199 |
# File 'lib/ruote/fei.rb', line 196 def self.child_id(h) h['expid'].split(CHILD_SEP).last.to_i end |
.direct_child?(parent_fei, other_fei) ⇒ Boolean
Returns true if other_fei is the fei of a child expression of parent_fei.
209 210 211 212 213 214 215 216 217 218 |
# File 'lib/ruote/fei.rb', line 209 def self.direct_child?(parent_fei, other_fei) %w[ wfid engine_id ].each do |k| return false if parent_fei[k] != other_fei[k] end pei = other_fei['expid'].split(CHILD_SEP)[0..-2].join(CHILD_SEP) (pei == parent_fei['expid']) end |
.extract(arg) ⇒ Object
Attempts at extracting a FlowExpressionId from the given argument (workitem, string, …)
Uses .extract_h
225 226 227 228 |
# File 'lib/ruote/fei.rb', line 225 def self.extract(arg) FlowExpressionId.new(extract_h(arg)) end |
.extract_h(arg) ⇒ Object
Attempts at extracting a FlowExpressionId (as a Hash instance) from the given argument (workitem, string, …)
233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 |
# File 'lib/ruote/fei.rb', line 233 def self.extract_h(arg) if arg.is_a?(Hash) return arg if arg['expid'] return arg['fei'] if arg['fei'] end return extract_h(arg.fei) if arg.respond_to?(:fei) return arg.h if arg.is_a?(Ruote::FlowExpressionId) return arg.h['fei'] if arg.is_a?(Ruote::Workitem) if arg.is_a?(String) ss = arg.split('!') return { 'engine_id' => ss[-4] || 'engine', 'expid' => ss[-3], 'subid' => ss[-2], 'wfid' => ss[-1] } end raise ArgumentError.new( "couldn't extract fei out of instance of #{arg.class}") end |
.from_id(s, engine_id = 'engine') ⇒ Object
Turns the result of to_storage_id back to a FlowExpressionId instance.
149 150 151 152 |
# File 'lib/ruote/fei.rb', line 149 def self.from_id(s, engine_id='engine') extract("#{engine_id}!#{s}") end |
.is_a_fei?(h) ⇒ Boolean
Returns true if the h is a representation of a FlowExpressionId instance.
189 190 191 192 |
# File 'lib/ruote/fei.rb', line 189 def self.is_a_fei?(h) h.respond_to?(:keys) && (h.keys - SUBS).sort == IDS end |
.to_storage_id(hfei) ⇒ Object
138 139 140 141 142 143 144 145 |
# File 'lib/ruote/fei.rb', line 138 def self.to_storage_id(hfei) hfei.respond_to?(:to_storage_id) ? hfei.to_storage_id : "#{hfei['expid']}!#{hfei['subid'] || hfei['sub_wfid']}!#{hfei['wfid']}" # TODO : for 2.1.13, remove the subid || sub_wfid trick end |
Instance Method Details
#<=>(other) ⇒ Object
167 168 169 170 |
# File 'lib/ruote/fei.rb', line 167 def <=>(other) self.to_sortable_id <=> other.to_sortable_id end |
#==(other) ⇒ Object Also known as: eql?
Returns true if the other is a FlowExpressionId instance and it points to the same expression as this one.
175 176 177 178 179 180 |
# File 'lib/ruote/fei.rb', line 175 def ==(other) return false unless other.is_a?(Ruote::FlowExpressionId) (hash == other.hash) end |
#child_id ⇒ Object
Returns the last number in the expid. For instance, if the expid is ‘0_5_7’, the child_id will be ‘7’.
157 158 159 160 |
# File 'lib/ruote/fei.rb', line 157 def child_id h.expid.split(CHILD_SEP).last.to_i end |
#engine_id ⇒ Object
122 |
# File 'lib/ruote/fei.rb', line 122 def engine_id; @h['engine_id']; end |
#expid ⇒ Object
120 |
# File 'lib/ruote/fei.rb', line 120 def expid; @h['expid']; end |
#hash ⇒ Object
162 163 164 165 |
# File 'lib/ruote/fei.rb', line 162 def hash to_storage_id.hash end |
#sid ⇒ Object
131 132 133 134 |
# File 'lib/ruote/fei.rb', line 131 def to_storage_id "#{@h['expid']}!#{@h['subid']}!#{@h['wfid']}" end |
#subid ⇒ Object Also known as: sub_wfid
123 |
# File 'lib/ruote/fei.rb', line 123 def subid; @h['subid']; end |
#to_h ⇒ Object
201 202 203 204 |
# File 'lib/ruote/fei.rb', line 201 def to_h @h end |
#to_sortable_id ⇒ Object
133 134 135 136 |
# File 'lib/ruote/fei.rb', line 133 def to_sortable_id "#{@h['wfid']}!!#{@h['expid']}" end |
#to_storage_id ⇒ Object
127 128 129 130 |
# File 'lib/ruote/fei.rb', line 127 def to_storage_id "#{@h['expid']}!#{@h['subid']}!#{@h['wfid']}" end |
#wfid ⇒ Object
121 |
# File 'lib/ruote/fei.rb', line 121 def wfid; @h['wfid']; end |