serf 0.5.0 → 0.6.0
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/README.md +21 -13
- data/lib/serf/builder.rb +44 -8
- data/lib/serf/version.rb +1 -1
- data/serf.gemspec +3 -3
- metadata +24 -24
data/README.md
CHANGED
@@ -200,16 +200,21 @@ Example
|
|
200
200
|
@logger.info "RegExp Matched #{message.inspect}"
|
201
201
|
nil
|
202
202
|
end
|
203
|
+
|
204
|
+
def call(message={})
|
205
|
+
@logger.info "A message matched an empty action part in the target"
|
206
|
+
nil
|
207
|
+
end
|
203
208
|
end
|
204
209
|
|
205
210
|
# my_lib/routes.rb
|
206
211
|
ROUTES = {
|
207
212
|
# Declare a matcher and a list of routes to endpoints.
|
208
213
|
'my_message' => [{
|
209
|
-
# Declares which handler
|
210
|
-
#
|
211
|
-
handler
|
212
|
-
|
214
|
+
# Declares which handler and action (method) of the handler
|
215
|
+
# to call. The handler part is the name of the handler used
|
216
|
+
# to register an actual handler object.
|
217
|
+
target: 'my_handler#submit_my_message',
|
213
218
|
|
214
219
|
# Define a parser that will build up a message object.
|
215
220
|
# Default: nil, no parsing done.
|
@@ -220,17 +225,19 @@ Example
|
|
220
225
|
#background: false
|
221
226
|
}],
|
222
227
|
'other_message' => [{
|
223
|
-
|
224
|
-
action: :submit_other_message,
|
228
|
+
target: 'my_handler#submit_other_message',
|
225
229
|
background: true
|
226
230
|
}, {
|
227
|
-
|
228
|
-
action: :raises_error,
|
231
|
+
target: 'my_handler#raises_error',
|
229
232
|
background: true
|
230
|
-
}
|
233
|
+
},
|
234
|
+
# This is just a string route defining the target, nothing else.
|
235
|
+
# The handler is 'my_handler' and an empty (or missing) action
|
236
|
+
# part defaults to the 'call' method of the handler.
|
237
|
+
'my_handler'
|
238
|
+
],
|
231
239
|
/^events\/.*$/ => [{
|
232
|
-
|
233
|
-
action: :regexp_matched,
|
240
|
+
target: 'my_handler#regexp_matched',
|
234
241
|
background: true
|
235
242
|
}]
|
236
243
|
}
|
@@ -279,8 +286,9 @@ Example
|
|
279
286
|
logger.info "In Tick, MyMessage Results: #{results.inspect}"
|
280
287
|
|
281
288
|
# This will submit 'other_message' to be handled in foreground
|
282
|
-
# Because we declared the 'other_message' kind to be handled async
|
283
|
-
# should get a MessageAcceptedEvent as
|
289
|
+
# Because we declared the 'other_message' kind to be handled async
|
290
|
+
# in each route config, we should get a MessageAcceptedEvent as
|
291
|
+
# the results.
|
284
292
|
results = app.call('kind' => 'other_message')
|
285
293
|
logger.info "In Tick, OtherMessage Results: #{results.inspect}"
|
286
294
|
|
data/lib/serf/builder.rb
CHANGED
@@ -35,7 +35,12 @@ module Serf
|
|
35
35
|
@route_maps = []
|
36
36
|
@handlers = {}
|
37
37
|
@message_parsers = {}
|
38
|
-
@not_found = app
|
38
|
+
@not_found = app || proc do
|
39
|
+
raise ArgumentError, 'Handler Not Found'
|
40
|
+
end
|
41
|
+
|
42
|
+
# Default option in route_configs for background is 'false'
|
43
|
+
@background = false
|
39
44
|
|
40
45
|
# Factories to build objects that wire our Serf App together.
|
41
46
|
# Note that these default implementing classes are also factories
|
@@ -79,6 +84,10 @@ module Serf
|
|
79
84
|
@not_found = app
|
80
85
|
end
|
81
86
|
|
87
|
+
def background(run_in_background)
|
88
|
+
@background = run_in_background
|
89
|
+
end
|
90
|
+
|
82
91
|
def serfer_factory(serfer_factory)
|
83
92
|
@serfer_factory = serfer_factory
|
84
93
|
end
|
@@ -114,28 +123,33 @@ module Serf
|
|
114
123
|
@route_maps.each do |route_map|
|
115
124
|
route_map.each do |matcher, route_configs|
|
116
125
|
route_configs.each do |route_config|
|
126
|
+
# If the passed in route_config was a String, then we place
|
127
|
+
# it in an route config as the 'target' field and leave all
|
128
|
+
# other options as default.
|
129
|
+
config = (route_config.is_a?(String) ?
|
130
|
+
{ target: route_config } :
|
131
|
+
route_config)
|
132
|
+
|
117
133
|
# Get the required handler.
|
118
134
|
# Raises error if handler wasn't declared in config.
|
135
|
+
target = config.fetch :target
|
136
|
+
handler_name, action = handler_and_action target
|
137
|
+
|
119
138
|
# Raises error if handler wasn't registered with builder.
|
120
|
-
handler_name = route_config.fetch :handler
|
121
139
|
handler = @handlers.fetch handler_name
|
122
140
|
|
123
|
-
# Get the required action/method of the handler.
|
124
|
-
# Raises error if route_config doesn't have it.
|
125
|
-
action = route_config.fetch :action
|
126
|
-
|
127
141
|
# Lookup the parser if it was defined.
|
128
142
|
# The Parser MAY be either an object or string.
|
129
143
|
# If String, then we're going to look up in parser map.
|
130
144
|
# Raises an error if a parser (string) was declared, but not
|
131
145
|
# registered with the builder.
|
132
|
-
parser =
|
146
|
+
parser = config[:message_parser]
|
133
147
|
parser = @message_parsers.fetch(parser) if parser.is_a?(String)
|
134
148
|
|
135
149
|
# We have the handler, action and parser.
|
136
150
|
# Now we're going to add that route to either the background
|
137
151
|
# or foreground route_set.
|
138
|
-
background =
|
152
|
+
background = config.fetch(:background) { @background }
|
139
153
|
(background ? bg_route_set : fg_route_set).add_route(
|
140
154
|
matcher: matcher,
|
141
155
|
handler: handler,
|
@@ -183,6 +197,28 @@ module Serf
|
|
183
197
|
|
184
198
|
return app
|
185
199
|
end
|
200
|
+
|
201
|
+
private
|
202
|
+
|
203
|
+
##
|
204
|
+
# Extracts the handler_name and action from the 'target' using
|
205
|
+
# the shortcut convention similar to Rails routing.
|
206
|
+
#
|
207
|
+
# 'my_handler#my_method' => # my_method action.
|
208
|
+
# 'my_handler#' => # action defaults to 'call' method.
|
209
|
+
# 'my_handler' => # action defaults to 'call' method.
|
210
|
+
# '#my_method' => # some registered handler name with empty string.
|
211
|
+
#
|
212
|
+
# @param [String] target the handler and action description.
|
213
|
+
# @return the splat handler and action.
|
214
|
+
#
|
215
|
+
def handler_and_action(target)
|
216
|
+
handler, action = target.split '#', 2
|
217
|
+
handler = handler.to_s.strip
|
218
|
+
action = action.to_s.strip
|
219
|
+
action = :call if action.size == 0
|
220
|
+
return handler, action
|
221
|
+
end
|
186
222
|
end
|
187
223
|
|
188
224
|
end
|
data/lib/serf/version.rb
CHANGED
data/serf.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "serf"
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.6.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Benjamin Yu"]
|
12
|
-
s.date = "2012-
|
12
|
+
s.date = "2012-02-09"
|
13
13
|
s.description = "Event-Driven SOA with CQRS"
|
14
14
|
s.email = "benjaminlyu@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -49,7 +49,7 @@ Gem::Specification.new do |s|
|
|
49
49
|
s.homepage = "http://github.com/byu/serf"
|
50
50
|
s.licenses = ["Apache 2.0"]
|
51
51
|
s.require_paths = ["lib"]
|
52
|
-
s.rubygems_version = "1.8.
|
52
|
+
s.rubygems_version = "1.8.15"
|
53
53
|
s.summary = "Event-Driven SOA with CQRS"
|
54
54
|
|
55
55
|
if s.respond_to? :specification_version then
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: serf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-02-09 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
16
|
-
requirement: &
|
16
|
+
requirement: &70232356582940 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 3.2.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70232356582940
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: i18n
|
27
|
-
requirement: &
|
27
|
+
requirement: &70232356582140 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 0.6.0
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70232356582140
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: uuidtools
|
38
|
-
requirement: &
|
38
|
+
requirement: &70232356581500 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 2.1.2
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70232356581500
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rspec
|
49
|
-
requirement: &
|
49
|
+
requirement: &70232356580820 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 2.3.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70232356580820
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: yard
|
60
|
-
requirement: &
|
60
|
+
requirement: &70232356580140 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 0.6.0
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70232356580140
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: bundler
|
71
|
-
requirement: &
|
71
|
+
requirement: &70232356579500 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 1.0.0
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70232356579500
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: jeweler
|
82
|
-
requirement: &
|
82
|
+
requirement: &70232356578860 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: 1.6.4
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70232356578860
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: simplecov
|
93
|
-
requirement: &
|
93
|
+
requirement: &70232356578380 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *70232356578380
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: msgpack
|
104
|
-
requirement: &
|
104
|
+
requirement: &70232356577820 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
@@ -109,10 +109,10 @@ dependencies:
|
|
109
109
|
version: 0.4.6
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *70232356577820
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: eventmachine
|
115
|
-
requirement: &
|
115
|
+
requirement: &70232356577300 !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
118
118
|
- - ! '>='
|
@@ -120,7 +120,7 @@ dependencies:
|
|
120
120
|
version: 0.12.10
|
121
121
|
type: :development
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: *
|
123
|
+
version_requirements: *70232356577300
|
124
124
|
description: Event-Driven SOA with CQRS
|
125
125
|
email: benjaminlyu@gmail.com
|
126
126
|
executables: []
|
@@ -172,7 +172,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
172
172
|
version: '0'
|
173
173
|
segments:
|
174
174
|
- 0
|
175
|
-
hash: -
|
175
|
+
hash: -296744974966677810
|
176
176
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
177
177
|
none: false
|
178
178
|
requirements:
|
@@ -181,7 +181,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
181
181
|
version: '0'
|
182
182
|
requirements: []
|
183
183
|
rubyforge_project:
|
184
|
-
rubygems_version: 1.8.
|
184
|
+
rubygems_version: 1.8.15
|
185
185
|
signing_key:
|
186
186
|
specification_version: 3
|
187
187
|
summary: Event-Driven SOA with CQRS
|