cloud_flow 0.0.1
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 +7 -0
- data/lib/cloud_flow.rb +72 -0
- data/lib/flow_method.rb +3 -0
- metadata +45 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 264e0c36847fc01a6400b66829640d88103ac747
|
4
|
+
data.tar.gz: e34820c6e782cf015d013581ff2aba5f878ff33a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2686a2958245ba902353348516253e439c0499830fe5ba600fe924c2ee76c2d8c90a69404bd15c5ee409e6e7c54b07ed0da845c271369c4adb2aaaaf8faf84dd
|
7
|
+
data.tar.gz: ce732b8bee3cd29cc96795b97a466511e6a32ebcf26ba498f947e85873b59df19ef1ab103cb23bf0793d90307888de3aca38c9c55d0e305fc2589002185d6117
|
data/lib/cloud_flow.rb
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
require_relative 'flow_method'
|
2
|
+
|
3
|
+
class CloudFlow
|
4
|
+
# @param name [String] defines namespace. then it sees SQS Queue: 'cloudflow_#{name}'
|
5
|
+
def initialize(name)
|
6
|
+
@namespace = name
|
7
|
+
sqs = AWS::SQS.new
|
8
|
+
@queue = sqs.queues.named("cloudflow_#{@namespace}")
|
9
|
+
end
|
10
|
+
|
11
|
+
# regist func correspond to given func name.
|
12
|
+
# please avoid 'on', 'poll' since they are used already by CloudFlow.
|
13
|
+
# flow.on(:somefunc, &blk) generates flow#somefunc which is used to call the work.
|
14
|
+
# @param name [String] the work's name.
|
15
|
+
# @param block [Block] the work.
|
16
|
+
def on(name, &block)
|
17
|
+
define_sending_method(name)
|
18
|
+
define_receiving_method(name, &block)
|
19
|
+
end
|
20
|
+
|
21
|
+
# starts its work.
|
22
|
+
def start
|
23
|
+
@queue.poll do |msg|
|
24
|
+
perform_message(msg)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
# defines method which does send message to SQS
|
31
|
+
def define_sending_method(name)
|
32
|
+
self.class.send(:define_method, name) do |*args|
|
33
|
+
@queue.send_message build_method_call(name, *args)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# defines method which performs desired work.
|
38
|
+
def define_receiving_method(name, &block)
|
39
|
+
self.class.send(:define_method, "_#{name}") do |*args|
|
40
|
+
block.call(*args)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# @param msg [AWS::SQS::ReceivedMessage]
|
45
|
+
def perform_message(msg)
|
46
|
+
flow = parse_message(msg)
|
47
|
+
self.send("_#{flow.name}", *flow.args)
|
48
|
+
rescue
|
49
|
+
puts "undefined method: #{msg.body}"
|
50
|
+
end
|
51
|
+
|
52
|
+
# @param msg [AWS::SQS::ReceivedMessage]
|
53
|
+
# @return [FlowMethod]
|
54
|
+
def parse_message(msg)
|
55
|
+
parse_method_call(msg.body)
|
56
|
+
end
|
57
|
+
|
58
|
+
# builds method_call which is like foobar(1,2,3) or foobar(foo,bar)
|
59
|
+
# @return [String]
|
60
|
+
def build_method_call(name, *args)
|
61
|
+
"#{name.to_s}(#{args.join(",")})"
|
62
|
+
end
|
63
|
+
|
64
|
+
# @param method_call [String] built by #build_method_call
|
65
|
+
# @return [FlowMethod]
|
66
|
+
def parse_method_call(method_call)
|
67
|
+
m = FlowMethod.new
|
68
|
+
m.name = method_call.split('(')[0]
|
69
|
+
m.args = method_call.split('(')[1].split(')')[0].split(",") rescue []
|
70
|
+
m
|
71
|
+
end
|
72
|
+
end
|
data/lib/flow_method.rb
ADDED
metadata
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: cloud_flow
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Kai Inui
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-06-21 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Write multi-instance workflow easily
|
14
|
+
email: me@kaiinui.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- lib/cloud_flow.rb
|
20
|
+
- lib/flow_method.rb
|
21
|
+
homepage: https://github.com/kaiinui/CloudFlow
|
22
|
+
licenses:
|
23
|
+
- MIT
|
24
|
+
metadata: {}
|
25
|
+
post_install_message:
|
26
|
+
rdoc_options: []
|
27
|
+
require_paths:
|
28
|
+
- lib
|
29
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - ">="
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
requirements: []
|
40
|
+
rubyforge_project:
|
41
|
+
rubygems_version: 2.2.2
|
42
|
+
signing_key:
|
43
|
+
specification_version: 4
|
44
|
+
summary: SQS Powered Multi-instance coding made easy
|
45
|
+
test_files: []
|