seam 0.0.16 → 0.0.17

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