combi 0.0.18 → 0.1.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.
- 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:
|