bumbleworks 0.0.74 → 0.0.76

Sign up to get free protection for your applications and to get access to all the features.
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