bumbleworks 0.0.18 → 0.0.19
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/bumbleworks.rb +1 -0
- data/lib/bumbleworks/ruote.rb +3 -2
- data/lib/bumbleworks/storage_participant.rb +9 -0
- data/lib/bumbleworks/task.rb +7 -0
- data/lib/bumbleworks/tasks/base.rb +7 -0
- data/lib/bumbleworks/version.rb +1 -1
- data/spec/fixtures/apps/with_default_directories/lib/bumbleworks/tasks/make_some_honey_task.rb +5 -0
- data/spec/integration/sample_application_spec.rb +10 -1
- data/spec/lib/bumbleworks/ruote_spec.rb +2 -2
- data/spec/lib/bumbleworks/task_spec.rb +54 -0
- metadata +3 -2
data/lib/bumbleworks.rb
CHANGED
@@ -8,6 +8,7 @@ require "bumbleworks/participant_registration"
|
|
8
8
|
require "bumbleworks/ruote"
|
9
9
|
require "bumbleworks/hash_storage"
|
10
10
|
require "bumbleworks/simple_logger"
|
11
|
+
require "bumbleworks/storage_participant"
|
11
12
|
|
12
13
|
module Bumbleworks
|
13
14
|
class UnsupportedMode < StandardError; end
|
data/lib/bumbleworks/ruote.rb
CHANGED
@@ -49,8 +49,9 @@ module Bumbleworks
|
|
49
49
|
|
50
50
|
def set_catchall_if_needed
|
51
51
|
last_participant = dashboard.participant_list.last
|
52
|
-
unless last_participant && last_participant.regex == "^.+$" &&
|
53
|
-
|
52
|
+
unless last_participant && last_participant.regex == "^.+$" &&
|
53
|
+
["Ruote::StorageParticipant", "Bumbleworks::StorageParticipant"].include?(last_participant.classname)
|
54
|
+
catchall = ::Ruote::ParticipantEntry.new(["^.+$", ["Bumbleworks::StorageParticipant", {}]])
|
54
55
|
dashboard.participant_list = dashboard.participant_list.push(catchall)
|
55
56
|
end
|
56
57
|
end
|
data/lib/bumbleworks/task.rb
CHANGED
@@ -5,6 +5,7 @@ module Bumbleworks
|
|
5
5
|
class AlreadyClaimed < StandardError; end
|
6
6
|
class MissingWorkitem < StandardError; end
|
7
7
|
class EntityNotFound < StandardError; end
|
8
|
+
class NotCompletable < StandardError; end
|
8
9
|
|
9
10
|
extend Forwardable
|
10
11
|
delegate [:sid, :fei, :fields, :params, :participant_name, :wfid, :wf_name] => :@workitem
|
@@ -129,6 +130,7 @@ module Bumbleworks
|
|
129
130
|
|
130
131
|
# proceed workitem (saving changes to fields)
|
131
132
|
def complete(metadata = {})
|
133
|
+
raise NotCompletable unless completable?
|
132
134
|
before_update(metadata)
|
133
135
|
before_complete(metadata)
|
134
136
|
proceed_workitem
|
@@ -164,6 +166,11 @@ module Bumbleworks
|
|
164
166
|
set_claimant(nil)
|
165
167
|
end
|
166
168
|
|
169
|
+
def on_dispatch
|
170
|
+
log(:dispatch)
|
171
|
+
after_dispatch
|
172
|
+
end
|
173
|
+
|
167
174
|
def log(action, metadata = {})
|
168
175
|
Bumbleworks.logger.info({
|
169
176
|
:actor => params['claimant'],
|
data/lib/bumbleworks/version.rb
CHANGED
@@ -11,7 +11,7 @@ describe 'Bumbleworks Sample Application' do
|
|
11
11
|
describe 'initializer' do
|
12
12
|
it 'registers participants' do
|
13
13
|
Bumbleworks.dashboard.participant_list.should have(3).items
|
14
|
-
Bumbleworks.dashboard.participant_list.map(&:classname).should =~ ['HoneyParticipant', 'MolassesParticipant', '
|
14
|
+
Bumbleworks.dashboard.participant_list.map(&:classname).should =~ ['HoneyParticipant', 'MolassesParticipant', 'Bumbleworks::StorageParticipant']
|
15
15
|
end
|
16
16
|
|
17
17
|
it 'loads process definitions' do
|
@@ -53,5 +53,14 @@ describe 'Bumbleworks Sample Application' do
|
|
53
53
|
task['what_happened'].should == 'update'
|
54
54
|
end
|
55
55
|
end
|
56
|
+
|
57
|
+
describe 'dispatching a task' do
|
58
|
+
it 'triggers after_dispatch callback' do
|
59
|
+
Bumbleworks.launch!('make_honey')
|
60
|
+
Bumbleworks.dashboard.wait_for(:dave)
|
61
|
+
task = Bumbleworks::Task.for_role('dave').first
|
62
|
+
task['i_was_dispatched'].should == 'yes_i_was'
|
63
|
+
end
|
64
|
+
end
|
56
65
|
end
|
57
66
|
|
@@ -70,7 +70,7 @@ describe Bumbleworks::Ruote do
|
|
70
70
|
described_class.dashboard.participant_list.should be_empty
|
71
71
|
described_class.register_participants ®istration_block
|
72
72
|
described_class.dashboard.participant_list.should have(4).items
|
73
|
-
described_class.dashboard.participant_list.map(&:classname).should =~ ['BeesHoney', 'MapleSyrup', 'NewCatchall', '
|
73
|
+
described_class.dashboard.participant_list.map(&:classname).should =~ ['BeesHoney', 'MapleSyrup', 'NewCatchall', 'Bumbleworks::StorageParticipant']
|
74
74
|
end
|
75
75
|
|
76
76
|
it 'does not add storage participant catchall if already exists' do
|
@@ -91,7 +91,7 @@ describe Bumbleworks::Ruote do
|
|
91
91
|
described_class.dashboard.participant_list.should be_empty
|
92
92
|
described_class.register_participants &nil
|
93
93
|
described_class.dashboard.participant_list.should have(1).item
|
94
|
-
described_class.dashboard.participant_list.first.classname.should == '
|
94
|
+
described_class.dashboard.participant_list.first.classname.should == 'Bumbleworks::StorageParticipant'
|
95
95
|
end
|
96
96
|
end
|
97
97
|
|
@@ -19,6 +19,12 @@ describe Bumbleworks::Task do
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
+
describe '#completable?' do
|
23
|
+
it 'defaults to true on base task' do
|
24
|
+
described_class.new(workflow_item).should be_completable
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
22
28
|
describe '.new' do
|
23
29
|
it 'raises an error if workitem is nil' do
|
24
30
|
expect {
|
@@ -44,6 +50,39 @@ describe Bumbleworks::Task do
|
|
44
50
|
end
|
45
51
|
end
|
46
52
|
|
53
|
+
describe '#on_dispatch' do
|
54
|
+
before :each do
|
55
|
+
Bumbleworks.define_process 'planting_a_noodle' do
|
56
|
+
concurrence do
|
57
|
+
horse_feeder :task => 'give_the_horse_a_bon_bon'
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'is called when task is dispatched, and triggers callback' do
|
63
|
+
described_class.any_instance.should_receive(:on_dispatch)
|
64
|
+
Bumbleworks.launch!('planting_a_noodle')
|
65
|
+
Bumbleworks.dashboard.wait_for(:horse_feeder)
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'logs dispatch' do
|
69
|
+
Bumbleworks.launch!('planting_a_noodle')
|
70
|
+
Bumbleworks.dashboard.wait_for(:horse_feeder)
|
71
|
+
task = described_class.for_role('horse_feeder').last
|
72
|
+
log_entry = Bumbleworks.logger.entries.last[:entry]
|
73
|
+
log_entry[:action].should == :dispatch
|
74
|
+
log_entry[:target_type].should == 'Task'
|
75
|
+
log_entry[:target_id].should == task.id
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'calls after_dispatch callback' do
|
79
|
+
task = described_class.new(workflow_item)
|
80
|
+
task.stub(:log)
|
81
|
+
task.should_receive(:after_dispatch)
|
82
|
+
task.on_dispatch
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
47
86
|
describe '#extend_module' do
|
48
87
|
it 'extends with base module and task module' do
|
49
88
|
task = described_class.new(workflow_item)
|
@@ -406,6 +445,21 @@ describe Bumbleworks::Task do
|
|
406
445
|
task.fields['meal'].should == 'root beer and a kite'
|
407
446
|
end
|
408
447
|
|
448
|
+
it 'throws exception if task is not completable' do
|
449
|
+
event = Bumbleworks.dashboard.wait_for :dog_mouth
|
450
|
+
task = described_class.for_role('dog_mouth').first
|
451
|
+
task.stub(:completable?).and_return(false)
|
452
|
+
task.should_receive(:before_update).never
|
453
|
+
task.should_receive(:before_complete).never
|
454
|
+
task.should_receive(:proceed_workitem).never
|
455
|
+
task.should_receive(:after_complete).never
|
456
|
+
task.should_receive(:after_update).never
|
457
|
+
expect {
|
458
|
+
task.complete
|
459
|
+
}.to raise_error(Bumbleworks::Task::NotCompletable)
|
460
|
+
described_class.for_role('dog_mouth').should_not be_empty
|
461
|
+
end
|
462
|
+
|
409
463
|
it 'calls update and complete callbacks' do
|
410
464
|
task = described_class.new(workflow_item)
|
411
465
|
task.stub(:log)
|
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.19
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2013-07-
|
15
|
+
date: 2013-07-09 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: ruote
|
@@ -174,6 +174,7 @@ files:
|
|
174
174
|
- lib/bumbleworks/ruote.rb
|
175
175
|
- lib/bumbleworks/simple_logger.rb
|
176
176
|
- lib/bumbleworks/storage_adapter.rb
|
177
|
+
- lib/bumbleworks/storage_participant.rb
|
177
178
|
- lib/bumbleworks/support.rb
|
178
179
|
- lib/bumbleworks/task.rb
|
179
180
|
- lib/bumbleworks/tasks/base.rb
|