fluere 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -16,6 +16,10 @@ module Fluere
16
16
  @workflows ||= []
17
17
  end
18
18
 
19
+ def self.activities
20
+ @activities ||= []
21
+ end
22
+
19
23
  def self.swf
20
24
  @swf ||= AWS::SimpleWorkflow.new
21
25
  end
@@ -25,7 +29,23 @@ module Fluere
25
29
  end
26
30
 
27
31
  def self.prefixed_task_list(task_list)
28
- [Fluere::Config.task_list_prefix, task_list].join
32
+ [Fluere::Config.task_list_prefix, task_list].join('-')
33
+ end
34
+
35
+ def self.default_workflow_options
36
+ {
37
+ default_execution_start_to_close_timeout: 60 * 2,
38
+ default_task_start_to_close_timeout: 60 * 2,
39
+ default_child_policy: :terminate,
40
+ }
41
+ end
42
+
43
+ def self.default_activity_options
44
+ {
45
+ default_task_schedule_to_close_timeout: 60 * 2,
46
+ default_task_schedule_to_start_timeout: 60 * 2,
47
+ default_task_start_to_close_timeout: 60 * 2,
48
+ }
29
49
  end
30
50
 
31
51
  def self.start_execution(klass, *args)
@@ -5,6 +5,7 @@ module Fluere
5
5
  attr_accessor :logger
6
6
  attr_accessor :use_forking
7
7
  attr_accessor :task_list_prefix
8
+ attr_accessor :version
8
9
  end
9
10
  end
10
11
  end
@@ -1,3 +1,3 @@
1
1
  module Fluere
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -1,42 +1,69 @@
1
1
  module Fluere
2
- class Worker
3
- def self.for(klass)
4
- assert_fluere_class(klass)
5
- new(klass)
6
- end
2
+ module Worker
3
+ class Base
4
+ def task_list
5
+ raise("abstract")
6
+ end
7
7
 
8
- def self.assert_fluere_class(klass)
9
- unless klass.respond_to? :fluere_worker_klass
10
- raise "must pass class extended with Fluere::Worker or Fluere::Activity"
8
+ def worker_class
9
+ raise("abstract")
11
10
  end
12
- end
13
11
 
14
- def initialize(klass)
15
- @klass = klass
16
- end
12
+ def task_implementations
13
+ raise("abstract")
14
+ end
17
15
 
18
- def aws_flow_worker
19
- @aws_flow_worker ||= @klass.fluere_worker_klass.new(
20
- Fluere.swf.client,
21
- Fluere.domain,
22
- Fluere.prefixed_task_list(@klass.task_list),
23
- @klass,
24
- ) {{
25
- logger: Fluere::Config.logger,
26
- use_forking: Fluere::Config.use_forking
27
- }}
28
- end
16
+ def aws_flow_worker
17
+ @aws_flow_worker ||= worker_class.new(
18
+ Fluere.swf.client,
19
+ Fluere.domain,
20
+ task_list,
21
+ *task_implementations
22
+ ) {{
23
+ logger: Fluere::Config.logger,
24
+ use_forking: Fluere::Config.use_forking
25
+ }}
26
+ end
27
+
28
+ def start
29
+ aws_flow_worker.start
30
+ end
31
+
32
+ def run_once
33
+ aws_flow_worker.run_once
34
+ end
29
35
 
30
- def start
31
- aws_flow_worker.start
36
+ def register
37
+ aws_flow_worker.register
38
+ end
32
39
  end
33
40
 
34
- def run_once
35
- aws_flow_worker.run_once
41
+ class Workflow < Base
42
+ def task_list
43
+ Fluere.prefixed_task_list('decisions')
44
+ end
45
+
46
+ def worker_class
47
+ AWS::Flow::WorkflowWorker
48
+ end
49
+
50
+ def task_implementations
51
+ Fluere.workflows
52
+ end
36
53
  end
37
54
 
38
- def register
39
- aws_flow_worker.register
55
+ class Activity < Base
56
+ def task_list
57
+ Fluere.prefixed_task_list('activities')
58
+ end
59
+
60
+ def worker_class
61
+ AWS::Flow::ActivityWorker
62
+ end
63
+
64
+ def task_implementations
65
+ Fluere.activities
66
+ end
40
67
  end
41
68
  end
42
69
  end
@@ -1,60 +1,77 @@
1
1
  module Fluere
2
2
  module Workflow
3
- def self.extended(base)
4
- base.extend(AWS::Flow::Workflows)
5
- base.extend(ClassOverrides)
6
- base.send(:include, InstanceOverrides)
7
- Fluere.workflows << base
3
+ def decider(&block)
4
+ const_set('Decider', Class.new {
5
+ extend AWS::Flow::Workflows
6
+
7
+ def self.aws_name
8
+ name.gsub(/:/, '_')
9
+ end
10
+ })
11
+
12
+ decider_class.send :define_method, :run, &block
13
+ decider_class.workflow(:run) { Fluere.default_workflow_options.merge(
14
+ prefix_name: decider_class.aws_name,
15
+ version: Fluere::Config.version,
16
+ default_task_list: Fluere.prefixed_task_list('decisions'),
17
+ )}
18
+
19
+ Fluere.workflows << decider_class
8
20
  end
