seam 0.0.16 → 0.0.17

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.
@@ -4,18 +4,12 @@ module Seam
4
4
  effort = Seam::InMemory.records.select { |x| x.id == effort_id }.first
5
5
  return nil unless effort
6
6
  effort.clone
7
- #document = Seam::MongoDb.collection.find( { id: effort_id } ).first
8
- #return nil unless document
9
- #Seam::Effort.parse document
10
7
  end
11
8
 
12
9
  def self.find_all_pending_executions_by_step step
13
10
  Seam::InMemory.records
14
11
  .select { |x| x.next_step == step && x.next_execute_at <= Time.now }
15
12
  .map { |x| x.clone }
16
- #Seam::MongoDb.collection
17
- #.find( { next_step: step, next_execute_at: { '$lte' => Time.now } } )
18
- #.map { |x| Seam::Effort.parse x }
19
13
  end
20
14
 
21
15
  def self.save effort
@@ -24,13 +18,10 @@ module Seam
24
18
  Seam::InMemory.records = Seam::InMemory.records.select { |x| x.id != effort.id }.to_a
25
19
  end
26
20
  create effort
27
- #Seam::MongoDb.collection.find( { id: effort.id } )
28
- # .update("$set" => effort.to_hash)
29
21
  end
30
22
 
31
23
  def self.create effort
32
24
  Seam::InMemory.records = [Seam::InMemory.records, effort].flatten
33
- #Seam::MongoDb.collection.insert(effort.to_hash)
34
25
  end
35
26
 
36
27
  def self.all
data/lib/seam/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Seam
2
- VERSION = "0.0.16"
2
+ VERSION = "0.0.17"
3
3
  end
@@ -13,13 +13,18 @@ module Seam
13
13
  private
14
14
 
15
15
  def the_time_to_move_on
16
- Time.now + the_amount_of_time_to_wait
16
+ time_of_last_execution + the_amount_of_time_to_wait
17
17
  end
18
18
 
19
19
  def the_amount_of_time_to_wait
20
20
  current_step[:arguments][0]
21
21
  end
22
22
 
23
+ def time_of_last_execution
24
+ return effort.created_at if effort.history.count == 0
25
+ effort.history.last[:stopped_at]
26
+ end
27
+
23
28
  end
24
29
 
25
30
  end
@@ -15,16 +15,16 @@ describe Seam::WaitWorker do
15
15
  Seam::WaitWorker.new.step.must_equal 'wait'
16
16
  end
17
17
 
18
- describe "using it in a flow" do
18
+ let(:today) do
19
+ Time.parse '1/1/2011'
20
+ end
19
21
 
20
- let(:effort_id) do
21
- effort = flow.start
22
- effort.id
23
- end
22
+ let(:effort_id) do
23
+ effort = flow.start
24
+ effort.id
25
+ end
24
26
 
25
- let(:today) do
26
- Time.parse '1/1/2011'
27
- end
27
+ describe "using it in a flow" do
28
28
 
