bumbleworks 0.0.74 → 0.0.76

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.
Files changed (50) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +1 -1
  3. data/.ruby-version +1 -1
  4. data/bumbleworks.gemspec +2 -2
  5. data/lib/bumbleworks.rb +1 -0
  6. data/lib/bumbleworks/expression.rb +12 -1
  7. data/lib/bumbleworks/process.rb +10 -0
  8. data/lib/bumbleworks/process/error_record.rb +14 -0
  9. data/lib/bumbleworks/schedule.rb +58 -0
  10. data/lib/bumbleworks/task.rb +2 -1
  11. data/lib/bumbleworks/task/finder.rb +4 -0
  12. data/lib/bumbleworks/version.rb +1 -1
  13. data/lib/bumbleworks/workitem.rb +4 -0
  14. data/spec/fixtures/schedules.rb +40 -0
  15. data/spec/integration/entity_spec.rb +7 -7
  16. data/spec/integration/example_configurations_spec.rb +5 -5
  17. data/spec/integration/history_storage_spec.rb +9 -9
  18. data/spec/integration/sample_application_spec.rb +15 -15
  19. data/spec/lib/bumbleworks/configuration_spec.rb +52 -52
  20. data/spec/lib/bumbleworks/entity_spec.rb +66 -68
  21. data/spec/lib/bumbleworks/error_handler_spec.rb +1 -1
  22. data/spec/lib/bumbleworks/error_logger_spec.rb +5 -5
  23. data/spec/lib/bumbleworks/expression_spec.rb +34 -12
  24. data/spec/lib/bumbleworks/hash_storage_spec.rb +2 -2
  25. data/spec/lib/bumbleworks/participant/base_spec.rb +1 -1
  26. data/spec/lib/bumbleworks/participant/entity_interactor_spec.rb +20 -20
  27. data/spec/lib/bumbleworks/participant/error_dispatcher_spec.rb +3 -3
  28. data/spec/lib/bumbleworks/participant/local_participant_spec.rb +1 -1
  29. data/spec/lib/bumbleworks/participant_registration_spec.rb +4 -4
  30. data/spec/lib/bumbleworks/process/error_record_spec.rb +13 -0
  31. data/spec/lib/bumbleworks/process_definition_spec.rb +30 -24
  32. data/spec/lib/bumbleworks/process_spec.rb +86 -54
  33. data/spec/lib/bumbleworks/ruote/exp/broadcast_event_expression_spec.rb +2 -2
  34. data/spec/lib/bumbleworks/ruote/exp/wait_for_event_expression_spec.rb +4 -4
  35. data/spec/lib/bumbleworks/ruote_spec.rb +73 -71
  36. data/spec/lib/bumbleworks/schedule_spec.rb +124 -0
  37. data/spec/lib/bumbleworks/simple_logger_spec.rb +8 -8
  38. data/spec/lib/bumbleworks/storage_adapter_spec.rb +16 -16
  39. data/spec/lib/bumbleworks/support_spec.rb +23 -19
  40. data/spec/lib/bumbleworks/task/finder_spec.rb +46 -46
  41. data/spec/lib/bumbleworks/task_spec.rb +188 -167
  42. data/spec/lib/bumbleworks/tracker_spec.rb +41 -42
  43. data/spec/lib/bumbleworks/tree_builder_spec.rb +9 -7
  44. data/spec/lib/bumbleworks/user_spec.rb +35 -35
  45. data/spec/lib/bumbleworks/workitem_entity_storage_spec.rb +5 -5
  46. data/spec/lib/bumbleworks/workitem_spec.rb +28 -17
  47. data/spec/lib/bumbleworks_spec.rb +57 -51
  48. data/spec/spec_helper.rb +0 -1
  49. data/spec/support/shared_examples.rb +3 -3
  50. metadata +35 -54
@@ -11,7 +11,7 @@ describe Bumbleworks::Configuration do
11
11
 
12
12
  it 'returns folder set by user' do
13
13
  configuration.root = '/what/about/that'
14
- configuration.root.should == '/what/about/that'
14
+ expect(configuration.root).to eq('/what/about/that')
15
15
  end
16
16
 
17
17
  it 'uses Rails.root if Rails is defined' do
@@ -21,7 +21,7 @@ describe Bumbleworks::Configuration do
21
21
  end
22
22
  end
23
23
 