9
21
 
10
- def fluere_worker_klass
11
- AWS::Flow::WorkflowWorker
22
+ def activity(name, &block)
23
+ define_activities_class unless defined? Activities
24
+ activities_class.activity(name) { Fluere.default_activity_options.merge(
25
+ prefix_name: activities_class.aws_name,
26
+ version: Fluere::Config.version,
27
+ default_task_list: Fluere.prefixed_task_list('activities'),
28
+ )}
29
+ activities_class.send :define_method, name, &block
30
+ define_activity_client unless decider_class.respond_to? :activities
31
+ decider_class.send :define_method, name do |*args|
32
+ activities.send(name, *args)
33
+ end
12
34
  end
13
35
 
14
- def start_execution(*args)
15
- workflow_client.start_execution(*args)
36
+ def activities_class
37
+ @activities_class ||= const_get('Activities')
16
38
  end
17
39
 
18
- def workflow_client
19
- AWS::Flow.workflow_client(
20
- Fluere.swf.client,
21
- Fluere.domain
22
- ) {{
23
- from_class: self.name
24
- }}
40
+ def decider_class
41
+ @decider_class ||= const_get('Decider')
25
42
  end
26
43
 
27
- module ClassOverrides
28
- def activity_client(name, &block)
29
- flow_method = "#{name}_flow".to_sym
30
- super(flow_method, &block)
31
- define_method(name) do
32
- if Fluere.stubbed?
33
- klass = self.class.const_get(block.call[:from_class])
34
- klass.new
35
- else
36
- send(flow_method)
37
- end
38
- end
39
- end
44
+ def define_activities_class
45
+ const_set('Activities', Class.new {
46
+ extend AWS::Flow::Activities
40
47
 
41
- def workflow(name, &block)
42
- super(name) do
43
- block.call.tap do |workflow_options|
44
- workflow_options[:task_list] = Fluere.prefixed_task_list(workflow_options[:task_list])
45
- end
48
+ def self.aws_name
49
+ name.gsub(/:/, '_')
46
50
  end
47
- end
51
+ })
52
+ Fluere.activities << activities_class
48
53
  end
49
54
 
50
- module InstanceOverrides
51
- def wait_for_all(*args)
52
- if Fluere.stubbed?
53
- true # pass
54
- else
55
- super(*args)
56
- end
57
- end
55
+ def define_activity_client
56
+ decider_class.activity_client(:activities) {{
57
+ prefix_name: activities_class.aws_name,
58
+ version: Fluere::Config.version
59
+ }}
60
+ end
61
+
62
+ def start_execution(*args)
63
+ workflow_client.start_execution(:run, *args)
64
+ end
65
+
66
+ def workflow_client
67
+ @workflow_client ||= AWS::Flow.workflow_client(
68
+ Fluere.swf.client,
69
+ Fluere.domain
70
+ ) {{
71
+ workflow_name: decider_class.aws_name,
72
+ execution_method: "run",
73
+ version: Fluere::Config.version,
74
+ }}
58
75
  end
59
76
  end
60
77
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluere
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
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-10-25 00:00:00.000000000 Z
12
+ date: 2013-12-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -89,7 +89,6 @@ files:
89
89
  - Rakefile
90
90
  - fluere.gemspec
91
91
  - lib/fluere.rb
92
- - lib/fluere/activity.rb
93
92
  - lib/fluere/config.rb
94
93
  - lib/fluere/exceptions.rb
95
94
  - lib/fluere/version.rb
@@ -111,18 +110,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
111
110
  - - ! '>='
112
111
  - !ruby/object:Gem::Version
113
112
  version: '0'
114
- segments:
115
- - 0
116
- hash: -3200458554492036828
117
113
  required_rubygems_version: !ruby/object:Gem::Requirement
118
114
  none: false
119
115
  requirements:
120
116
  - - ! '>='
121
117
  - !ruby/object:Gem::Version
122
118
  version: '0'
123
- segments:
124
- - 0
125
- hash: -3200458554492036828
126
119
  requirements: []
127
120
  rubyforge_project:
128
121
  rubygems_version: 1.8.23
@@ -133,3 +126,4 @@ test_files:
133
126
  - test/fluere/activity_test.rb
134
127
  - test/fluere/workflow_test.rb
135
128
  - test/test_helper.rb
129
+ has_rdoc:
@@ -1,30 +0,0 @@
1
- module Fluere
2
- module Activity
3
- def self.extended(base)
4
- base.extend AWS::Flow::Activities
5
- base.extend ClassOverrides
6
- base.send(:include, InstanceOverrides)
7
- end
8
-
9
- def fluere_worker_klass
10
- AWS::Flow::ActivityWorker
11
- end
12
-
13
- module ClassOverrides
14
- def activity(name, &block)
15
- super(name) do
16
- block.call.tap do |activity_options|
17
- activity_options[:task_list] = Fluere.prefixed_task_list(activity_options[:default_task_list])
18
- end
19
- end
20
- end
21
- end
22
-
23
- module InstanceOverrides
24
- def send_async(*args)
25
- Fluere.assert_stubbed
26
- self.send(*args)
27
- end
28
- end
29
- end
30
- end