dynflow 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/test/test_helper.rb CHANGED
@@ -1,83 +1,4 @@
1
1
  require 'test/unit'
2
2
  require 'minitest/spec'
3
3
  require 'dynflow'
4
-
5
- BUS_IMPL = Dynflow::Bus::MemoryBus
6
-
7
- class TestBus < BUS_IMPL
8
-
9
- def initialize(expected_scenario)
10
- super()
11
- @expected_scenario = expected_scenario
12
- end
13
-
14
- def process(action_class, input, output = nil, stub = true)
15
- expected = @expected_scenario.shift
16
- if action_class == TestScenarioFinalizer || !stub || output
17
- return super(action_class, input, output)
18
- elsif action_class.name == expected[:action_class].name && input == expected[:input]
19
- return action_class.new(expected[:input], expected[:output])
20
- else
21
- raise "Unexpected input. Expected #{expected[:action_class]} #{expected[:input].inspect}, got #{action_class} #{input.inspect}"
22
- end
23
- end
24
-
25
- end
26
-
27
- class TestScenarioFinalizer < Dynflow::Action
28
-
29
- class << self
30
-
31
- def recorded_outputs
32
- @recorded_outputs
33
- end
34
-
35
- def init_recorded_outputs
36
- @recorded_outputs = []
37
- end
38
-
39
- def save_recorded_outputs(recorded_outputs)
40
- @recorded_outputs = recorded_outputs
41
- end
42
-
43
- end
44
-
45
- def finalize(outputs)
46
- self.class.save_recorded_outputs(outputs)
47
- end
48
-
49
- end
50
-
51
- class BusTestCase < Test::Unit::TestCase
52
-
53
- def setup
54
- @expected_scenario = []
55
- end
56
-
57
- def expect_input(action_class, input, output)
58
- @expected_scenario << {
59
- :action_class => action_class,
60
- :input => input,
61
- :output => output
62
- }
63
- end
64
-
65
- def assert_scenario
66
- Dynflow::Bus.impl = TestBus.new(@expected_scenario)
67
- event_outputs = nil
68
- TestScenarioFinalizer.init_recorded_outputs
69
- execution_plan = self.execution_plan
70
- execution_plan << [TestScenarioFinalizer, {}]
71
- Dynflow::Bus.trigger(execution_plan)
72
- return TestScenarioFinalizer.recorded_outputs
73
- end
74
- end
75
-
76
- class ParticipantTestCase < Test::Unit::TestCase
77
-
78
- def run_action(action_class, input)
79
- Dynflow::Bus.impl = Dynflow::Bus.new
80
- output = Dynflow::Bus.process(action_class, input)
81
- return output
82
- end
83
- end
4
+ require 'pry'
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.0.1
4
+ version: 0.1.0
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-04-24 00:00:00.000000000 Z
12
+ date: 2013-05-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -95,16 +95,15 @@ files:
95
95
  - lib/dynflow/action.rb
96
96
  - lib/dynflow/bus.rb
97
97
  - lib/dynflow/dispatcher.rb
98
+ - lib/dynflow/execution_plan.rb
98
99
  - lib/dynflow/logger.rb
99
- - lib/dynflow/message.rb
100
- - lib/dynflow/orch_request.rb
101
- - lib/dynflow/orch_response.rb
100
+ - lib/dynflow/step.rb
102
101
  - lib/dynflow/version.rb
103
102
  - test/action_test.rb
104
103
  - test/bus_test.rb
105
- - test/dispatcher_test.rb
104
+ - test/execution_plan_test.rb
106
105
  - test/test_helper.rb
107
- homepage: http://github.com/iNecas/eventum
106
+ homepage: http://github.com/iNecas/dynflow
108
107
  licenses: []
109
108
  post_install_message:
110
109
  rdoc_options: []
@@ -131,5 +130,5 @@ summary: DYNamic workFLOW engine
131
130
  test_files:
132
131
  - test/action_test.rb
133
132
  - test/bus_test.rb
134
- - test/dispatcher_test.rb
133
+ - test/execution_plan_test.rb
135
134
  - test/test_helper.rb