24
- configuration.root.should == '/Rails/Root/lib/bumbleworks'
24
+ expect(configuration.root).to eq('/Rails/Root/lib/bumbleworks')
25
25
  Object.send(:remove_const, :Rails)
26
26
  end
27
27
 
@@ -32,7 +32,7 @@ describe Bumbleworks::Configuration do
32
32
  end
33
33
  end
34
34
 
35
- configuration.root.should == '/Padrino/Root/lib/bumbleworks'
35
+ expect(configuration.root).to eq('/Padrino/Root/lib/bumbleworks')
36
36
  Object.send(:remove_const, :Padrino)
37
37
  end
38
38
 
@@ -45,7 +45,7 @@ describe Bumbleworks::Configuration do
45
45
  end
46
46
  end
47
47
 
48
- configuration.root.should == '/Sinatra/Root/lib/bumbleworks'
48
+ expect(configuration.root).to eq('/Sinatra/Root/lib/bumbleworks')
49
49
  Object.send(:remove_const, :Sinatra)
50
50
  end
51
51
 
@@ -56,7 +56,7 @@ describe Bumbleworks::Configuration do
56
56
  end
57
57
  end
58
58
 
59
- configuration.root.should == '/Rory/Root/lib/bumbleworks'
59
+ expect(configuration.root).to eq('/Rory/Root/lib/bumbleworks')
60
60
  Object.send(:remove_const, :Rory)
61
61
  end
62
62
 
@@ -74,27 +74,27 @@ describe Bumbleworks::Configuration do
74
74
 
75
75
  describe "#definitions_directory" do
76
76
  it 'returns the folder which was set by the client app' do
77
- File.stub(:directory?).with('/dog/ate/my/homework').and_return(true)
77
+ allow(File).to receive(:directory?).with('/dog/ate/my/homework').and_return(true)
78
78
  configuration.definitions_directory = '/dog/ate/my/homework'
79
- configuration.definitions_directory.should == '/dog/ate/my/homework'
79
+ expect(configuration.definitions_directory).to eq('/dog/ate/my/homework')
80
80
  end
81
81
 
82
82
  it 'returns the default folder if not set by client app' do
83
- File.stub(:directory? => true)
83
+ allow(File).to receive_messages(:directory? => true)
84
84
  configuration.root = '/Root'
85
- configuration.definitions_directory.should == '/Root/process_definitions'
85
+ expect(configuration.definitions_directory).to eq('/Root/process_definitions')
86
86
  end
87
87
 
88
88
  it 'returns the second default folder if first does not exist' do
89
- File.stub(:directory?).with('/Root/process_definitions').and_return(false)
90
- File.stub(:directory?).with('/Root/processes').and_return(true)
89
+ allow(File).to receive(:directory?).with('/Root/process_definitions').and_return(false)
90
+ allow(File).to receive(:directory?).with('/Root/processes').and_return(true)
91
91
  configuration.root = '/Root'
92
- configuration.definitions_directory.should == '/Root/processes'
92
+ expect(configuration.definitions_directory).to eq('/Root/processes')
93
93
  end
94
94
 
95
95
  it 'returns nil if default folder not found' do
96
96
  configuration.root = '/Root'
97
- configuration.definitions_directory.should be_nil
97
+ expect(configuration.definitions_directory).to be_nil
98
98
  end
99
99
 
100
100
  it 'raises error if specific folder not found' do
@@ -110,20 +110,20 @@ describe Bumbleworks::Configuration do
110
110
 
111
111
  describe "#participants_directory" do
112
112
  it 'returns the folder which was set by the client app' do
113
- File.stub(:directory?).with('/dog/ate/my/homework').and_return(true)
113
+ allow(File).to receive(:directory?).with('/dog/ate/my/homework').and_return(true)
114
114
  configuration.participants_directory = '/dog/ate/my/homework'
115
- configuration.participants_directory.should == '/dog/ate/my/homework'
115
+ expect(configuration.participants_directory).to eq('/dog/ate/my/homework')
116
116
  end
117
117
 
118
118
  it 'returns the default folder if not set by client app' do
119
- File.stub(:directory?).with('/Root/participants').and_return(true)
119
+ allow(File).to receive(:directory?).with('/Root/participants').and_return(true)
120
120
  configuration.root = '/Root'
121
- configuration.participants_directory.should == '/Root/participants'
121
+ expect(configuration.participants_directory).to eq('/Root/participants')
122
122
  end
123
123
 
124
124
  it 'returns nil if default folder not found' do
