dynflow 0.8.5 → 0.8.6

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.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ODU2NmY4ZjI5Nzg1OGYzM2MwOGU5ZGUzZjIzOWE2ZGI3ODUwMTQ3NQ==
4
+ YWQyYzY3YTljZmEwZmFjODNjYTQ2ZDcxODhjOTIyNjIzMjU3MWQxOQ==
5
5
  data.tar.gz: !binary |-
6
- NmMxZDNmOTIzZGJlMzIwZDE5YjZkMWIwNjQ3MTJmYzhjZTVkZTI1NA==
6
+ NmU1MDM2NWM3YTk2NmE2NGExZWRhNzUxNzg3YmNmZTg5M2EzOTQ5Mg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NWM4ZDAyMmM5M2U2MjNjZmI4MzkyZGQxMDM4Nzc2YmE3NWU3Njc0OGY4NGMw
10
- MDQ5YzMzZjFjODljNjRjYmMyM2E2ZTljYTM5NjY3YmRlMjA2MTkzNzBjZDE0
11
- YTk1MTQ1ZDczNTcxYmZlYzAyOTNkYTBmNmE2NjJlYTU3NjAzOWI=
9
+ Nzk0NjlhYTAwNzQ4NzU0NDIwNzFiYWQ2NjliZGQxYzJiODAxZTMwOWM4ZDI0
10
+ MWNhYTI2NzA2YWE4YTVjZWYwYTY0YmNmZmU2M2I1NWEzYjQ5MTM0ODliYTYw
11
+ ZWQ4MmY1ZGE0MTgzYzM3ZWRhZjhjMjRlYWVhNTM1MmZiNWNjYWI=
12
12
  data.tar.gz: !binary |-
13
- OWI4OWIyOWYzNjg4YjU3YmE0OTFiMjYxNzk5ZjE4NDdhYzU0NWUxZDYyNjgy
14
- ODAzYzQ3ZTJhZWNmNDE1ZDc3NmY3NWMwMDQzMDlmOTRlM2ZmYTQwMzYxOGY2
15
- N2E4ZmVlMzBhMDU2MTNhOTUxMDAwNjlkYTgzNzg2YjcwY2ZlNGY=
13
+ MmViMjEzZDliZjg2ZThkNDgzMjQ1ZWU5MTNlN2ZlM2JkYjMwYzBmMGE1MDhj
14
+ Yjc3ZWU0ZmYxOGU3ZTA2MzgxMTAxZjdjMmE3YjVlZGUxYmQxNGUyYWZmOGZj
15
+ ODM0Yjg3ODQ0MTVmMGM4NTNlZGE5ZWJlY2Q3ZGVjMjc2ZDhjMTc=
@@ -37,6 +37,7 @@ module Dynflow
37
37
 
38
38
  def delay(delay_options, args)
39
39
  @action.execute_delay(delay_options, *args)
40
+ persistence.save_action(execution_plan_id, @action)
40
41
  @action.serializer
41
42
  ensure
42
43
  save
@@ -93,7 +93,7 @@ module Dynflow
93
93
 
94
94
  def find_past_delayed_plans(time)
95
95
  table(:delayed)
96
- .where('start_at <= ?', time)
96
+ .where('start_at <= ? OR (start_before IS NOT NULL AND start_before <= ?)', time, time)
97
97
  .order_by(:start_at)
98
98
  .all
99
99
  .map { |plan| load_data(plan) }
@@ -20,19 +20,19 @@ module Dynflow
20
20
  end
21
21
 
22
22
  def perform_serialization!
23
- @serialized_args = serialize
23
+ @serialized_args = args.map { |arg| serialize arg }
24
24
  end
25
25
 
26
26
  def perform_deserialization!
27
27
  raise "@serialized_args not set" if @serialized_args.nil?
28
- @args = deserialize
28
+ @args = serialized_args.map { |arg| deserialize arg }
29
29
  end
30
30
 
31
- def serialize
31
+ def serialize(arg)
32
32
  raise NotImplementedError
33
33
  end
34
34
 
35
- def deserialize
35
+ def deserialize(arg)
36
36
  raise NotImplementedError
37
37
  end
38
38
 
@@ -2,12 +2,12 @@ module Dynflow
2
2
  module Serializers
3
3
  class Noop < Abstract
4
4
 
5
- def serialize
6
- args
5
+ def serialize(arg)
6
+ arg
7
7
  end
8
8
 
9
- def deserialize
10
- serialized_args
9
+ def deserialize(arg)
10
+ arg
11
11
  end
12
12
 
13
13
  end
@@ -1,3 +1,3 @@
1
1
  module Dynflow
2
- VERSION = '0.8.5'
2
+ VERSION = '0.8.6'
3
3
  end
@@ -110,6 +110,21 @@ module Dynflow
110
110
  run
111
111
  output#message:finished]
112
112
  end
