ruote-kit 2.1.11 → 2.2.0.3
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/CHANGELOG.txt +6 -1
- data/CREDITS.txt +23 -0
- data/LICENSE.txt +1 -1
- data/README.rdoc +44 -7
- data/Rakefile +78 -45
- data/TODO.txt +8 -0
- data/lib/ruote-kit/helpers/json_helpers.rb +1 -1
- data/lib/ruote-kit/helpers/misc_helpers.rb +1 -1
- data/lib/ruote-kit/helpers/render_helpers.rb +18 -1
- data/lib/ruote-kit/public/_ruote/stylesheets/ruote-fluo-editor.css +1 -1
- data/lib/ruote-kit/resources/expressions.rb +6 -0
- data/lib/ruote-kit/resources/participants.rb +3 -1
- data/lib/ruote-kit/resources/schedules.rb +1 -1
- data/lib/ruote-kit/resources/workitems.rb +4 -0
- data/lib/ruote-kit/version.rb +1 -1
- data/lib/ruote-kit/views/expression.html.haml +2 -2
- data/lib/ruote-kit/views/layout.html.haml +1 -1
- data/lib/ruote-kit/views/participants.html.haml +19 -18
- data/lib/ruote-kit.rb +13 -3
- data/ruote-kit.gemspec +34 -133
- data/spec/resources/errors_spec.rb +20 -8
- data/spec/resources/expressions_spec.rb +211 -45
- data/spec/resources/index_spec.rb +1 -5
- data/spec/resources/participants_spec.rb +26 -9
- data/spec/resources/processes_spec.rb +77 -41
- data/spec/resources/schedules_spec.rb +33 -9
- data/spec/resources/workitems_spec.rb +174 -83
- data/spec/spec_helper.rb +11 -56
- data/spec/support/engine_helper.rb +97 -0
- data/spec/support/rack_helper.rb +21 -0
- data/spec/support/render_helper.rb +16 -0
- data/spec/webapp_helpers_spec.rb +1 -0
- metadata +121 -121
- data/.document +0 -0
- data/.gitignore +0 -10
- data/Gemfile +0 -51
- data/config.ru +0 -60
- data/lib/ruote-kit/spec/ruote_helpers.rb +0 -56
- data/spec/it_has_an_engine.rb +0 -69
- data/spec/spec.opts +0 -1
@@ -1,7 +1,5 @@
|
|
1
1
|
|
2
|
-
require 'spec_helper'
|
3
|
-
|
4
|
-
undef :context if defined?(context)
|
2
|
+
require File.join(File.dirname(__FILE__), '..', 'spec_helper.rb')
|
5
3
|
|
6
4
|
|
7
5
|
def workitem_count(from, to, of)
|
@@ -15,7 +13,15 @@ end
|
|
15
13
|
|
16
14
|
describe 'GET /_ruote/workitems' do
|
17
15
|
|
18
|
-
|
16
|
+
before(:each) do
|
17
|
+
|
18
|
+
prepare_engine
|
19
|
+
end
|
20
|
+
|
21
|
+
after(:each) do
|
22
|
+
|
23
|
+
shutdown_and_purge_engine
|
24
|
+
end
|
19
25
|
|
20
26
|
describe 'without any workitems' do
|
21
27
|
|
@@ -44,13 +50,16 @@ describe 'GET /_ruote/workitems' do
|
|
44
50
|
|
45
51
|
before(:each) do
|
46
52
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
53
|
+
register_participants
|
54
|
+
|
55
|
+
@wfid = RuoteKit.engine.launch(Ruote.process_definition do
|
56
|
+
sequence do
|
57
|
+
nada :activity => 'Work your magic'
|
52
58
|
end
|
53
|
-
end
|
59
|
+
end)
|
60
|
+
|
61
|
+
RuoteKit.engine.wait_for(:nada)
|
62
|
+
RuoteKit.engine.wait_for(1)
|
54
63
|
end
|
55
64
|
|
56
65
|
it 'should have a list of workitems (HTML)' do
|
@@ -67,7 +76,7 @@ describe 'GET /_ruote/workitems' do
|
|
67
76
|
last_response.should be_ok
|
68
77
|
json = last_response.json_body
|
69
78
|
|
70
|
-
json['workitems'].size.should
|
79
|
+
json['workitems'].size.should == 1
|
71
80
|
|
72
81
|
wi = json['workitems'][0]
|
73
82
|
|
@@ -81,19 +90,31 @@ end
|
|
81
90
|
|
82
91
|
describe 'GET /_ruote/workitems/wfid' do
|
83
92
|
|
84
|
-
|
93
|
+
before(:each) do
|
94
|
+
|
95
|
+
prepare_engine
|
96
|
+
end
|
97
|
+
|
98
|
+
after(:each) do
|
99
|
+
|
100
|
+
shutdown_and_purge_engine
|
101
|
+
end
|
85
102
|
|
86
103
|
describe 'with workitems' do
|
87
104
|
|
88
105
|
before(:each) do
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
106
|
+
|
107
|
+
register_participants
|
108
|
+
|
109
|
+
@wfid = RuoteKit.engine.launch(Ruote.process_definition do
|
110
|
+
concurrence do
|
111
|
+
nada :activity => 'This'
|
112
|
+
nada :activity => 'Or that'
|
95
113
|
end
|
96
|
-
end
|
114
|
+
end)
|
115
|
+
|
116
|
+
RuoteKit.engine.wait_for(:nada)
|
117
|
+
RuoteKit.engine.wait_for(1)
|
97
118
|
end
|
98
119
|
|
99
120
|
it 'should list the workitems (HTML)' do
|
@@ -145,55 +166,75 @@ describe 'GET /_ruote/workitems/wfid' do
|
|
145
166
|
end
|
146
167
|
end
|
147
168
|
|
148
|
-
describe 'GET /_ruote/workitems/expid
|
169
|
+
describe 'GET /_ruote/workitems/expid!subid!wfid' do
|
170
|
+
|
171
|
+
before(:each) do
|
172
|
+
|
173
|
+
prepare_engine_with_participants
|
174
|
+
end
|
149
175
|
|
150
|
-
|
176
|
+
after(:each) do
|
177
|
+
|
178
|
+
shutdown_and_purge_engine
|
179
|
+
end
|
151
180
|
|
152
181
|
describe 'with a workitem' do
|
153
182
|
|
154
183
|
before(:each) do
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
end
|
184
|
+
|
185
|
+
@wfid = RuoteKit.engine.launch(Ruote.process_definition do
|
186
|
+
sequence do
|
187
|
+
nada :activity => 'Work your magic'
|
160
188
|
end
|
161
|
-
end
|
189
|
+
end)
|
162
190
|
|
163
|
-
|
164
|
-
@nada_exp_id = '0_0_0' #process.expressions.last.fei.expid
|
191
|
+
RuoteKit.engine.wait_for(:nada)
|
165
192
|
|
166
|
-
@
|
193
|
+
@fei = engine.process(@wfid).expressions.last.fei
|
167
194
|
end
|
168
195
|
|
169
196
|
it 'should return it (HTML)' do
|
170
197
|
|
171
|
-
get "/_ruote/workitems/#{@
|
198
|
+
get "/_ruote/workitems/#{@fei.sid}"
|
172
199
|
|
173
200
|
last_response.should be_ok
|
174
201
|
end
|
175
202
|
|
176
203
|
it 'should return it (JSON)' do
|
177
204
|
|
178
|
-
get "/_ruote/workitems/#{@
|
205
|
+
get "/_ruote/workitems/#{@fei.sid}.json"
|
179
206
|
|
180
207
|
last_response.should be_ok
|
181
208
|
end
|
182
209
|
|
183
210
|
it 'should provide a workitem with the correct links (JSON)' do
|
184
211
|
|
185
|
-
get "/_ruote/workitems/#{@
|
212
|
+
get "/_ruote/workitems/#{@fei.sid}.json"
|
186
213
|
|
187
|
-
|
214
|
+
last_response.json_body['workitem']['links'].collect { |li|
|
215
|
+
li['rel']
|
216
|
+
}.should == %w[
|
217
|
+
self
|
218
|
+
http://ruote.rubyforge.org/rels.html#process
|
219
|
+
http://ruote.rubyforge.org/rels.html#process_expressions
|
220
|
+
http://ruote.rubyforge.org/rels.html#process_errors
|
221
|
+
]
|
222
|
+
end
|
223
|
+
|
224
|
+
it 'should include an etag header (HTML)' do
|
225
|
+
|
226
|
+
get "/_ruote/workitems/#{@fei.sid}"
|
227
|
+
|
228
|
+
last_response.headers.should include('ETag')
|
229
|
+
last_response.headers['ETag'].should == "\"#{find_workitem(@wfid, @nada_exp_id).to_h['_rev'].to_s}\""
|
230
|
+
end
|
231
|
+
|
232
|
+
it 'should include an etag header (JSON)' do
|
188
233
|
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
http://ruote.rubyforge.org/rels.html#process_expressions
|
194
|
-
http://ruote.rubyforge.org/rels.html#process_errors
|
195
|
-
],
|
196
|
-
json['workitem']['links'].collect { |li| li['rel'] })
|
234
|
+
get "/_ruote/workitems/#{@fei.sid}.json"
|
235
|
+
|
236
|
+
last_response.headers.should include('ETag')
|
237
|
+
last_response.headers['ETag'].should == "\"#{find_workitem(@wfid, @nada_exp_id).to_h['_rev'].to_s}\""
|
197
238
|
end
|
198
239
|
end
|
199
240
|
|
@@ -219,39 +260,41 @@ end
|
|
219
260
|
|
220
261
|
describe 'PUT /_ruote/workitems/fei' do
|
221
262
|
|
222
|
-
it_has_an_engine
|
223
|
-
|
224
263
|
before(:each) do
|
225
264
|
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
265
|
+
prepare_engine_with_participants
|
266
|
+
|
267
|
+
@wfid = RuoteKit.engine.launch(Ruote.process_definition do
|
268
|
+
sequence do
|
269
|
+
nada :activity => 'Work your magic'
|
270
|
+
echo '${f:foo}'
|
232
271
|
end
|
233
|
-
end
|
272
|
+
end)
|
234
273
|
|
235
|
-
|
236
|
-
@nada_exp_id = '0_0_0' #process.expressions.last.fei.expid
|
274
|
+
RuoteKit.engine.wait_for(:nada)
|
237
275
|
|
238
|
-
@
|
276
|
+
@fei = engine.process(@wfid).expressions.last.fei
|
239
277
|
|
240
278
|
@fields = {
|
241
279
|
'params' => { 'activity' => 'Work your magic' }, 'foo' => 'bar'
|
242
280
|
}
|
243
281
|
end
|
244
282
|
|
283
|
+
after(:each) do
|
284
|
+
|
285
|
+
shutdown_and_purge_engine
|
286
|
+
end
|
287
|
+
|
245
288
|
it 'should update the workitem fields (HTML)' do
|
246
289
|
|
247
290
|
put(
|
248
|
-
"/_ruote/workitems/#{@
|
291
|
+
"/_ruote/workitems/#{@fei.expid}!#{@fei.subid}!#{@wfid}",
|
249
292
|
:fields => Rufus::Json.encode(@fields))
|
250
293
|
|
251
294
|
last_response.should be_redirect
|
252
295
|
|
253
296
|
last_response['Location'].should ==
|
254
|
-
"/_ruote/workitems/#{@
|
297
|
+
"/_ruote/workitems/#{@fei.expid}!#{@fei.subid}!#{@wfid}"
|
255
298
|
|
256
299
|
find_workitem(@wfid, @nada_exp_id).fields.should == @fields
|
257
300
|
|
@@ -265,7 +308,7 @@ describe 'PUT /_ruote/workitems/fei' do
|
|
265
308
|
params = { 'fields' => @fields }
|
266
309
|
|
267
310
|
put(
|
268
|
-
"/_ruote/workitems/#{@
|
311
|
+
"/_ruote/workitems/#{@fei.expid}!#{@fei.subid}!#{@wfid}.json",
|
269
312
|
Rufus::Json.encode(params),
|
270
313
|
{ 'CONTENT_TYPE' => 'application/json' })
|
271
314
|
|
@@ -283,7 +326,7 @@ describe 'PUT /_ruote/workitems/fei' do
|
|
283
326
|
params = { 'workitem' => { 'fields' => @fields } }
|
284
327
|
|
285
328
|
put(
|
286
|
-
"/_ruote/workitems/#{@
|
329
|
+
"/_ruote/workitems/#{@fei.expid}!#{@fei.subid}!#{@wfid}.json",
|
287
330
|
Rufus::Json.encode(params),
|
288
331
|
{ 'CONTENT_TYPE' => 'application/json' })
|
289
332
|
|
@@ -297,7 +340,7 @@ describe 'PUT /_ruote/workitems/fei' do
|
|
297
340
|
fields = Rufus::Json.encode(@fields)
|
298
341
|
|
299
342
|
put(
|
300
|
-
"/_ruote/workitems/#{@
|
343
|
+
"/_ruote/workitems/#{@fei.expid}!#{@fei.subid}!#{@wfid}",
|
301
344
|
:fields => fields,
|
302
345
|
:_proceed => '1')
|
303
346
|
|
@@ -318,7 +361,7 @@ describe 'PUT /_ruote/workitems/fei' do
|
|
318
361
|
params = { 'fields' => @fields, '_proceed' => '1' }
|
319
362
|
|
320
363
|
put(
|
321
|
-
"/_ruote/workitems/#{@
|
364
|
+
"/_ruote/workitems/#{@fei.expid}!#{@fei.subid}!#{@wfid}.json",
|
322
365
|
Rufus::Json.encode(params),
|
323
366
|
{ 'CONTENT_TYPE' => 'application/json' })
|
324
367
|
|
@@ -335,7 +378,9 @@ describe 'PUT /_ruote/workitems/fei' do
|
|
335
378
|
|
336
379
|
it 'should 400 when passed bogus JSON fields (HTML)' do
|
337
380
|
|
338
|
-
put
|
381
|
+
put(
|
382
|
+
"/_ruote/workitems/#{@fei.expid}!#{@fei.subid}!#{@wfid}.json",
|
383
|
+
:fields => '{"bogus"}')
|
339
384
|
|
340
385
|
last_response.status.should be(400)
|
341
386
|
end
|
@@ -343,37 +388,83 @@ describe 'PUT /_ruote/workitems/fei' do
|
|
343
388
|
it 'should 400 when passed bogus JSON fields (JSON)' do
|
344
389
|
|
345
390
|
put(
|
346
|
-
"/_ruote/workitems/#{@
|
391
|
+
"/_ruote/workitems/#{@fei.expid}!#{@fei.subid}!#{@wfid}.json",
|
347
392
|
"{'bogus'}",
|
348
393
|
{ 'CONTENT_TYPE' => 'application/json' })
|
349
394
|
|
350
395
|
last_response.status.should be(400)
|
351
396
|
end
|
397
|
+
|
398
|
+
it 'should 412 if the etags do not match (HTML)' do
|
399
|
+
|
400
|
+
workitem = find_workitem(@wfid, @nada_exp_id)
|
401
|
+
old_rev = workitem.to_h['_rev']
|
402
|
+
|
403
|
+
workitem.fields = {'baz' => 'bar'}.merge!(@fields)
|
404
|
+
RuoteKit.engine.storage_participant.update(workitem)
|
405
|
+
|
406
|
+
put(
|
407
|
+
"/_ruote/workitems/#{@fei.expid}!#{@fei.subid}!#{@wfid}",
|
408
|
+
{ :fields => Rufus::Json.encode(@fields) },
|
409
|
+
{ 'HTTP_IF_MATCH' => ('"%s"' % old_rev) }
|
410
|
+
)
|
411
|
+
|
412
|
+
last_response.status.should be(412)
|
413
|
+
end
|
414
|
+
|
415
|
+
it 'should 412 if the etags do not match (JSON)' do
|
416
|
+
|
417
|
+
workitem = find_workitem(@wfid, @nada_exp_id)
|
418
|
+
|
419
|
+
old_rev = workitem.to_h['_rev']
|
420
|
+
|
421
|
+
workitem.fields = {'baz' => 'bar'}.merge!(@fields)
|
422
|
+
RuoteKit.engine.storage_participant.update(workitem)
|
423
|
+
|
424
|
+
params = { 'workitem' => { 'fields' => @fields } }
|
425
|
+
|
426
|
+
put(
|
427
|
+
"/_ruote/workitems/#{@fei.expid}!#{@fei.subid}!#{@wfid}.json",
|
428
|
+
Rufus::Json.encode(params),
|
429
|
+
{
|
430
|
+
'CONTENT_TYPE' => 'application/json',
|
431
|
+
'HTTP_IF_MATCH' => ('"%s"' % old_rev)
|
432
|
+
}
|
433
|
+
)
|
434
|
+
|
435
|
+
last_response.status.should be(412)
|
436
|
+
end
|
352
437
|
end
|
353
438
|
|
354
439
|
describe 'Filtering workitems' do
|
355
440
|
|
356
|
-
it_has_an_engine
|
357
|
-
|
358
441
|
before(:each) do
|
359
442
|
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
well :activity => 'Ready water'
|
443
|
+
prepare_engine_with_participants
|
444
|
+
|
445
|
+
@wfid = RuoteKit.engine.launch(Ruote.process_definition do
|
446
|
+
set 'foo' => 'bar'
|
447
|
+
concurrence do
|
448
|
+
sequence do
|
449
|
+
set 'wands' => 101
|
450
|
+
set 'hinkypinky' => 'honkytonky'
|
451
|
+
jack :activity => 'Fetch a pale'
|
452
|
+
end
|
453
|
+
sequence do
|
454
|
+
set 'hinkypinky' => 'honkytonky'
|
455
|
+
jill :activity => 'Chase Jack'
|
374
456
|
end
|
457
|
+
well :activity => 'Ready water'
|
375
458
|
end
|
376
|
-
end
|
459
|
+
end)
|
460
|
+
|
461
|
+
RuoteKit.engine.wait_for(:jack)
|
462
|
+
RuoteKit.engine.wait_for(1)
|
463
|
+
end
|
464
|
+
|
465
|
+
after(:each) do
|
466
|
+
|
467
|
+
shutdown_and_purge_engine
|
377
468
|
end
|
378
469
|
|
379
470
|
describe 'on participants' do
|
@@ -384,7 +475,7 @@ describe 'Filtering workitems' do
|
|
384
475
|
|
385
476
|
last_response.should be_ok
|
386
477
|
|
387
|
-
last_response.json_body['workitems'].size.should
|
478
|
+
last_response.json_body['workitems'].size.should == 1
|
388
479
|
end
|
389
480
|
|
390
481
|
it 'should narrow results down to a single participant (HTML)' do
|
@@ -406,7 +497,7 @@ describe 'Filtering workitems' do
|
|
406
497
|
|
407
498
|
last_response.should be_ok
|
408
499
|
|
409
|
-
last_response.json_body['workitems'].size.should
|
500
|
+
last_response.json_body['workitems'].size.should == 2
|
410
501
|
end
|
411
502
|
|
412
503
|
it 'should find workitems with fields set to a given value (HTML)' do
|
@@ -422,7 +513,7 @@ describe 'Filtering workitems' do
|
|
422
513
|
|
423
514
|
last_response.should be_ok
|
424
515
|
|
425
|
-
last_response.json_body['workitems'].size.should
|
516
|
+
last_response.json_body['workitems'].size.should == 1
|
426
517
|
end
|
427
518
|
|
428
519
|
it 'should respect JSON encoded filter vars (HTML)' do
|
@@ -438,7 +529,7 @@ describe 'Filtering workitems' do
|
|
438
529
|
|
439
530
|
last_response.should be_ok
|
440
531
|
|
441
|
-
last_response.json_body['workitems'].size.should
|
532
|
+
last_response.json_body['workitems'].size.should == 1
|
442
533
|
end
|
443
534
|
|
444
535
|
it "should combine search criteria by 'and' (HMTL)" do
|
data/spec/spec_helper.rb
CHANGED
@@ -1,15 +1,13 @@
|
|
1
|
-
|
1
|
+
|
2
|
+
HERE = File.dirname(__FILE__) unless defined?(HERE)
|
2
3
|
|
3
4
|
ENV['RACK_ENV'] = 'test'
|
4
5
|
|
5
|
-
require 'rubygems'
|
6
6
|
require 'bundler'
|
7
7
|
Bundler.setup(:default, :test)
|
8
8
|
|
9
|
-
require '
|
10
|
-
require 'spec/interop/test'
|
9
|
+
require 'rspec'
|
11
10
|
require 'rack/test'
|
12
|
-
|
13
11
|
require 'webrat'
|
14
12
|
|
15
13
|
begin
|
@@ -23,21 +21,13 @@ rescue LoadError
|
|
23
21
|
end
|
24
22
|
end
|
25
23
|
|
26
|
-
|
27
|
-
|
28
|
-
begin
|
29
|
-
require File.join(File.dirname(__FILE__), '/../vendor/gems/environment')
|
30
|
-
rescue LoadError
|
31
|
-
end
|
32
|
-
require File.join(File.dirname(__FILE__), '/../lib/ruote-kit')
|
33
|
-
|
34
|
-
require 'ruote-kit/spec/ruote_helpers'
|
35
|
-
require 'spec/it_has_an_engine'
|
36
|
-
|
24
|
+
require File.join(HERE, '../lib/ruote-kit')
|
37
25
|
require 'ruote/log/test_logger'
|
38
26
|
|
27
|
+
Dir[File.join(HERE, 'support/**/*.rb')].each { |f| require(f) }
|
28
|
+
|
39
29
|
|
40
|
-
|
30
|
+
RSpec.configure do |config|
|
41
31
|
|
42
32
|
# == Mock Framework
|
43
33
|
#
|
@@ -48,49 +38,14 @@ Spec::Runner.configure do |config|
|
|
48
38
|
# config.mock_with :flexmock
|
49
39
|
# config.mock_with :rr
|
50
40
|
|
51
|
-
|
52
|
-
config.include
|
53
|
-
config.include RuoteKit::Spec::RuoteHelpers
|
41
|
+
config.include Webrat::Matchers
|
42
|
+
config.include Rack::Test::Methods
|
54
43
|
|
55
|
-
|
56
|
-
|
57
|
-
end
|
58
|
-
def it_has_an_engine_with_no_participants
|
59
|
-
it_should_behave_like 'it has an engine with no participants'
|
60
|
-
end
|
44
|
+
config.include RenderHelper
|
45
|
+
config.include EngineHelper
|
61
46
|
|
62
47
|
RuoteKit::Application.included_modules.each do |klass|
|
63
48
|
config.include(klass) if klass.name =~ /RuoteKit::Helpers::\w+Helpers/
|
64
49
|
end
|
65
50
|
end
|
66
51
|
|
67
|
-
def app
|
68
|
-
RuoteKit::Application
|
69
|
-
end
|
70
|
-
|
71
|
-
def render(template, scope=nil, locals={}, &block)
|
72
|
-
template = File.read(File.join(app.views, template.to_s))
|
73
|
-
engine = Haml::Engine.new(template)
|
74
|
-
engine.render(scope, locals, &block)
|
75
|
-
end
|
76
|
-
|
77
|
-
class Rack::MockResponse
|
78
|
-
|
79
|
-
def json_body
|
80
|
-
Rufus::Json.decode(body)
|
81
|
-
end
|
82
|
-
|
83
|
-
def json?
|
84
|
-
begin
|
85
|
-
json_body
|
86
|
-
return true
|
87
|
-
rescue
|
88
|
-
return false
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
def html?
|
93
|
-
! json?
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
@@ -0,0 +1,97 @@
|
|
1
|
+
|
2
|
+
class Tracer
|
3
|
+
def initialize
|
4
|
+
@trace = ''
|
5
|
+
end
|
6
|
+
def to_s
|
7
|
+
@trace.to_s.strip
|
8
|
+
end
|
9
|
+
def << s
|
10
|
+
@trace << s
|
11
|
+
end
|
12
|
+
def clear
|
13
|
+
@trace = ''
|
14
|
+
end
|
15
|
+
def puts s
|
16
|
+
@trace << "#{s}\n"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
module EngineHelper
|
22
|
+
|
23
|
+
def prepare_engine
|
24
|
+
|
25
|
+
RuoteKit.engine =
|
26
|
+
Ruote::Engine.new(
|
27
|
+
Ruote::Worker.new(
|
28
|
+
Ruote::HashStorage.new))
|
29
|
+
|
30
|
+
@tracer = Tracer.new
|
31
|
+
RuoteKit.engine.add_service('tracer', @tracer)
|
32
|
+
end
|
33
|
+
|
34
|
+
def register_participants
|
35
|
+
|
36
|
+
RuoteKit.engine.register do
|
37
|
+
catchall Ruote::StorageParticipant
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def prepare_engine_with_participants
|
42
|
+
|
43
|
+
prepare_engine
|
44
|
+
register_participants
|
45
|
+
end
|
46
|
+
|
47
|
+
def shutdown_and_purge_engine
|
48
|
+
|
49
|
+
return unless RuoteKit.engine
|
50
|
+
|
51
|
+
RuoteKit.engine.shutdown
|
52
|
+
RuoteKit.engine.storage.purge!
|
53
|
+
RuoteKit.engine = nil
|
54
|
+
end
|
55
|
+
|
56
|
+
def launch_nada_process
|
57
|
+
|
58
|
+
pdef = Ruote.process_definition :name => 'test' do
|
59
|
+
nada
|
60
|
+
end
|
61
|
+
|
62
|
+
wfid = RuoteKit.engine.launch(pdef)
|
63
|
+
|
64
|
+
RuoteKit.engine.wait_for(:nada)
|
65
|
+
RuoteKit.engine.wait_for(1)
|
66
|
+
|
67
|
+
wfid
|
68
|
+
end
|
69
|
+
|
70
|
+
def noisy(on = true)
|
71
|
+
|
72
|
+
RuoteKit.engine.noisy = on
|
73
|
+
end
|
74
|
+
|
75
|
+
def engine
|
76
|
+
|
77
|
+
RuoteKit.engine
|
78
|
+
end
|
79
|
+
|
80
|
+
def storage_participant
|
81
|
+
|
82
|
+
RuoteKit.engine.storage_participant
|
83
|
+
end
|
84
|
+
|
85
|
+
def find_workitem(wfid, expid)
|
86
|
+
|
87
|
+
RuoteKit.engine.storage_participant.by_wfid(wfid).first { |wi|
|
88
|
+
wi.fei.expid == expid
|
89
|
+
}
|
90
|
+
end
|
91
|
+
|
92
|
+
def wait_for(wfid)
|
93
|
+
|
94
|
+
RuoteKit.engine.wait_for(wfid)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
@@ -0,0 +1,16 @@
|
|
1
|
+
|
2
|
+
module RenderHelper
|
3
|
+
|
4
|
+
def app
|
5
|
+
|
6
|
+
RuoteKit::Application
|
7
|
+
end
|
8
|
+
|
9
|
+
def render(template, scope=nil, locals={}, &block)
|
10
|
+
|
11
|
+
template = File.read(File.join(app.views, template.to_s))
|
12
|
+
engine = Haml::Engine.new(template)
|
13
|
+
engine.render(scope, locals, &block)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
data/spec/webapp_helpers_spec.rb
CHANGED
@@ -92,6 +92,7 @@ describe RuoteKit::Helpers::RenderHelpers do
|
|
92
92
|
before(:each) do
|
93
93
|
@resource = Object.new
|
94
94
|
class << @resource
|
95
|
+
include RenderHelper
|
95
96
|
attr_accessor :count, :skip, :limit, :request
|
96
97
|
def to_html
|
97
98
|
'<div>' + render('_pagination.html.haml', self) + '</div>'
|