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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3f249183796133308bcbd8d0b68d616e41843122
4
- data.tar.gz: 74965fb85fa0badc9c3a105d150b9c9b83d7dd34
3
+ metadata.gz: 28565637d9bdb76e4bd9f256be6af0c89900ec25
4
+ data.tar.gz: 411ec39864499243853f42677ec76f3708c8c630
5
5
  SHA512:
6
- metadata.gz: b99e6f2263b681f20f03b62054447258ec5b2fe99b514c7ec77e13f4160b7b2f6ffdcdd7e28d9a0e5a7f07681e4ca89bb63179fdb8ca4e8270260cf902ec8e8a
7
- data.tar.gz: c9f21c5147d3afce3afb141e62d70f0c70b3d97498364abcc0719323bcf1a8160dc6a24a21eb8f753d2c6f57c1f4de3bad6666300bb0259f146ffe35e9813d99
6
+ metadata.gz: 8a353643e81e81912a88a8b756cf29a12ba19982e6db5e09c34fd88d153041bf14434a6d609196c202336d99671f08f3bf49b9c1fde43b1f656c04b2b66b9fa2
7
+ data.tar.gz: 98151bf6b13683a2992a3e0078bfea21f136377fd33971bb5190893aaac1e3e63b1ff9940516ae2558959229eb36e2d668890630b728850424e1467cf0e27d1a
data/README.md CHANGED
@@ -28,7 +28,7 @@ module Service
28
28
  end
29
29
 
30
30
  def say_hello(params)
31
- "hello #{params['name']}"
31
+ "hello #{params[:name]}"
32
32
  end
33
33
 
34
34
  end
@@ -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
@@ -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.send(kind, message['payload'])
59
- rescue Exception => e
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.send(kind, message)
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 Exception => e
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
@@ -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.send(kind, payload)
71
- rescue Exception => e
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 = invoke_service(service_name, kind, payload)
175
- rescue Exception => e
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 invoke_service(service_name, kind, payload)
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.send(kind, payload)
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"
@@ -1,3 +1,3 @@
1
1
  module Combi
2
- VERSION = '0.0.18'
2
+ VERSION = '0.1.0'
3
3
  end
@@ -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['who']}"; end
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 ['service_name'] || :say_hello
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['time']
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['who']}"
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['data']
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['message']
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
- command = "/usr/local/bin/boot2docker ssh -L #{port}:localhost:#{port} -N"
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.18
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 00:00:00.000000000 Z
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.2.0
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: