combi 0.0.18 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/combi/buses/bus.rb +15 -0
- data/lib/combi/buses/http.rb +4 -4
- data/lib/combi/buses/in_process.rb +4 -4
- data/lib/combi/buses/queue.rb +4 -4
- data/lib/combi/buses/web_socket.rb +6 -6
- data/lib/combi/version.rb +1 -1
- data/spec/integration/multi_bus_spec.rb +2 -2
- data/spec/shared_examples/standard_bus.rb +6 -5
- data/spec/support/rabbitmq_server.rb +2 -1
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 28565637d9bdb76e4bd9f256be6af0c89900ec25
|
4
|
+
data.tar.gz: 411ec39864499243853f42677ec76f3708c8c630
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8a353643e81e81912a88a8b756cf29a12ba19982e6db5e09c34fd88d153041bf14434a6d609196c202336d99671f08f3bf49b9c1fde43b1f656c04b2b66b9fa2
|
7
|
+
data.tar.gz: 98151bf6b13683a2992a3e0078bfea21f136377fd33971bb5190893aaac1e3e63b1ff9940516ae2558959229eb36e2d668890630b728850424e1467cf0e27d1a
|
data/README.md
CHANGED
data/lib/combi/buses/bus.rb
CHANGED
@@ -78,5 +78,20 @@ module Combi
|
|
78
78
|
service = service_class.new
|
79
79
|
end
|
80
80
|
|
81
|
+
def invoke_service(service_instance, action, params)
|
82
|
+
# convert keys to symbols in-place
|
83
|
+
params.keys.each {|key| params[key.to_sym] = params.delete(key) }
|
84
|
+
service_instance.send(action, params)
|
85
|
+
rescue => e
|
86
|
+
# TODO: report in a more effective way (I will not read server logs to find this)
|
87
|
+
require 'yaml'
|
88
|
+
puts " *** ERROR INVOKING SERVICE ***"
|
89
|
+
puts " - #{e.inspect}"
|
90
|
+
puts " - #{service_instance.class.ancestors.join ' > '}"
|
91
|
+
puts " - #{action}"
|
92
|
+
puts " - #{params.to_yaml}"
|
93
|
+
raise e
|
94
|
+
end
|
95
|
+
|
81
96
|
end
|
82
97
|
end
|
data/lib/combi/buses/http.rb
CHANGED
@@ -55,13 +55,13 @@ module Combi
|
|
55
55
|
if service_instance.respond_to? kind
|
56
56
|
message['payload'] ||= {}
|
57
57
|
begin
|
58
|
-
response = service_instance
|
59
|
-
rescue
|
60
|
-
response = {error: {message: e.message, backtrace: e.backtrace } }
|
58
|
+
response = invoke_service(service_instance, kind, message['payload'])
|
59
|
+
rescue RuntimeError => e
|
60
|
+
response = {error: {klass: e.class.name, message: e.message, backtrace: e.backtrace } }
|
61
61
|
end
|
62
62
|
{result: 'ok', response: response}
|
63
63
|
else
|
64
|
-
{result: 'error', response: {error: 'unknown action'}}
|
64
|
+
{result: 'error', response: {error: { klass: 'unknown action', message: kind } } }
|
65
65
|
end
|
66
66
|
else
|
67
67
|
{result: 'error', response: {error: 'unknown service'}}
|
@@ -16,7 +16,7 @@ module Combi
|
|
16
16
|
waiter.timeout(options[:timeout], 'error' => 'Timeout::Error')
|
17
17
|
begin
|
18
18
|
Timeout.timeout(options[:timeout]) do
|
19
|
-
response = service_instance
|
19
|
+
response = invoke_service(service_instance, kind, message)
|
20
20
|
if response.respond_to? :succeed
|
21
21
|
response.callback do |service_response|
|
22
22
|
log "responding with deferred response: #{service_response.inspect[0..500]}"
|
@@ -33,11 +33,11 @@ module Combi
|
|
33
33
|
end
|
34
34
|
rescue Timeout::Error => e
|
35
35
|
waiter.fail 'error' => 'Timeout::Error'
|
36
|
-
rescue
|
37
|
-
waiter.fail 'error' => { 'message' => e.message, 'backtrace' => e.backtrace}
|
36
|
+
rescue RuntimeError => e
|
37
|
+
waiter.fail 'error' => {'klass' => e.class.name, 'message' => e.message, 'backtrace' => e.backtrace}
|
38
38
|
end
|
39
39
|
else
|
40
|
-
waiter.fail('error' => 'unknown action')
|
40
|
+
waiter.fail('error' => { 'klass' => 'unknown action', 'message' => kind.to_s })
|
41
41
|
end
|
42
42
|
end
|
43
43
|
waiter
|
data/lib/combi/buses/queue.rb
CHANGED
@@ -67,13 +67,13 @@ module Combi
|
|
67
67
|
if service_instance.respond_to?(kind)
|
68
68
|
log "generating response for #{service_instance.class}#{service_instance.actions.inspect}.#{kind} #{payload.inspect[0..500]}"
|
69
69
|
begin
|
70
|
-
response = service_instance
|
71
|
-
rescue
|
72
|
-
response = {error: { message: e.message, backtrace: e.backtrace } }
|
70
|
+
response = invoke_service(service_instance, kind, payload)
|
71
|
+
rescue RuntimeError => e
|
72
|
+
response = {error: {klass: e.class.name, message: e.message, backtrace: e.backtrace } }
|
73
73
|
end
|
74
74
|
else
|
75
75
|
log "Service instance does not respond to #{kind}: #{service_instance.inspect}"
|
76
|
-
response = {error: 'unknown action'}
|
76
|
+
response = {error: { klass: 'unknown action', message: kind } }
|
77
77
|
end
|
78
78
|
if response.respond_to? :succeed
|
79
79
|
log "response is deferred"
|
@@ -171,9 +171,9 @@ module Combi
|
|
171
171
|
payload = message['payload'] || {}
|
172
172
|
payload['session'] = session
|
173
173
|
begin
|
174
|
-
response =
|
175
|
-
rescue
|
176
|
-
response = {error: {message: e.message, backtrace: e.backtrace } }
|
174
|
+
response = lookup_and_invoke_service(service_name, kind, payload)
|
175
|
+
rescue RuntimeError => e
|
176
|
+
response = {error: {klass: e.class.name, message: e.message, backtrace: e.backtrace } }
|
177
177
|
end
|
178
178
|
|
179
179
|
msg = {result: 'ok', correlation_id: message['correlation_id']}
|
@@ -198,15 +198,15 @@ module Combi
|
|
198
198
|
end
|
199
199
|
end
|
200
200
|
|
201
|
-
def
|
201
|
+
def lookup_and_invoke_service(service_name, kind, payload)
|
202
202
|
handler = handlers[service_name.to_s]
|
203
203
|
if handler
|
204
204
|
service_instance = handler[:service_instance]
|
205
205
|
if service_instance.respond_to? kind
|
206
|
-
response = service_instance
|
206
|
+
response = invoke_service(service_instance, kind, payload)
|
207
207
|
else
|
208
208
|
log "[WARNING] Service #{service_name}(#{service_instance.class.name}) does not respond to message #{kind}"
|
209
|
-
response = {error: 'unknown action'}
|
209
|
+
response = {error: { klass: 'unknown action', message: kind } }
|
210
210
|
end
|
211
211
|
else
|
212
212
|
log "[WARNING] Service #{service_name} not found"
|
data/lib/combi/version.rb
CHANGED
@@ -9,7 +9,7 @@ describe "in a multi bus environment" do
|
|
9
9
|
Given(:boring_salutation_service) do
|
10
10
|
Module.new do
|
11
11
|
def actions; [:say_hello]; end
|
12
|
-
def do_it(params); "Hello #{params[
|
12
|
+
def do_it(params); "Hello #{params[:who]}"; end
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
@@ -26,7 +26,7 @@ describe "in a multi bus environment" do
|
|
26
26
|
def do_it(params)
|
27
27
|
defer = EventMachine::DefaultDeferrable.new
|
28
28
|
EM.synchrony do
|
29
|
-
service_name = params
|
29
|
+
service_name = params[:service_name] || :say_hello
|
30
30
|
req = @other_client.request(service_name, :do_it, params, timeout: 0.1)
|
31
31
|
service_result = EM::Synchrony.sync req
|
32
32
|
if service_result.is_a? RuntimeError
|
@@ -6,7 +6,7 @@ shared_examples_for "standard_bus" do
|
|
6
6
|
Module.new do
|
7
7
|
def actions; [:sleep]; end
|
8
8
|
def do_it(params)
|
9
|
-
sleep params[
|
9
|
+
sleep params[:time]
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
@@ -15,7 +15,7 @@ shared_examples_for "standard_bus" do
|
|
15
15
|
Module.new do
|
16
16
|
def actions; [:say_hello]; end
|
17
17
|
def do_it(params)
|
18
|
-
"Hello #{params[
|
18
|
+
"Hello #{params[:who]}"
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
@@ -24,7 +24,7 @@ shared_examples_for "standard_bus" do
|
|
24
24
|
Module.new do
|
25
25
|
def actions; [:echo_this]; end
|
26
26
|
def do_it(params)
|
27
|
-
params[
|
27
|
+
params[:data]
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
@@ -33,7 +33,7 @@ shared_examples_for "standard_bus" do
|
|
33
33
|
Module.new do
|
34
34
|
def actions; [:shout_error]; end
|
35
35
|
def do_it(params)
|
36
|
-
raise params[
|
36
|
+
raise params[:message]
|
37
37
|
end
|
38
38
|
end
|
39
39
|
end
|
@@ -185,7 +185,8 @@ shared_examples_for "standard_bus" do
|
|
185
185
|
EM.synchrony do
|
186
186
|
begin
|
187
187
|
service_result = EM::Synchrony.sync consumer.request(:echo_this, :do_other, {}, { timeout: 0.1 })
|
188
|
-
service_result['error'].should eq error_message
|
188
|
+
service_result['error']['klass'].should eq error_message
|
189
|
+
service_result['error']['message'].should eq 'do_other'
|
189
190
|
done
|
190
191
|
finalize
|
191
192
|
end
|
@@ -27,7 +27,8 @@ class RabbitmqServer
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def start_forwarder!
|
30
|
-
|
30
|
+
# workaround https://github.com/boot2docker/boot2docker-cli/issues/165
|
31
|
+
command = "ssh docker@localhost -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 2022 -i ~/.ssh/id_boot2docker -N -L #{port}:localhost:#{port}"
|
31
32
|
return if @_command_running ||= `ps`.include?(command)
|
32
33
|
@forwarder_pid = Process.spawn command
|
33
34
|
#Process.detach @forwarder_pid
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: combi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- German Del Zotto
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-06-
|
12
|
+
date: 2014-06-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: yajl-ruby
|
@@ -196,9 +196,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
196
196
|
version: '0'
|
197
197
|
requirements: []
|
198
198
|
rubyforge_project:
|
199
|
-
rubygems_version: 2.
|
199
|
+
rubygems_version: 2.3.0
|
200
200
|
signing_key:
|
201
201
|
specification_version: 4
|
202
202
|
summary: Mini Bus for microservices
|
203
203
|
test_files: []
|
204
|
-
has_rdoc:
|