125
125
  configuration.root = '/Root'
126
- configuration.participants_directory.should be_nil
126
+ expect(configuration.participants_directory).to be_nil
127
127
  end
128
128
 
129
129
  it 'raises error if specific folder not found' do
@@ -139,20 +139,20 @@ describe Bumbleworks::Configuration do
139
139
 
140
140
  describe "#tasks_directory" do
141
141
  it 'returns the folder which was set by the client app' do
142
- File.stub(:directory?).with('/dog/ate/my/homework').and_return(true)
142
+ allow(File).to receive(:directory?).with('/dog/ate/my/homework').and_return(true)
143
143
  configuration.tasks_directory = '/dog/ate/my/homework'
144
- configuration.tasks_directory.should == '/dog/ate/my/homework'
144
+ expect(configuration.tasks_directory).to eq('/dog/ate/my/homework')
145
145
  end
146
146
 
147
147
  it 'returns the default folder if not set by client app' do
148
- File.stub(:directory?).with('/Root/tasks').and_return(true)
148
+ allow(File).to receive(:directory?).with('/Root/tasks').and_return(true)
149
149
  configuration.root = '/Root'
150
- configuration.tasks_directory.should == '/Root/tasks'
150
+ expect(configuration.tasks_directory).to eq('/Root/tasks')
151
151
  end
152
152
 
153
153
  it 'returns nil if default folder not found' do
154
154
  configuration.root = '/Root'
155
- configuration.tasks_directory.should be_nil
155
+ expect(configuration.tasks_directory).to be_nil
156
156
  end
157
157
 
158
158
  it 'raises error if specific folder not found' do
@@ -168,20 +168,20 @@ describe Bumbleworks::Configuration do
168
168
 
169
169
  describe "#participant_registration_file" do
170
170
  it 'returns the path which was set by the client app' do
171
- File.stub(:file?).with('/can/i/get/a/rooster.rb').and_return(true)
171
+ allow(File).to receive(:file?).with('/can/i/get/a/rooster.rb').and_return(true)
172
172
  configuration.participant_registration_file = '/can/i/get/a/rooster.rb'
173
- configuration.participant_registration_file.should == '/can/i/get/a/rooster.rb'
173
+ expect(configuration.participant_registration_file).to eq('/can/i/get/a/rooster.rb')
174
174
  end
175
175
 
176
176
  it 'returns the default folder if not set by client app' do
177
- File.stub(:file?).with('/Root/participants.rb').and_return(true)
177
+ allow(File).to receive(:file?).with('/Root/participants.rb').and_return(true)
178
178
  configuration.root = '/Root'
179
- configuration.participant_registration_file.should == '/Root/participants.rb'
179
+ expect(configuration.participant_registration_file).to eq('/Root/participants.rb')
180
180
  end
181
181
 
182
182
  it 'returns nil if default path not found' do
183
183
  configuration.root = '/Root'
184
- configuration.participant_registration_file.should be_nil
184
+ expect(configuration.participant_registration_file).to be_nil
185
185
  end
186
186
 
187
187
  it 'raises error if specific path not found' do
@@ -198,35 +198,35 @@ describe Bumbleworks::Configuration do
198
198
  describe '#logger' do
199
199
  it 'returns the registered logger' do
200
200
  configuration.logger = :a_logger
201
- configuration.logger.should == :a_logger
201
+ expect(configuration.logger).to eq(:a_logger)
202
202
  end
203
203
 
204
204
  it 'returns the default simple logger if no logger registered' do
205
- configuration.logger.should == Bumbleworks::SimpleLogger
205
+ expect(configuration.logger).to eq(Bumbleworks::SimpleLogger)
206
206
  end
207
207
  end
208
208
 
209
209
  describe '#observers' do
210
210
  it 'is empty by default' do
211
- configuration.observers.should be_empty
211
+ expect(configuration.observers).to be_empty
212
212
  end
213
213
 
214
214
  it 'returns the registered observers' do
215
215
  configuration.observers = [:smash, :pumpkin]
216
216
  configuration.observers << :rhubarb
217
- configuration.observers.should == [:smash, :pumpkin, :rhubarb]
217
+ expect(configuration.observers).to eq([:smash, :pumpkin, :rhubarb])
218
218
  end
219
219
  end
220
220
 
221
221
  describe '#entity_classes' do
222
222
  it 'is empty by default' do
