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 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: