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.
- data/lib/fluere.rb +21 -1
- data/lib/fluere/config.rb +1 -0
- data/lib/fluere/version.rb +1 -1
- data/lib/fluere/worker.rb +56 -29
- data/lib/fluere/workflow.rb +60 -43
- metadata +3 -9
- data/lib/fluere/activity.rb +0 -30
data/lib/fluere.rb
CHANGED
@@ -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)
|
data/lib/fluere/config.rb
CHANGED
data/lib/fluere/version.rb
CHANGED
data/lib/fluere/worker.rb
CHANGED
@@ -1,42 +1,69 @@
|
|
1
1
|
module Fluere
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
2
|
+
module Worker
|
3
|
+
class Base
|
4
|
+
def task_list
|
5
|
+
raise("abstract")
|
6
|
+
end
|
7
7
|
|
8
|
-
|
9
|
-
|
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
|
-
|
15
|
-
|
16
|
-
|
12
|
+
def task_implementations
|
13
|
+
raise("abstract")
|
14
|
+
end
|
17
15
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
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
|
-
|
31
|
-
|
36
|
+
def register
|
37
|
+
aws_flow_worker.register
|
38
|
+
end
|
32
39
|
end
|
33
40
|
|
34
|
-
|
35
|
-
|
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
|
-
|
39
|
-
|
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
|
data/lib/fluere/workflow.rb
CHANGED
@@ -1,60 +1,77 @@
|
|
1
1
|
module Fluere
|
2
2
|
module Workflow
|
3
|
-
def
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
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
|
11
|
-
|
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
|
15
|
-
|
36
|
+
def activities_class
|
37
|
+
@activities_class ||= const_get('Activities')
|
16
38
|
end
|
17
39
|
|
18
|
-
def
|
19
|
-
|
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
|
-
|
28
|
-
|
29
|
-
|
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
|
-
|
42
|
-
|
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
|
-
|
51
|
+
})
|
52
|
+
Fluere.activities << activities_class
|
48
53
|
end
|
49
54
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
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.
|
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-
|
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:
|
data/lib/fluere/activity.rb
DELETED
@@ -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
|