223
- configuration.entity_classes.should be_empty
223
+ expect(configuration.entity_classes).to be_empty
224
224
  end
225
225
 
226
226
  it 'returns the registered entity classes' do
227
227
  configuration.entity_classes = [:fumpin, :nuffin]
228
228
  configuration.entity_classes << :summin
229
- configuration.entity_classes.should == [:fumpin, :nuffin, :summin]
229
+ expect(configuration.entity_classes).to eq([:fumpin, :nuffin, :summin])
230
230
  end
231
231
  end
232
232
 
@@ -234,18 +234,18 @@ describe Bumbleworks::Configuration do
234
234
  it 'can set storage directly' do
235
235
  storage = double("Storage")
236
236
  configuration.storage = storage
237
- configuration.storage.should == storage
237
+ expect(configuration.storage).to eq(storage)
238
238
  end
239
239
  end
240
240
 
241
241
  describe '#storage_options' do
242
242
  it 'defaults to empty hash' do
243
- subject.storage_options.should == {}
243
+ expect(subject.storage_options).to eq({})
244
244
  end
245
245
 
246
246
  it 'can be overridden' do
247
247
  subject.storage_options = { :smooshie => 'wubbles' }
248
- subject.storage_options.should == { :smooshie => 'wubbles' }
248
+ expect(subject.storage_options).to eq({ :smooshie => 'wubbles' })
249
249
  end
250
250
  end
251
251
 
@@ -254,19 +254,19 @@ describe Bumbleworks::Configuration do
254
254
  right_adapter = double('right', :use? => true)
255
255
  wrong_adapter_1 = double('wrong1', :use? => false)
256
256
  wrong_adapter_2 = double('wrong2', :use? => false)
257
- subject.stub(:storage_adapters => [wrong_adapter_1, right_adapter, wrong_adapter_2])
258
- subject.storage_adapter.should == right_adapter
257
+ allow(subject).to receive_messages(:storage_adapters => [wrong_adapter_1, right_adapter, wrong_adapter_2])
258
+ expect(subject.storage_adapter).to eq(right_adapter)
259
259
  end
260
260
 
261
261
  it 'can be set storage directly' do
262
262
  storage = double("Storage Adapter")
263
263
  subject.storage_adapter = storage
264
- subject.storage_adapter.should == storage
264
+ expect(subject.storage_adapter).to eq(storage)
265
265
  end
266
266
 
267
267
  it 'raises UndefinedSetting if no matching storage adapter' do
268
268
  wrong_adapter = double('wrong1', :use? => false, :display_name => 'Wrong')
