seam 0.0.7 → 0.0.8

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/seam/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Seam
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.8"
3
3
  end
data/lib/seam/worker.rb CHANGED
@@ -1,9 +1,61 @@
1
1
  module Seam
2
2
  class Worker
3
- def handles(step)
3
+ def handles step
4
4
  @step = step
5
5
  end
6
6
 
7
+ def execute effort
8
+ set_current_effort effort
9
+ before_process
10
+ process
11
+ after_process
12
+ end
13
+
14
+ def execute_all
15
+ efforts_to_execute.each { |e| execute e }
16
+ end
17
+
18
+ def eject
19
+ @operation_to_execute = :eject
20
+ end
21
+
22
+ def move_to_next_step
23
+ @operation_to_execute = :move_to_next_step
24
+ end
25
+
26
+ def try_again_in seconds
27
+ @operation_to_execute = :try_again_in
28
+ operation_args[:seconds] = seconds
29
+ end
30
+
31
+ attr_accessor :operation_args
32
+ def operation_args
33
+ @operation_args ||= {}
34
+ end
35
+
36
+ def operations
37
+ {
38
+ try_again_in: -> do
39
+ seconds = operation_args[:seconds]
40
+ try_again_on = Time.now + seconds
41
+
42
+ history[:try_again_on] = try_again_on
43
+
44
+ effort.next_execute_at = try_again_on
45
+ end,
46
+ move_to_next_step: -> do
47
+ effort.completed_steps << effort.next_step
48
+
49
+ steps = effort.flow['steps'].map { |x| x['name'] }
50
+ next_step = steps[effort.completed_steps.count]
51
+
52
+ effort.next_step = next_step
53
+ mark_effort_as_complete if next_step.nil?
54
+ end,
55
+ eject: -> { mark_effort_as_complete }
56
+ }
57
+ end
58
+
7
59
  def effort
8
60
  @current_effort
9
61
  end
@@ -12,53 +64,56 @@ module Seam
12
64
  @current_run
13
65
  end
14
66
 
15
- def execute effort
16
- @current_run = HashWithIndifferentAccess.new( {
17
- started_at: Time.now,
18
- step: @step.to_s,
19
- data_before: effort.data.clone,
20
- } )
67
+ private
68
+
69
+ def mark_effort_as_complete
70
+ effort.next_step = nil
71
+ effort.complete = true
72
+ effort.completed_at = Time.now
73
+ end
74
+
75
+ def set_current_effort effort
21
76
  @current_effort = effort
22
- process
23
- history[:data_after] = effort.data.clone
24
- history[:stopped_at] = Time.now
25
- effort.history << history
26
- effort.save
27
77
  end
28
78
 
29
- def execute_all
30
- Seam::Effort.find_all_by_step(@step.to_s).each do |effort|
31
- execute effort
32
- end
79
+ def before_process
80
+ run = {
81
+ started_at: Time.now,
82
+ step: step,
83
+ data_before: effort.data.clone
84
+ }
85
+ @current_run = HashWithIndifferentAccess.new run
33
86
  end
34
87
 
35
- def eject
36
- history[:result] = "eject"
37
- effort.complete = true
38
- effort.completed_at = Time.now
39
- effort.next_step = nil
40
- effort.save
88
+ def after_process
89
+ execute_the_appropriate_operation
90
+ stamp_the_new_history_record
91
+ save_the_effort
41
92
  end
42
93
 
43
- def move_to_next_step
44
- history[:result] = "move_to_next_step"
45
- effort.completed_steps << effort.next_step
94
+ def efforts_to_execute
95
+ Seam::Effort.find_all_by_step step
96
+ end
46
97
 
47
- steps = effort.flow['steps'].map { |x| x['name'] }
98
+ def step
99
+ s = @step || self.class.name.underscore.gsub('_worker', '')
100
+ s.to_s
101
+ end
48
102
 
49
- next_step = steps[effort.completed_steps.count]
50
- effort.next_step = next_step
51
- effort.complete = next_step.nil?
52
- effort.save
103
+ def execute_the_appropriate_operation
104
+ @operation_to_execute ||= :move_to_next_step
105
+ operations[@operation_to_execute].call
53
106
  end
