bumbleworks 0.0.64 → 0.0.65
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/bumbleworks/task/finder.rb +41 -1
- data/lib/bumbleworks/version.rb +1 -1
- data/spec/lib/bumbleworks/task_spec.rb +101 -0
- metadata +3 -3
@@ -8,6 +8,7 @@ module Bumbleworks
|
|
8
8
|
@queries << proc { |wi| wi['fields']['params']['task'] }
|
9
9
|
@task_class = task_class
|
10
10
|
@task_filters = []
|
11
|
+
@orderers = []
|
11
12
|
@wfids = nil
|
12
13
|
end
|
13
14
|
|
@@ -94,6 +95,22 @@ module Bumbleworks
|
|
94
95
|
for_processes([process])
|
95
96
|
end
|
96
97
|
|
98
|
+
def order_by_field(field, direction = :asc)
|
99
|
+
order_by_fields(field => direction)
|
100
|
+
end
|
101
|
+
|
102
|
+
def order_by_param(param, direction = :asc)
|
103
|
+
order_by_params(param => direction)
|
104
|
+
end
|
105
|
+
|
106
|
+
def order_by_fields(fields)
|
107
|
+
add_orderer(fields)
|
108
|
+
end
|
109
|
+
|
110
|
+
def order_by_params(params)
|
111
|
+
add_orderer(params, 'params')
|
112
|
+
end
|
113
|
+
|
97
114
|
def completable(true_or_false = true)
|
98
115
|
@task_filters << proc { |task| task.completable? == true_or_false }
|
99
116
|
self
|
@@ -115,7 +132,11 @@ module Bumbleworks
|
|
115
132
|
def each
|
116
133
|
return to_enum(:each) unless block_given?
|
117
134
|
return if @wfids == []
|
118
|
-
workitems =
|
135
|
+
workitems = raw_workitems(@wfids)
|
136
|
+
@orderers.each do |order_proc|
|
137
|
+
workitems.sort! &order_proc
|
138
|
+
end
|
139
|
+
workitems.each { |wi|
|
119
140
|
if task = filtered_task_from_raw_workitem(wi)
|
120
141
|
yield task
|
121
142
|
end
|
@@ -132,6 +153,21 @@ module Bumbleworks
|
|
132
153
|
|
133
154
|
private
|
134
155
|
|
156
|
+
def add_orderer(fields, field_type = 'fields')
|
157
|
+
@orderers << proc { |wi_x, wi_y|
|
158
|
+
relevant_direction, result = :asc, 0
|
159
|
+
fields.each do |field, direction|
|
160
|
+
sets = [wi_x['fields'], wi_y['fields']]
|
161
|
+
sets.map! { |s| s['params'] } if field_type.to_s == 'params'
|
162
|
+
result = sets[0][field.to_s] <=> sets[1][field.to_s]
|
163
|
+
relevant_direction = direction
|
164
|
+
break if !result.zero?
|
165
|
+
end
|
166
|
+
relevant_direction == :desc ? -result : result
|
167
|
+
}
|
168
|
+
self
|
169
|
+
end
|
170
|
+
|
135
171
|
def filtered_task_from_raw_workitem(workitem)
|
136
172
|
if @queries.all? { |q| q.call(workitem) }
|
137
173
|
task = from_workitem(::Ruote::Workitem.new(workitem))
|
@@ -146,6 +182,10 @@ module Bumbleworks
|
|
146
182
|
def from_workitem(workitem)
|
147
183
|
task = @task_class.new(workitem)
|
148
184
|
end
|
185
|
+
|
186
|
+
def raw_workitems(wfids)
|
187
|
+
Bumbleworks.dashboard.context.storage.get_many('workitems', wfids)
|
188
|
+
end
|
149
189
|
end
|
150
190
|
end
|
151
191
|
end
|
data/lib/bumbleworks/version.rb
CHANGED
@@ -218,6 +218,107 @@ describe Bumbleworks::Task do
|
|
218
218
|
end
|
219
219
|
end
|
220
220
|
|
221
|
+
context 'ordering' do
|
222
|
+
before :each do
|
223
|
+
Bumbleworks.define_process 'emergency_hamster_bullet' do
|
224
|
+
concurrence do
|
225
|
+
doctor :task => 'evince_concern', :priority => 3, :importance => 1000
|
226
|
+
patient :task => 'panic', :priority => 2, :importance => 5
|
227
|
+
nurse :task => 'roll_eyes', :priority => 4, :importance => 1000
|
228
|
+
officer :task => 'appear_authoritative', :priority => 1, :importance => 1000
|
229
|
+
end
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
context 'by params' do
|
234
|
+
before(:each) do
|
235
|
+
Bumbleworks.launch!('emergency_hamster_bullet')
|
236
|
+
Bumbleworks.dashboard.wait_for(:officer)
|
237
|
+
end
|
238
|
+
|
239
|
+
describe '.order_by_param' do
|
240
|
+
it 'orders returned tasks by given param ascending by default' do
|
241
|
+
tasks = described_class.order_by_param(:priority)
|
242
|
+
tasks.map(&:nickname).should == [
|
243
|
+
'appear_authoritative',
|
244
|
+
'panic',
|
245
|
+
'evince_concern',
|
246
|
+
'roll_eyes'
|
247
|
+
]
|
248
|
+
end
|
249
|
+
|
250
|
+
it 'can order in reverse' do
|
251
|
+
tasks = described_class.order_by_param(:priority, :desc)
|
252
|
+
tasks.map(&:nickname).should == [
|
253
|
+
'roll_eyes',
|
254
|
+
'evince_concern',
|
255
|
+
'panic',
|
256
|
+
'appear_authoritative'
|
257
|
+
]
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
describe '.order_by_params' do
|
262
|
+
it 'orders by multiple parameters' do
|
263
|
+
tasks = described_class.order_by_params(:importance => :desc, :priority => :asc)
|
264
|
+
tasks.map(&:nickname).should == [
|
265
|
+
'appear_authoritative',
|
266
|
+
'evince_concern',
|
267
|
+
'roll_eyes',
|
268
|
+
'panic'
|
269
|
+
]
|
270
|
+
end
|
271
|
+
end
|
272
|
+
end
|
273
|
+
|
274
|
+
context 'by fields' do
|
275
|
+
before(:each) do
|
276
|
+
@wf3 = Bumbleworks.launch!('emergency_hamster_bullet', :group => 2, :strength => 3)
|
277
|
+
Bumbleworks.dashboard.wait_for(:officer)
|
278
|
+
@wf1 = Bumbleworks.launch!('emergency_hamster_bullet', :group => 2, :strength => 1)
|
279
|
+
Bumbleworks.dashboard.wait_for(:officer)
|
280
|
+
@wf2 = Bumbleworks.launch!('emergency_hamster_bullet', :group => 1, :strength => 2)
|
281
|
+
Bumbleworks.dashboard.wait_for(:officer)
|
282
|
+
@wf4 = Bumbleworks.launch!('emergency_hamster_bullet', :group => 1, :strength => 4)
|
283
|
+
Bumbleworks.dashboard.wait_for(:officer)
|
284
|
+
end
|
285
|
+
|
286
|
+
describe '.order_by_field' do
|
287
|
+
it 'orders returned tasks by given param ascending by default' do
|
288
|
+
tasks = described_class.for_role('doctor').order_by_field(:strength)
|
289
|
+
tasks.map { |t| [t.nickname, t.wfid] }.should == [
|
290
|
+
['evince_concern', @wf1.wfid],
|
291
|
+
['evince_concern', @wf2.wfid],
|
292
|
+
['evince_concern', @wf3.wfid],
|
293
|
+
['evince_concern', @wf4.wfid]
|
294
|
+
]
|
295
|
+
end
|
296
|
+
|
297
|
+
it 'can order in reverse' do
|
298
|
+
tasks = described_class.for_role('doctor').order_by_field(:strength, :desc)
|
299
|
+
tasks.map { |t| [t.nickname, t.wfid] }.should == [
|
300
|
+
['evince_concern', @wf4.wfid],
|
301
|
+
['evince_concern', @wf3.wfid],
|
302
|
+
['evince_concern', @wf2.wfid],
|
303
|
+
['evince_concern', @wf1.wfid]
|
304
|
+
]
|
305
|
+
end
|
306
|
+
end
|
307
|
+
|
308
|
+
describe '.order_by_fields' do
|
309
|
+
it 'orders by multiple parameters' do
|
310
|
+
tasks = described_class.for_role('doctor').order_by_fields(:group => :asc, :strength => :desc)
|
311
|
+
tasks.map { |t| [t.nickname, t.wfid] }.should == [
|
312
|
+
['evince_concern', @wf4.wfid],
|
313
|
+
['evince_concern', @wf2.wfid],
|
314
|
+
['evince_concern', @wf3.wfid],
|
315
|
+
['evince_concern', @wf1.wfid]
|
316
|
+
]
|
317
|
+
end
|
318
|
+
end
|
319
|
+
end
|
320
|
+
end
|
321
|
+
|
221
322
|
describe '.for_roles' do
|
222
323
|
before :each do
|
223
324
|
Bumbleworks.define_process 'lowering_penguin_self_esteem' do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bumbleworks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.65
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -263,7 +263,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
263
263
|
version: '0'
|
264
264
|
segments:
|
265
265
|
- 0
|
266
|
-
hash:
|
266
|
+
hash: 3834352798561343652
|
267
267
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
268
268
|
none: false
|
269
269
|
requirements:
|
@@ -272,7 +272,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
272
272
|
version: '0'
|
273
273
|
segments:
|
274
274
|
- 0
|
275
|
-
hash:
|
275
|
+
hash: 3834352798561343652
|
276
276
|
requirements: []
|
277
277
|
rubyforge_project:
|
278
278
|
rubygems_version: 1.8.23
|