@@ -1,38 +0,0 @@
1
- require 'forwardable'
2
- require 'active_support/core_ext/hash/indifferent_access'
3
- require 'active_support/core_ext/string/inflections'
4
- require 'apipie-params'
5
-
6
- module Dynflow
7
- class Message
8
-
9
- def ==(other)
10
- self.encode == other.encode
11
- end
12
-
13
- extend Forwardable
14
-
15
- def_delegators :@data, '[]', '[]='
16
-
17
- attr_reader :data
18
-
19
- def initialize(data = {})
20
- @data = data.with_indifferent_access
21
- end
22
-
23
-
24
- def self.decode(data)
25
- ret = data['message_type'].constantize.allocate
26
- ret.instance_variable_set("@data", data['data'])
27
- return ret
28
- end
29
-
30
- def encode
31
- {
32
- 'message_type' => self.class.name,
33
- 'data' => @data
34
- }
35
- end
36
-
37
- end
38
- end
@@ -1,14 +0,0 @@
1
- module Dynflow
2
- class OrchRequest < Message
3
- def self.response_class
4
- unless self.name =~ /::Request\Z/
5
- raise "Unexpected class name, #{self.name} expected to end with ::Request"
6
- end
7
- begin
8
- self.name.sub(/::Request\Z/, '::Response').constantize
9
- rescue NameError => e
10
- OrchResponse
11
- end
12
- end
13
- end
14
- end
@@ -1,5 +0,0 @@
1
- module Dynflow
2
- class OrchResponse < Message
3
-
4
- end
5
- end
@@ -1,108 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Dynflow
4
-
5
- describe Dispatcher do
6
- class Promotion < Action
7
-
8
- def plan(repo_names, package_names)
9
- repo_names.each do |repo_name|
10
- plan_action(CloneRepo, {'name' => repo_name})
11
- end
12
-
13
- package_names.each do |package_name|
14
- plan_action(ClonePackage, {'name' => package_name})
15
- end
16
-
17
- plan_self('actions' => repo_names.size + package_names.size)
18
- end
19
-
20
- input_format do
21
- param :actions, Integer
22
- end
23
-
24
- end
25
-
26
- class PromotionObserver < Action
27
-
28
- def self.subscribe
29
- Promotion
30
- end
31
-
32
- end
33
-
34
- class CloneRepo < Action
35
-
36
- input_format do
37
- param :name, String
38
- end
39
-
40
- output_format do
41
- param :id, String
42
- end
43
-
44
- end
45
-
46
- class ClonePackage < Action
47
-
48
- input_format do
49
- param :name, String
50
- end
51
-
52
- output_format do
53
- param :id, String
54
- end
55
-
56
- end
57
-
58
- class UpdateIndex < Action
59
-
60
- def self.subscribe
61
- ClonePackage
62
- end
63
-
64
- def plan(input)
65
- plan_action(YetAnotherAction, {'hello' => 'world'})
66
- super
67
- end
68
-
69
- output_format do
70
- param :indexed_name, String
71
- end
72
-
73
- end
74
-
75
- class YetAnotherAction < Action
76
-
77
- input_format do
78
- param :name, String
79
- param :hello, String
80
- end
81
-
82
- output_format do
83
- param :hello, String
84
- end
85
-
86
- def plan(arg)
87
- plan_self(input.merge(arg))
88
- end
89
-
90
- end
91
-
92
- it "builds the execution plan" do
93
- execution_plan = Promotion.plan(['zoo', 'foo'], ['elephant'])
94
- expected_plan =
95
- [
96
- [CloneRepo, {'name' => 'zoo'}],
97
- [CloneRepo, {'name' => 'foo'}],
98
- [ClonePackage, {'name' => 'elephant'}],
99
- [YetAnotherAction, {'name' => 'elephant', 'hello' => 'world'}],
100
- [UpdateIndex, {'name' => 'elephant'}],
101
- [Promotion, {'actions' => 3 }],
102
- [PromotionObserver, {'actions' => 3 }]
103
- ]
104
- execution_plan.must_equal expected_plan
105
- end
106
-
107
- end
108
- end