protobuf-rpc-register 0.3.0 → 0.4.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/lib/protobuf/rpc/clients/base.rb +62 -53
- data/lib/protobuf/rpc/register/version.rb +1 -1
- data/lib/protobuf/rpc/serializer.rb +2 -12
- data/lib/protobuf/rpc/services/base.rb +2 -2
- data/protobuf-rpc-register.gemspec +0 -1
- metadata +2 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 69cf91d5d0dc37cfa2e3183ee45aa1d17d739035
|
4
|
+
data.tar.gz: 946260c19e3f8f9bd888ca8e4a0dfad81f8ffb55
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f3e97a28e601554cf33c86f60c10007ac8735c14d51579f103ecf7967e14cb9af602d8313a3c14df26d4b6131b14b3c93324f449575d99db1f2c24fdefe5d91b
|
7
|
+
data.tar.gz: 237190b219ca4d3a58d48286cb30e7ac8c5895e30e9de31e60ae755fd3b6b5067b5e38778ee03752a1dadebc112f0a61491bd03057f5d88a0132b3267e20577f
|
@@ -2,14 +2,15 @@ module Protobuf
|
|
2
2
|
module Rpc
|
3
3
|
module Clients
|
4
4
|
class Base
|
5
|
-
attr_accessor :logger
|
5
|
+
attr_accessor :logger, :error_logger
|
6
6
|
|
7
7
|
mattr_reader(:mutex) { Mutex.new }
|
8
8
|
|
9
|
-
def initialize(options = {})
|
9
|
+
def initialize(options = {}, stdout: STDOUT, stderr: STDERR)
|
10
10
|
@options = options
|
11
11
|
@namespace = options[:namespace]
|
12
|
-
@logger ||= Logger.new(
|
12
|
+
@logger ||= Logger.new(stdout)
|
13
|
+
@error_logger ||= Logger.new(stderr)
|
13
14
|
end
|
14
15
|
|
15
16
|
def send_rpc_request(method, msg)
|
@@ -24,11 +25,7 @@ module Protobuf
|
|
24
25
|
end
|
25
26
|
|
26
27
|
c.on_failure do |error|
|
27
|
-
|
28
|
-
exception_class = Protobuf::Rpc.const_get(exception_name.camelize)
|
29
|
-
exception = exception_class.new(error.message)
|
30
|
-
logger.error exception
|
31
|
-
raise exception
|
28
|
+
res = error
|
32
29
|
end
|
33
30
|
end
|
34
31
|
|
@@ -36,58 +33,70 @@ module Protobuf
|
|
36
33
|
end
|
37
34
|
|
38
35
|
def check_response_error(res, raise_error: true)
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
36
|
+
case res
|
37
|
+
when Protobuf::Rpc::Messages::Error
|
38
|
+
error_class = self.class.mutex.synchronize { define_error_class(res) }
|
39
|
+
error = error_class.new(res.error_message)
|
40
|
+
error.set_backtrace(res.error_backtrace)
|
41
|
+
raise_error(error, raise_error)
|
42
|
+
when Protobuf::Error
|
43
|
+
error_reason = Protobuf::Socketrpc::ErrorReason.name_for_tag(res.code).to_s.downcase
|
44
|
+
error_class = Protobuf::Rpc.const_get(error_reason.camelize)
|
45
|
+
error = error_class.new(res.message)
|
46
|
+
raise_error(error, raise_error)
|
47
|
+
else
|
48
|
+
res
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
def define_error_class(res)
|
55
|
+
module_name = (@namespace || 'Protobuf').camelize
|
56
|
+
m = Object.const_defined?(module_name, false) ? Object.const_get(module_name, false) : Object.const_set(module_name, Module.new)
|
57
|
+
m.const_defined?(:Rpc, false) ? m.const_get(:Rpc, false) : m.const_set(:Rpc, Module.new)
|
58
|
+
|
59
|
+
if m.const_defined?(res.error_class, false)
|
60
|
+
m.const_get(res.error_class, false)
|
61
|
+
else
|
62
|
+
module_name = res.error_class.deconstantize
|
63
|
+
class_name = res.error_class.demodulize
|
64
|
+
base_module = m::Rpc
|
65
|
+
module_name.split('::').each do |m|
|
66
|
+
base_module.const_defined?(m, false) || base_module.const_set(m, Module.new)
|
67
|
+
base_module = base_module.const_get(m, false)
|
68
|
+
end
|
69
|
+
error_superclass = res.error_class.safe_constantize || begin
|
70
|
+
require res.error_class.split('::')[0].underscore
|
71
|
+
res.error_class.constantize
|
72
|
+
rescue LoadError
|
73
|
+
raise NameError.new("uninitialized constant #{res.error_class}", res.error_class)
|
74
|
+
end
|
75
|
+
if base_module.const_defined?(class_name, false)
|
76
|
+
base_module.const_get(class_name, false)
|
77
|
+
else
|
78
|
+
base_module.const_set(class_name, Class.new(error_superclass) do
|
79
|
+
def initialize(message = nil)
|
80
|
+
@message = message
|
54
81
|
end
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
rescue LoadError
|
59
|
-
raise NameError.new("uninitialized constant #{res.error_class}", res.error_class)
|
82
|
+
|
83
|
+
def inspect
|
84
|
+
"#{self.class}: #{@message}"
|
60
85
|
end
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
base_module.const_set(class_name, Class.new(error_superclass) do
|
65
|
-
def initialize(message = nil)
|
66
|
-
@message = message
|
67
|
-
end
|
68
|
-
|
69
|
-
def inspect
|
70
|
-
"#{self.class}: #{@message}"
|
71
|
-
end
|
72
|
-
|
73
|
-
def message
|
74
|
-
@message
|
75
|
-
end
|
76
|
-
end)
|
86
|
+
|
87
|
+
def message
|
88
|
+
@message
|
77
89
|
end
|
78
|
-
end
|
90
|
+
end)
|
79
91
|
end
|
80
|
-
|
81
|
-
error = error_class.new(res.error_message)
|
82
|
-
error.set_backtrace(res.error_backtrace)
|
83
|
-
logger.error error
|
84
|
-
raise error if raise_error
|
85
|
-
error
|
86
|
-
else
|
87
|
-
res
|
88
92
|
end
|
89
93
|
end
|
90
94
|
|
95
|
+
def raise_error(error, raise_error = false)
|
96
|
+
raise_error ? raise(error) : error_logger.error(error)
|
97
|
+
error
|
98
|
+
end
|
99
|
+
|
91
100
|
def self.implement_rpc(rpc_method)
|
92
101
|
define_method(rpc_method) do |*args|
|
93
102
|
msg = if args.first.is_a?(Protobuf::Message)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Protobuf
|
2
2
|
module Rpc
|
3
3
|
class Serializer
|
4
|
-
def self.dump(msg, serializer
|
4
|
+
def self.dump(msg, serializer:)
|
5
5
|
return msg if msg.is_a?(Messages::RpcCompressedMessage)
|
6
6
|
dumped_message = Messages::RpcCompressedMessage.new(compressed: false)
|
7
7
|
|
@@ -28,18 +28,8 @@ module Protobuf
|
|
28
28
|
yaml(dumped_message, msg)
|
29
29
|
when :MARSHAL
|
30
30
|
marshal(dumped_message, msg)
|
31
|
-
when :RAW
|
32
|
-
raw(dumped_message, msg)
|
33
31
|
else
|
34
|
-
|
35
|
-
msgpack(dumped_message, msg)
|
36
|
-
elsif defined?(Oj)
|
37
|
-
oj(dumped_message, msg)
|
38
|
-
elsif defined?(MultiJson)
|
39
|
-
multi_json(dumped_message, msg)
|
40
|
-
else
|
41
|
-
yaml(dumped_message, msg)
|
42
|
-
end
|
32
|
+
raw(dumped_message, msg)
|
43
33
|
end
|
44
34
|
end
|
45
35
|
|
@@ -6,11 +6,11 @@ module Protobuf
|
|
6
6
|
module Services
|
7
7
|
class Base < ::Protobuf::Rpc::Service
|
8
8
|
|
9
|
-
def compress_with(msg)
|
9
|
+
def compress_with(msg, serializer: :MSGPACK)
|
10
10
|
if msg.is_a?(StandardError)
|
11
11
|
msg = Messages::Error.new(error_class: msg.class.name, error_message: msg.message, error_backtrace: msg.backtrace)
|
12
12
|
end
|
13
|
-
respond_with Serializer.dump(msg)
|
13
|
+
respond_with Serializer.dump(msg, serializer: serializer)
|
14
14
|
end
|
15
15
|
|
16
16
|
def self.inherited(subclass)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: protobuf-rpc-register
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- scorix
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-05-
|
11
|
+
date: 2016-05-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -164,20 +164,6 @@ dependencies:
|
|
164
164
|
- - "~>"
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: '3.0'
|
167
|
-
- !ruby/object:Gem::Dependency
|
168
|
-
name: activesupport
|
169
|
-
requirement: !ruby/object:Gem::Requirement
|
170
|
-
requirements:
|
171
|
-
- - "~>"
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: '4.0'
|
174
|
-
type: :runtime
|
175
|
-
prerelease: false
|
176
|
-
version_requirements: !ruby/object:Gem::Requirement
|
177
|
-
requirements:
|
178
|
-
- - "~>"
|
179
|
-
- !ruby/object:Gem::Version
|
180
|
-
version: '4.0'
|
181
167
|
description: Register for rpc services using protobuf rpc.
|
182
168
|
email:
|
183
169
|
- scorix@gmail.com
|