113
+
114
+ it "allows modification of the running action when delaying execution" do
115
+ world = WorldFactory.create_world
116
+ world.middleware.use(Support::MiddlewareExample::AnotherObservingMiddleware,
117
+ replace: Support::MiddlewareExample::LogRunMiddleware)
118
+ delay = world.delay(Support::MiddlewareExample::Action, { :start_at => Time.now - 60 })
119
+ plan = world.persistence.load_delayed_plan delay.execution_plan_id
120
+ plan.plan
121
+ plan.execute.wait
122
+ log.must_equal ["delay#set-input:#{world.id}",
123
+ "plan#input:#{world.id}",
124
+ "input#message:#{world.id}",
125
+ 'run',
126
+ 'output#message:finished']
127
+ end
113
128
  end
114
129
  end
115
130
  end
@@ -8,7 +8,8 @@ module Dynflow
8
8
  let :execution_plans_data do
9
9
  [{ id: 'plan1', state: 'paused' },
10
10
  { id: 'plan2', state: 'stopped' },
11
- { id: 'plan3', state: 'paused' }]
11
+ { id: 'plan3', state: 'paused' },
12
+ { id: 'plan4', state: 'paused' }]
12
13
  end
13
14
 
14
15
  let :action_data do
@@ -132,7 +133,7 @@ module Dynflow
132
133
  adapter.load_step('plan2', step_data[:id])
133
134
 
134
135
  prepare_plans_with_steps
135
- adapter.delete_execution_plans('state' => 'paused').must_equal 2
136
+ adapter.delete_execution_plans('state' => 'paused').must_equal 3
136
137
  -> { adapter.load_execution_plan('plan1') }.must_raise KeyError
137
138
  adapter.load_execution_plan('plan2') # nothing raised
138
139
  -> { adapter.load_execution_plan('plan3') }.must_raise KeyError
@@ -167,6 +168,21 @@ module Dynflow
167
168
  loaded_step.must_equal(Utils.stringify_keys(step_data))
168
169
  end
169
170
  end
171
+
172
+ describe '#find_past_delayed_plans' do
173
+ it 'finds plans with start_before in past' do
174
+ start_time = Time.now
175
+ prepare_plans
176
+ fmt =->(time) { time.strftime('%Y-%m-%d %H:%M:%S') }
177
+ adapter.save_delayed_plan('plan1', :execution_plan_uuid => 'plan1', :start_at => fmt.call(start_time + 60), :start_before => fmt.call(start_time - 60))
178
+ adapter.save_delayed_plan('plan2', :execution_plan_uuid => 'plan2', :start_at => fmt.call(start_time - 60))
179
+ adapter.save_delayed_plan('plan3', :execution_plan_uuid => 'plan3', :start_at => fmt.call(start_time + 60))
180
+ adapter.save_delayed_plan('plan4', :execution_plan_uuid => 'plan4', :start_at => fmt.call(start_time - 60), :start_before => fmt.call(start_time - 60))
181
+ plans = adapter.find_past_delayed_plans(start_time)
182
+ plans.length.must_equal 3
183
+ plans.map { |plan| plan[:execution_plan_uuid] }.must_equal %w(plan2 plan4 plan1)
184
+ end
185
+ end
170
186
  end
171
187
 
172
188
  describe Dynflow::PersistenceAdapters::Sequel do
@@ -6,16 +6,10 @@ module Support
6
6
  def run; end
7
7
  end
8
8
 
9
- class MySerializer < Dynflow::Serializers::Abstract
10
- def serialize
11
- if args.first == :fail
12
- raise 'Enforced serializer failure'
13
- end
14
- args
15
- end
16
-
17
- def deserialize
18
- serialized_args
9
+ class MySerializer < Dynflow::Serializers::Noop
10
+ def serialize(arg)
11
+ raise 'Enforced serializer failure' if arg == :fail
12
+ super arg
19
13
  end
20
14
  end
21
15
 
@@ -111,6 +111,22 @@ module Support
111
111
  end
112
112
  end
113
113
 
114
+ class AnotherObservingMiddleware < ObservingMiddleware
115
+
116
+ def delay(*args)
117
+ pass(*args).tap do
118
+ log("delay#set-input:#{action.world.id}")
119
+ action.input[:message] = action.world.id
120
+ end
121
+ end
122
+
123
+ def plan(*args)
124
+ log("plan#input:#{action.input[:message]}")
125
+ pass(*args)
126
+ end
127
+
128
+ end
129
+
114
130
  class Action < Dynflow::Action
115
131
  middleware.use LogRunMiddleware
116
132
 
@@ -1,11 +1,9 @@
1
1
  require 'bundler/setup'
2
+ require 'minitest/reporters'
2
3
  require 'minitest/autorun'
3
4
  require 'minitest/spec'
4
5
 
5
- if ENV['RM_INFO']
6
- require 'minitest/reporters'
7
- MiniTest::Reporters.use!
8
- end
6
+ MiniTest::Reporters.use! if ENV['RM_INFO']
9
7
 
10
8
  load_path = File.expand_path(File.dirname(__FILE__))
11
9
  $LOAD_PATH << load_path unless $LOAD_PATH.include? load_path
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dynflow
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.5
4
+ version: 0.8.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Necas
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-08-14 00:00:00.000000000 Z
12
+ date: 2015-09-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: multi_json