29
29
  [:length_of_time].to_objects { [
30
30
  [3.days],
@@ -59,6 +59,120 @@ describe Seam::WaitWorker do
59
59
  end
60
60
 
61
61
  end
62
+
63
+ describe "time has passed since the flow was started and the wait worker was called" do
64
+
65
+ let(:today) { Time.parse('1/1/2011') }
66
+ let(:time_to_wait) { 3.days }
67
+ let(:time_before_wait_worker_was_called) { 1.day }
68
+ let(:expected_start) { today + time_to_wait }
69
+
70
+ let(:flow) do
71
+ f = Seam::Flow.new
72
+ f.wait time_to_wait
73
+ f.do_something
74
+ f
75
+ end
76
+
77
+ before do
78
+ Timecop.freeze today
79
+ effort_id
80
+
81
+ Timecop.freeze today + time_before_wait_worker_was_called
82
+ end
83
+
84
+ it "should move to the next step" do
85
+ Seam::WaitWorker.new.execute_all
86
+ Seam::Effort.find(effort_id).next_step.must_equal "do_something"
87
+ end
88
+
89
+ it "should set the next execute date" do
90
+ Seam::WaitWorker.new.execute_all
91
+ Seam::Effort.find(effort_id).next_execute_at.must_equal expected_start
92
+ end
93
+
94
+ end
95
+
96
+ describe "time has passed since the last step was started and the wait worker was called" do
97
+
98
+ let(:today) { Time.parse('1/1/2011') }
99
+ let(:time_to_wait) { 8.days }
100
+ let(:time_it_took_for_previous_step) { 1.days }
101
+ let(:time_before_wait_worker_was_called) { 3.day }
102
+ let(:expected_start) { today + time_to_wait + time_it_took_for_previous_step }
103
+
104
+ let(:flow) do
105
+ f = Seam::Flow.new
106
+ f.do_something
107
+ f.wait time_to_wait
108
+ f.do_something
109
+ f
110
+ end
111
+
112
+ before do
113
+ Timecop.freeze today
114
+ effort_id
115
+
116
+ Timecop.freeze Time.now + time_it_took_for_previous_step
117
+ DoSomething.new.execute_all
118
+ Timecop.freeze Time.now + time_before_wait_worker_was_called
119
+ end
120
+
121
+ it "should move to the next step" do
122
+ Seam::WaitWorker.new.execute_all
123
+ Seam::Effort.find(effort_id).next_step.must_equal "do_something"
124
+ end
125
+
126
+ it "should set the next execute date" do
127
+ Seam::WaitWorker.new.execute_all
128
+ Seam::Effort.find(effort_id).next_execute_at.must_equal expected_start
129
+ end
130
+
131
+ end
132
+ j
133
+ describe "a more complex example of waiting" do
134
+
135
+ let(:today) { Time.parse('1/1/2011') }
136
+ let(:time_to_wait) { 8.days }
137
+ let(:time_it_took_for_first_step) { 1.days }
138
+ let(:time_it_took_for_second_step) { 4.days }
139
+ let(:time_before_wait_worker_was_called) { 3.day }
140
+ let(:expected_start) { today +
141
+ time_to_wait +
142
+ time_it_took_for_first_step +
143
+ time_it_took_for_second_step }
144
+
145
+ let(:flow) do
146
+ f = Seam::Flow.new
147
+ f.do_something
148
+ f.do_something
149
+ f.wait time_to_wait
150
+ f.do_something
151
+ f
152
+ end
153
+
154
+ before do
155
+ Timecop.freeze today
156
+ effort_id
157
+
158
+ Timecop.freeze Time.now + time_it_took_for_first_step
159
+ DoSomething.new.execute_all
160
+ Timecop.freeze Time.now + time_it_took_for_second_step
161
+ DoSomething.new.execute_all
162
+ Timecop.freeze Time.now + time_before_wait_worker_was_called
163
+ end
164
+
165
+ it "should move to the next step" do
166
+ Seam::WaitWorker.new.execute_all
167
+ Seam::Effort.find(effort_id).next_step.must_equal "do_something"
168
+ end
169
+
170
+ it "should set the next execute date" do
171
+ Seam::WaitWorker.new.execute_all
172
+ Seam::Effort.find(effort_id).next_execute_at.must_equal expected_start
173
+ end
174
+
175
+ end
62
176
 
63
177
  end
64
178
 
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.16
4
+ version: 0.0.17
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -230,7 +230,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
230
230
  version: '0'
231
231
  segments:
232
232
  - 0
233
- hash: -4363898252696775104
233
+ hash: -3036186920062924532
234
234
  required_rubygems_version: !ruby/object:Gem::Requirement
235
235
  none: false
236
236
  requirements:
@@ -239,10 +239,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
239
239
  version: '0'
240
240
  segments:
241
241
  - 0
242
- hash: -4363898252696775104
242
+ hash: -3036186920062924532
243
243
  requirements: []
244
244
  rubyforge_project:
245
- rubygems_version: 1.8.25
245
+ rubygems_version: 1.8.24
246
246
  signing_key:
247
247
  specification_version: 3
248
248
  summary: Simple workflows