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 =
'_'
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.
- .to_storage_id(hfei) ⇒ Object
Instance Method Summary collapse
-
#<=>(other) ⇒ Object
For proper hashing and sorting.
-
#==(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
For proper hashing and sorting.
-
#initialize(h) ⇒ FlowExpressionId
constructor
A new instance of FlowExpressionId.
-
#mnemo_id ⇒ Object
Returns a rufus-mnemo version of the first 9 hexdigits in the subid.
-
#short_sid ⇒ Object
expid!subid[0, 5]!wfid.
- #sid ⇒ Object
- #subid ⇒ Object (also: #sub_wfid)
- #to_h ⇒ Object
-
#to_sortable_id ⇒ Object
wfid!!expid.
- #to_storage_id ⇒ Object
- #wfid ⇒ Object
Constructor Details
#initialize(h) ⇒ FlowExpressionId
Returns a new instance of FlowExpressionId.
68 69 70 71 72 73 74 75 76 77 |
# File 'lib/ruote/fei.rb', line 68 def initialize(h) @h = h class << h; include Ruote::HashDot; end sub_wfid = @h.delete('sub_wfid') @h['subid'] ||= sub_wfid # # TODO : for 2.2.2, remove those two lines end |
Instance Attribute Details
#h ⇒ Object (readonly)
Returns the value of attribute h.
66 67 68 |
# File 'lib/ruote/fei.rb', line 66 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.
168 169 170 171 |
# File 'lib/ruote/fei.rb', line 168 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.
181 182 183 184 185 186 187 188 189 190 |
# File 'lib/ruote/fei.rb', line 181 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
197 198 199 200 |
# File 'lib/ruote/fei.rb', line 197 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, …)
205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 |
# File 'lib/ruote/fei.rb', line 205 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.
120 121 122 123 |
# File 'lib/ruote/fei.rb', line 120 def self.from_id(s, engine_id='engine') extract("#{engine_id}!#{s}") end |
.to_storage_id(hfei) ⇒ Object
107 108 109 110 111 112 113 114 115 116 |
# File 'lib/ruote/fei.rb', line 107 def self.to_storage_id(hfei) # TODO : for 2.1.13, remove the subid || sub_wfid trick if hfei.respond_to?(:to_storage_id) hfei.to_storage_id else "#{hfei['expid']}!#{hfei['subid'] || hfei['sub_wfid']}!#{hfei['wfid']}" end end |
Instance Method Details
#<=>(other) ⇒ Object
For proper hashing and sorting.
149 150 151 152 |
# File 'lib/ruote/fei.rb', line 149 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.
157 158 159 160 161 162 |
# File 'lib/ruote/fei.rb', line 157 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’.
128 129 130 131 |
# File 'lib/ruote/fei.rb', line 128 def child_id h.expid.split(CHILD_SEP).last.to_i end |
#engine_id ⇒ Object
81 |
# File 'lib/ruote/fei.rb', line 81 def engine_id; @h['engine_id']; end |
#expid ⇒ Object
79 |
# File 'lib/ruote/fei.rb', line 79 def expid; @h['expid']; end |
#hash ⇒ Object
For proper hashing and sorting.
142 143 144 145 |
# File 'lib/ruote/fei.rb', line 142 def hash to_storage_id.hash end |
#mnemo_id ⇒ Object
Returns a rufus-mnemo version of the first 9 hexdigits in the subid.
135 136 137 138 |
# File 'lib/ruote/fei.rb', line 135 def mnemo_id Rufus::Mnemo.from_i(@h['subid'][0, 9].to_i(16)) end |
#short_sid ⇒ Object
expid!subid[0, 5]!wfid
95 96 97 98 |
# File 'lib/ruote/fei.rb', line 95 def short_sid "#{@h['expid']}!#{@h['subid'][0, 5]}!#{@h['wfid']}" end |
#sid ⇒ Object
91 92 93 94 |
# File 'lib/ruote/fei.rb', line 91 def to_storage_id "#{@h['expid']}!#{@h['subid']}!#{@h['wfid']}" end |
#subid ⇒ Object Also known as: sub_wfid
82 |
# File 'lib/ruote/fei.rb', line 82 def subid; @h['subid']; end |
#to_h ⇒ Object
173 174 175 176 |
# File 'lib/ruote/fei.rb', line 173 def to_h @h end |
#to_sortable_id ⇒ Object
wfid!!expid
102 103 104 105 |
# File 'lib/ruote/fei.rb', line 102 def to_sortable_id "#{@h['wfid']}!!#{@h['expid']}" end |
#to_storage_id ⇒ Object
86 87 88 89 |
# File 'lib/ruote/fei.rb', line 86 def to_storage_id "#{@h['expid']}!#{@h['subid']}!#{@h['wfid']}" end |
#wfid ⇒ Object
80 |
# File 'lib/ruote/fei.rb', line 80 def wfid; @h['wfid']; end |