54
107
 
55
- def try_again_in seconds
56
- try_again_on = Time.now + seconds
108
+ def stamp_the_new_history_record
109
+ history[:result] = @operation_to_execute
110
+ history[:data_after] = effort.data.clone
111
+ history[:stopped_at] = Time.now
57
112
 
58
- history[:result] = "try_again_in"
59
- history[:try_again_on] = try_again_on
113
+ effort.history << history
114
+ end
60
115
 
61
- effort.next_execute_at = try_again_on
116
+ def save_the_effort
62
117
  effort.save
63
118
  end
64
119
  end
@@ -34,6 +34,29 @@ describe "worker" do
34
34
  end
35
35
  end
36
36
 
37
+ describe "move_to_next_step as a default" do
38
+ it "should go to move_to_next_step by default" do
39
+ flow = Seam::Flow.new
40
+ flow.apple
41
+ flow.orange
42
+
43
+ effort = flow.start( { first_name: 'John' } )
44
+ effort = Seam::Effort.find(effort.id)
45
+
46
+ effort.next_step.must_equal "apple"
47
+
48
+ apple_worker = Seam::Worker.new
49
+ apple_worker.handles(:apple)
50
+ def apple_worker.process
51
+ end
52
+
53
+ apple_worker.execute effort
54
+
55
+ effort = Seam::Effort.find(effort.id)
56
+ effort.next_step.must_equal "orange"
57
+ end
58
+ end
59
+
37
60
  describe "try_again_in" do
38
61
 
39
62
  let(:effort) do
@@ -271,7 +294,7 @@ describe "worker" do
271
294
  effort.data['hit 3'].must_equal 1
272
295
 
273
296
  effort.complete?.must_equal true
274
- #effort.completed_at.must_equal Time.now
297
+ effort.completed_at.must_equal Time.now
275
298
 
276
299
  # FUTURE WAVES
277
300
  send_postcard_if_necessary_worker.execute_all
@@ -575,10 +598,43 @@ describe "worker" do
575
598
  fresh_effort = Seam::Effort.find(effort.id)
576
599
  fresh_effort.next_step.nil?.must_equal true
577
600
  end
601
+
602
+ it "should mark the completed_at date" do
603
+ fresh_effort = Seam::Effort.find(effort.id)
604
+ fresh_effort.completed_at.must_equal Time.now
605
+ end
578
606
 
579
607
  it "should mark the history" do
580
608
  effort.history[0].contrast_with!({"step"=>"apple", "result" => "eject" } )
581
609
  end
582
610
 
583
611
  end
612
+
613
+ describe "use the name of the worker to tie to a step" do
614
+
615
+ let(:effort) do
616
+ flow = Seam::Flow.new
617
+ flow.i_will_not_call_handles
618
+
619
+ e = flow.start
620
+ Seam::Effort.find(e.id)
621
+ end
622
+
623
+ before do
624
+ effort
625
+ worker = IWillNotCallHandlesWorker.new
626
+ IWillNotCallHandlesWorker.new.execute_all
627
+ end
628
+
629
+ it "should complete the effort" do
630
+ fresh_effort = Seam::Effort.find effort.id
631
+ fresh_effort.complete?.must_equal true
632
+ end
633
+
634
+ end
635
+ end
636
+
637
+ class IWillNotCallHandlesWorker < Seam::Worker
638
+ # no calling handles here
639
+ def process; end
584
640
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: seam
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-08-11 00:00:00.000000000 Z
12
+ date: 2013-08-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
@@ -227,7 +227,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
227
227
  version: '0'
228
228
  segments:
229
229
  - 0
230
- hash: -1708529221048095917
230
+ hash: -2272473425204476348
231
231
  required_rubygems_version: !ruby/object:Gem::Requirement
232
232
  none: false
233
233
  requirements:
@@ -236,7 +236,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
236
236
  version: '0'
237
237
  segments:
238
238
  - 0
239
- hash: -1708529221048095917
239
+ hash: -2272473425204476348
240
240
  requirements: []
241
241
  rubyforge_project:
242
242
  rubygems_version: 1.8.24