fluere 0.0.1 → 0.0.2

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.
@@ -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