269
- subject.stub(:storage_adapters => [wrong_adapter])
269
+ allow(subject).to receive_messages(:storage_adapters => [wrong_adapter])
270
270
  expect {
271
271
  subject.storage_adapter
272
272
  }.to raise_error(Bumbleworks::UndefinedSetting,
@@ -284,12 +284,12 @@ describe Bumbleworks::Configuration do
284
284
  describe '#add_storage_adapter' do
285
285
  it 'adds storage adapter to registered list' do
286
286
  GoodForNothingStorage = double('fake_storage', :respond_to? => true)
287
- configuration.storage_adapters.should be_empty
287
+ expect(configuration.storage_adapters).to be_empty
288
288
  configuration.add_storage_adapter(GoodForNothingStorage)
289
289
  configuration.add_storage_adapter(Bumbleworks::HashStorage)
290
- configuration.storage_adapters.should =~ [
290
+ expect(configuration.storage_adapters).to match_array([
291
291
  GoodForNothingStorage, Bumbleworks::HashStorage
292
- ]
292
+ ])
293
293
  end
294
294
 
295
295
  it 'raises ArgumentError if object is not a storage adapter' do
@@ -307,41 +307,41 @@ describe Bumbleworks::Configuration do
307
307
  end
308
308
 
309
309
  it 'resets #definitions_directory' do
310
- File.stub(:directory? => true)
310
+ allow(File).to receive_messages(:directory? => true)
311
311
  configuration.definitions_directory = '/One/Two'
312
- configuration.definitions_directory.should == '/One/Two'
312
+ expect(configuration.definitions_directory).to eq('/One/Two')
313
313
  configuration.clear!
314
314
 
315
315
  configuration.root = '/Root'
316
- configuration.definitions_directory.should == '/Root/process_definitions'
316
+ expect(configuration.definitions_directory).to eq('/Root/process_definitions')
317
317
  end
318
318
  end
319
319
 
320
320
  describe '#error_handlers', dev:true do
321
321
  let(:super_handler) {double('error_handler')}
322
322
  it 'sets default error handler' do
323
- configuration.error_handlers.should == [Bumbleworks::ErrorLogger]
323
+ expect(configuration.error_handlers).to eq([Bumbleworks::ErrorLogger])
324
324
  end
325
325
 
326
326
  it 'replaces default handler' do
327
327
  configuration.error_handlers = [super_handler]
328
- configuration.error_handlers.should == [super_handler]
328
+ expect(configuration.error_handlers).to eq([super_handler])
329
329
  end
330
330
 
331
331
  it 'adds to default handler' do
332
332
  configuration.error_handlers << super_handler
333
- configuration.error_handlers.should =~ [Bumbleworks::ErrorLogger, super_handler]
333
+ expect(configuration.error_handlers).to match_array([Bumbleworks::ErrorLogger, super_handler])
334
334
  end
335
335
  end
336
336
 
337
337
  describe '#store_history' do
338
338
  it 'defaults to true' do
339
- subject.store_history.should be_true
339
+ expect(subject.store_history).to be_truthy
340
340
  end
341
341
 
342
342
  it 'can be overridden' do
343
343
  subject.store_history = false
344
- subject.store_history.should be_false
344
+ expect(subject.store_history).to be_falsy
345
345
  end
346
346
  end
347
347
  end
@@ -4,17 +4,17 @@ describe Bumbleworks::Entity do
4
4
  describe '#identifier' do
5
5
  it 'returns id by default' do
6
6
  entity = entity_class.new
7
- entity.stub(:id => 'berf')
8
- entity.identifier.should == 'berf'
7
+ allow(entity).to receive_messages(:id => 'berf')
8
+ expect(entity.identifier).to eq('berf')
9
9
  end
10
10
  end
11
11
 
12
12
  describe '#to_s' do
13
13
  it 'returns string with titleized class name and identifier' do
14
- entity_class.stub(:name => 'GiantAngryPlum')
14
+ allow(entity_class).to receive_messages(:name => 'GiantAngryPlum')
15
15
  entity = entity_class.new
16
- entity.stub(:identifier => 1490)
17
- entity.to_s.should == 'Giant Angry Plum 1490'
16
+ allow(entity).to receive_messages(:identifier => 1490)
17
+ expect(entity.to_s).to eq('Giant Angry Plum 1490')
18
18
  end
19
19
  end
20
20
 
@@ -28,15 +28,15 @@ describe Bumbleworks::Entity do
28
28
  entity = entity_class.new
29
29
  entity.foof_pid = '1234'
30
30
  entity.nook_pid = 'pickles'
31
- entity.processes_by_name.should == {
31
+ expect(entity.processes_by_name).to eq({
32
32
  :zoom => nil,
33
33
  :foof => Bumbleworks::Process.new('1234'),
34
34
  :nook => Bumbleworks::Process.new('pickles')
35
- }
35
+ })
36
36
  end
37
37
 
38
38
  it 'returns empty hash if no processes' do
39
- entity_class.new.processes_by_name.should == {}
39
+ expect(entity_class.new.processes_by_name).to eq({})
40
40
  end
41
41
  end
42
42
 
@@ -49,39 +49,39 @@ describe Bumbleworks::Entity do
49
49
  entity = entity_class.new
50
50
  entity.foof_pid = '1234'
51
51
  entity.nook_pid = 'pickles'
52
- entity.processes.should =~ [
52
+ expect(entity.processes).to match_array([
53
53
  Bumbleworks::Process.new('1234'),
54
54
  Bumbleworks::Process.new('pickles')
55
- ]
55
+ ])
56
56
  end
57
57
 
58
58
  it 'returns empty array if no processes' do
59
- entity_class.new.processes.should == []
59
+ expect(entity_class.new.processes).to eq([])
60
60
  end
61
61
  end
62
62
 
63
63
  describe '#cancel_all_processes!' do
64
64
  it 'cancels all processes with registered identifiers' do
65
65
  entity = entity_class.new
66
- entity.stub(:processes_by_name => {
66
+ allow(entity).to receive_messages(:processes_by_name => {
67
67
  :foof => bp1 = Bumbleworks::Process.new('1234'),
68
68
  :nook => bp2 = Bumbleworks::Process.new('pickles')
69
69
  })
70
- bp1.should_receive(:cancel!)
71
- bp2.should_receive(:cancel!)
72
- entity.stub(:attribute_for_process_name) { |name| :"#{name}_pid" }
73
- entity.should_receive(:update).with(:foof_pid => nil)
74
- entity.should_receive(:update).with(:nook_pid => nil)
70
+ expect(bp1).to receive(:cancel!)
71
+ expect(bp2).to receive(:cancel!)
72
+ allow(entity).to receive(:attribute_for_process_name) { |name| :"#{name}_pid" }
73
+ expect(entity).to receive(:update).with(:foof_pid => nil)
74
+ expect(entity).to receive(:update).with(:nook_pid => nil)
75
75
  entity.cancel_all_processes!
76
76
  end
77
77
 
78
78
  it 'does not clear identifiers if clear_identifiers option is false' do
79
79
  entity = entity_class.new
80
- entity.stub(:processes_by_name => {
80
+ allow(entity).to receive_messages(:processes_by_name => {
81
81
  :foof => bp = Bumbleworks::Process.new('1234')
82
82
  })
83
- bp.should_receive(:cancel!)
84
- entity.should_receive(:update).never
83
+ expect(bp).to receive(:cancel!)
84
+ expect(entity).to receive(:update).never
85
85
  entity.cancel_all_processes!(:clear_identifiers => false)
86
86
  end
87
87
  end
@@ -89,36 +89,34 @@ describe Bumbleworks::Entity do
89
89
  describe '#process_fields' do
90
90
  it 'returns hash with entity' do
91
91
  entity = entity_class.new
92
- entity.process_fields.should == { :entity => entity }
92
+ expect(entity.process_fields).to eq({ :entity => entity })
93
93
  end
94
94
 
95
95
  it 'accepts but ignores process name argument' do
96
96
  entity = entity_class.new
97
- entity.process_fields('ignore_me').should == { :entity => entity }
97
+ expect(entity.process_fields('ignore_me')).to eq({ :entity => entity })
98
98
  end
99
99
  end
100
100
 
101
101
  describe '#process_variables' do
102
102
  it 'returns empty hash' do
103
- entity_class.new.process_variables.should == {}
103
+ expect(entity_class.new.process_variables).to eq({})
104
104
  end
105
105
 
106
106
  it 'accepts but ignores process name argument' do
107
- entity_class.new.process_variables('ignore me').should == {}
107
+ expect(entity_class.new.process_variables('ignore me')).to eq({})
108
108
  end
109
109
  end
110
110
 
111
111
  describe '#persist_process_identifier' do
112
112
  it 'calls #update if method exists' do
113
113
  entity = entity_class.new
114
- entity.should_receive(:update).with(:a_attribute => :a_value)
114
+ expect(entity).to receive(:update).with(:a_attribute => :a_value)
115
115
  entity.persist_process_identifier(:a_attribute, :a_value)
116
116
  end
117
117
 
118
118
  it 'raises exception if #update method does not exist' do
119
119
  entity = entity_class.new
120
- entity.stub(:respond_to?).with(:update).and_return(false)
121
- entity.should_receive(:update).never
122
120
  expect {
123
121
  entity.persist_process_identifier(:a_attribute, :a_value)
124
122
  }.to raise_error("Entity must define #persist_process_identifier method if missing #update method.")
@@ -130,39 +128,39 @@ describe Bumbleworks::Entity do
130
128
  bp = Bumbleworks::Process.new('12345')
131
129
  entity_class.process :noodles, :attribute => :noodles_pid
132
130
  entity = entity_class.new
133
- entity.stub(:noodles_pid)
134
- entity.stub(:process_fields).with(:noodles).and_return({:f => 1})
135
- entity.stub(:process_variables).with(:noodles).and_return({:v => 2})
136
- Bumbleworks.stub(:launch!).with('noodles', {:f => 1}, {:v => 2}).and_return(bp)
137
- entity.should_receive(:persist_process_identifier).with(:noodles_pid, '12345')
138
- entity.launch_process('noodles').should == bp
131
+ allow(entity).to receive(:noodles_pid)
132
+ allow(entity).to receive(:process_fields).with(:noodles).and_return({:f => 1})
133
+ allow(entity).to receive(:process_variables).with(:noodles).and_return({:v => 2})
134
+ allow(Bumbleworks).to receive(:launch!).with('noodles', {:f => 1}, {:v => 2}).and_return(bp)
135
+ expect(entity).to receive(:persist_process_identifier).with(:noodles_pid, '12345')
136
+ expect(entity.launch_process('noodles')).to eq(bp)
139
137
  end
140
138
 
141
139
  it 'does nothing but returns existing process if identifier attribute already set' do
142
140
  bp = Bumbleworks::Process.new('already set')
143
141
  entity_class.process :noodles, :attribute => :noodles_pid
144
142
  entity = entity_class.new
145
- entity.stub(:noodles_pid => 'already set')
146
- Bumbleworks.should_receive(:launch!).never
147
- entity.launch_process('noodles').should == bp
143
+ allow(entity).to receive_messages(:noodles_pid => 'already set')
144
+ expect(Bumbleworks).to receive(:launch!).never
145
+ expect(entity.launch_process('noodles')).to eq(bp)
148
146
  end
149
147
 
150
148
  it 'launches new process anyway if identifier attribute already set but force is true' do
151
149
  bp = Bumbleworks::Process.new('12345')
152
150
  entity_class.process :noodles, :attribute => :noodles_pid
153
151
  entity = entity_class.new
154
- entity.stub(:noodles_pid => 'already set')
155
- Bumbleworks.stub(:launch! => bp)
156
- entity.should_receive(:persist_process_identifier).with(:noodles_pid, '12345')
157
- entity.launch_process('noodles', :force => true).should == bp
152
+ allow(entity).to receive_messages(:noodles_pid => 'already set')
153
+ allow(Bumbleworks).to receive_messages(:launch! => bp)
154
+ expect(entity).to receive(:persist_process_identifier).with(:noodles_pid, '12345')
155
+ expect(entity.launch_process('noodles', :force => true)).to eq(bp)
158
156
  end
159
157
 
160
158
  it 'sends additional fields and variables to launch' do
161
159
  entity_class.process :noodles, :attribute => :noodles_pid
162
160
  entity = entity_class.new
163
- entity.stub(:noodles_pid)
164
- entity.stub(:persist_process_identifier)
165
- Bumbleworks.should_receive(:launch!).with(
161
+ allow(entity).to receive(:noodles_pid)
162
+ allow(entity).to receive(:persist_process_identifier)
163
+ expect(Bumbleworks).to receive(:launch!).with(
166
164
  'noodles',
167
165
  { :entity => entity, :drink => 'apathy smoothie', :berry => 'black' },
168
166
  { :so_you_said => :well_so_did_i }
@@ -176,17 +174,17 @@ describe Bumbleworks::Entity do
176
174
 
177
175
  describe '#attribute_for_process_name' do
178
176
  it 'returns attribute set for given process' do
179
- entity_class.stub(:processes).and_return({
177
+ allow(entity_class).to receive(:processes).and_return({
180
178
  :goose => { :attribute => :goose_pid },
181
179
  :the_punisher => { :attribute => :your_skin }
182
180
  })
183
181
  entity = entity_class.new
184
- entity.attribute_for_process_name(:goose).should == :goose_pid
185
- entity.attribute_for_process_name(:the_punisher).should == :your_skin
182
+ expect(entity.attribute_for_process_name(:goose)).to eq(:goose_pid)
183
+ expect(entity.attribute_for_process_name(:the_punisher)).to eq(:your_skin)
186
184
  end
187
185
 
188
186
  it 'raises exception if no process found for given name' do
189
- entity_class.stub(:processes).and_return({
187
+ allow(entity_class).to receive(:processes).and_return({
190
188
  :goose => { :attribute => :goose_pid },
191
189
  })
192
190
  entity = entity_class.new
@@ -201,11 +199,11 @@ describe Bumbleworks::Entity do
201
199
  bp1 = double('bp1', :subscribed_events => ['chewing', 'popping', 'yakking'])
202
200
  bp2 = double('bp2', :subscribed_events => ['moon', 'yakking'])
203
201
  entity = entity_class.new
204
- entity.stub(:processes).and_return({
202
+ allow(entity).to receive(:processes).and_return({
205
203
  :zip => bp1,
206
204
  :yip => bp2
207
205
  })
208
- entity.subscribed_events.should =~ ['chewing', 'moon', 'popping', 'yakking']
206
+ expect(entity.subscribed_events).to match_array(['chewing', 'moon', 'popping', 'yakking'])
209
207
  end
210
208
  end
211
209
 
@@ -214,42 +212,42 @@ describe Bumbleworks::Entity do
214
212
  bp1 = double('bp1', :subscribed_events => ['chewing', 'popping', 'yakking'])
215
213
  bp2 = double('bp2', :subscribed_events => ['moon', 'yakking'])
216
214
  entity = entity_class.new
217
- entity.stub(:processes).and_return({
215
+ allow(entity).to receive(:processes).and_return({
218
216
  :zip => bp1,
219
217
  :yip => bp2
220
218
  })
221
- entity.is_waiting_for?('chewing').should be_true
222
- entity.is_waiting_for?('yakking').should be_true
223
- entity.is_waiting_for?(:moon).should be_true
224
- entity.is_waiting_for?('fruiting').should be_false
219
+ expect(entity.is_waiting_for?('chewing')).to be_truthy
220
+ expect(entity.is_waiting_for?('yakking')).to be_truthy
221
+ expect(entity.is_waiting_for?(:moon)).to be_truthy
222
+ expect(entity.is_waiting_for?('fruiting')).to be_falsy
225
223
  end
226
224
  end
227
225
 
228
226
  describe '#tasks' do
229
227
  it 'returns task query for all entity tasks by default' do
230
228
  entity = entity_class.new
231
- Bumbleworks::Task.stub(:for_entity).with(entity).and_return(:full_task_query)
232
- entity.tasks.should == :full_task_query
229
+ allow(Bumbleworks::Task).to receive(:for_entity).with(entity).and_return(:full_task_query)
230
+ expect(entity.tasks).to eq(:full_task_query)
233
231
  end
234
232
 
235
233
  it 'filters task query by nickname if provided' do
236
234
  entity = entity_class.new
237
235
  task_finder = double('task_finder')
238
- task_finder.stub(:by_nickname).with(:smooface).and_return(:partial_task_query)
239
- Bumbleworks::Task.stub(:for_entity).with(entity).and_return(task_finder)
240
- entity.tasks(:smooface).should == :partial_task_query
236
+ allow(task_finder).to receive(:by_nickname).with(:smooface).and_return(:partial_task_query)
237
+ allow(Bumbleworks::Task).to receive(:for_entity).with(entity).and_return(task_finder)
238
+ expect(entity.tasks(:smooface)).to eq(:partial_task_query)
241
239
  end
242
240
  end
243
241
 
244
242
  describe '.process' do
245
243
  it 'registers a new process' do
246
- entity_class.stub(:default_process_identifier_attribute).with(:whatever).and_return('loob')
244
+ allow(entity_class).to receive(:default_process_identifier_attribute).with(:whatever).and_return('loob')
247
245
  entity_class.process :whatever
248
- entity_class.processes.should == {
246
+ expect(entity_class.processes).to eq({
249
247
  :whatever => {
250
248
  :attribute => 'loob'
251
249
  }
252
- }
250
+ })
253
251
  end
254
252
  end
255
253
 
@@ -261,23 +259,23 @@ describe Bumbleworks::Entity do
261
259
 
262
260
  describe '.default_process_identifier_attribute' do
263
261
  it 'adds _process_identifier to end of given process name' do
264
- entity_class.default_process_identifier_attribute('zoof').should == :zoof_process_identifier
262
+ expect(entity_class.default_process_identifier_attribute('zoof')).to eq(:zoof_process_identifier)
265
263
  end
266
264
 
267
265
  it 'ensures no duplication of _process' do
268
- entity_class.default_process_identifier_attribute('zoof_process').should == :zoof_process_identifier
266
+ expect(entity_class.default_process_identifier_attribute('zoof_process')).to eq(:zoof_process_identifier)
269
267
  end
270
268
 
271
269
  it 'removes entity_type from beginning of identifier' do
272
- entity_class.stub(:entity_type).and_return('zoof')
273
- entity_class.default_process_identifier_attribute('zoof_process').should == :process_identifier
270
+ allow(entity_class).to receive(:entity_type).and_return('zoof')
271
+ expect(entity_class.default_process_identifier_attribute('zoof_process')).to eq(:process_identifier)
274
272
  end
275
273
  end
276
274
 
277
275
  describe '.entity_type' do
278
276
  it 'returns underscored version of class name' do
279
- entity_class.stub(:name).and_return('MyClass')
280
- entity_class.entity_type.should == 'my_class'
277
+ allow(entity_class).to receive(:name).and_return('MyClass')
278
+ expect(entity_class.entity_type).to eq('my_class')
281
279
  end
282
280
  end
283
281
  end