protobuffy 3.6.0 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (209) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +67 -0
  4. data/.rubocop_todo.yml +145 -0
  5. data/.travis.yml +25 -5
  6. data/CHANGES.md +55 -0
  7. data/CONTRIBUTING.md +1 -1
  8. data/LICENSE.txt +17 -9
  9. data/README.md +13 -12
  10. data/Rakefile +15 -11
  11. data/bin/protoc-gen-ruby +8 -3
  12. data/bin/rpc_server +1 -0
  13. data/examples/lib/example/reverse-client.rb +2 -2
  14. data/install-protobuf.sh +28 -0
  15. data/lib/protobuf.rb +57 -53
  16. data/lib/protobuf/cli.rb +94 -74
  17. data/lib/protobuf/code_generator.rb +60 -9
  18. data/lib/protobuf/decoder.rb +19 -65
  19. data/lib/protobuf/deprecation.rb +117 -0
  20. data/lib/protobuf/descriptors/google/protobuf/compiler/plugin.pb.rb +11 -1
  21. data/lib/protobuf/descriptors/google/protobuf/descriptor.pb.rb +55 -3
  22. data/lib/protobuf/encoder.rb +13 -53
  23. data/lib/protobuf/enum.rb +58 -63
  24. data/lib/protobuf/field.rb +4 -4
  25. data/lib/protobuf/field/base_field.rb +101 -173
  26. data/lib/protobuf/field/bool_field.rb +17 -11
  27. data/lib/protobuf/field/bytes_field.rb +21 -35
  28. data/lib/protobuf/field/double_field.rb +0 -1
  29. data/lib/protobuf/field/enum_field.rb +23 -22
  30. data/lib/protobuf/field/field_array.rb +5 -4
  31. data/lib/protobuf/field/fixed32_field.rb +1 -1
  32. data/lib/protobuf/field/fixed64_field.rb +0 -1
  33. data/lib/protobuf/field/float_field.rb +4 -1
  34. data/lib/protobuf/field/int32_field.rb +0 -1
  35. data/lib/protobuf/field/int64_field.rb +0 -1
  36. data/lib/protobuf/field/integer_field.rb +0 -1
  37. data/lib/protobuf/field/message_field.rb +13 -28
  38. data/lib/protobuf/field/sfixed32_field.rb +0 -1
  39. data/lib/protobuf/field/sfixed64_field.rb +0 -1
  40. data/lib/protobuf/field/signed_integer_field.rb +0 -1
  41. data/lib/protobuf/field/sint32_field.rb +0 -1
  42. data/lib/protobuf/field/sint64_field.rb +0 -1
  43. data/lib/protobuf/field/string_field.rb +2 -4
  44. data/lib/protobuf/field/uint32_field.rb +0 -1
  45. data/lib/protobuf/field/uint64_field.rb +0 -1
  46. data/lib/protobuf/field/varint_field.rb +30 -13
  47. data/lib/protobuf/generators/base.rb +30 -16
  48. data/lib/protobuf/generators/enum_generator.rb +6 -9
  49. data/lib/protobuf/generators/extension_generator.rb +1 -2
  50. data/lib/protobuf/generators/field_generator.rb +25 -13
  51. data/lib/protobuf/generators/file_generator.rb +157 -35
  52. data/lib/protobuf/generators/group_generator.rb +22 -17
  53. data/lib/protobuf/generators/message_generator.rb +13 -14
  54. data/lib/protobuf/generators/option_generator.rb +17 -0
  55. data/lib/protobuf/generators/printable.rb +12 -13
  56. data/lib/protobuf/generators/service_generator.rb +2 -3
  57. data/lib/protobuf/http.rb +2 -2
  58. data/lib/protobuf/lifecycle.rb +20 -33
  59. data/lib/protobuf/logging.rb +39 -0
  60. data/lib/protobuf/message.rb +114 -47
  61. data/lib/protobuf/message/fields.rb +170 -88
  62. data/lib/protobuf/message/serialization.rb +19 -18
  63. data/lib/protobuf/optionable.rb +53 -6
  64. data/lib/protobuf/rpc/buffer.rb +18 -19
  65. data/lib/protobuf/rpc/client.rb +22 -50
  66. data/lib/protobuf/rpc/connectors/base.rb +177 -12
  67. data/lib/protobuf/rpc/connectors/http.rb +14 -9
  68. data/lib/protobuf/rpc/connectors/ping.rb +89 -0
  69. data/lib/protobuf/rpc/connectors/socket.rb +13 -8
  70. data/lib/protobuf/rpc/connectors/zmq.rb +178 -73
  71. data/lib/protobuf/rpc/dynamic_discovery.pb.rb +4 -1
  72. data/lib/protobuf/rpc/env.rb +12 -12
  73. data/lib/protobuf/rpc/error.rb +3 -3
  74. data/lib/protobuf/rpc/error/client_error.rb +4 -4
  75. data/lib/protobuf/rpc/error/server_error.rb +9 -9
  76. data/lib/protobuf/rpc/middleware/exception_handler.rb +6 -2
  77. data/lib/protobuf/rpc/middleware/logger.rb +8 -4
  78. data/lib/protobuf/rpc/middleware/request_decoder.rb +17 -21
  79. data/lib/protobuf/rpc/middleware/response_encoder.rb +22 -27
  80. data/lib/protobuf/rpc/middleware/statsd.rb +3 -3
  81. data/lib/protobuf/rpc/rpc.pb.rb +4 -1
  82. data/lib/protobuf/rpc/server.rb +1 -1
  83. data/lib/protobuf/rpc/servers/http/server.rb +19 -17
  84. data/lib/protobuf/rpc/servers/socket/server.rb +78 -70
  85. data/lib/protobuf/rpc/servers/socket/worker.rb +4 -4
  86. data/lib/protobuf/rpc/servers/socket_runner.rb +27 -15
  87. data/lib/protobuf/rpc/servers/zmq/broker.rb +70 -31
  88. data/lib/protobuf/rpc/servers/zmq/server.rb +55 -47
  89. data/lib/protobuf/rpc/servers/zmq/util.rb +14 -13
  90. data/lib/protobuf/rpc/servers/zmq/worker.rb +16 -16
  91. data/lib/protobuf/rpc/servers/zmq_runner.rb +26 -7
  92. data/lib/protobuf/rpc/service.rb +21 -27
  93. data/lib/protobuf/rpc/service_directory.rb +43 -27
  94. data/lib/protobuf/rpc/service_dispatcher.rb +9 -10
  95. data/lib/protobuf/rpc/service_filters.rb +32 -55
  96. data/lib/protobuf/rpc/stat.rb +4 -8
  97. data/lib/protobuf/socket.rb +1 -2
  98. data/lib/protobuf/tasks/compile.rake +3 -4
  99. data/lib/protobuf/varint.rb +9 -0
  100. data/lib/protobuf/varint_pure.rb +13 -0
  101. data/lib/protobuf/version.rb +1 -1
  102. data/lib/protobuf/zmq.rb +2 -2
  103. data/proto/google/protobuf/descriptor.proto +190 -31
  104. data/protobuffy.gemspec +30 -17
  105. data/spec/benchmark/tasks.rb +27 -19
  106. data/spec/bin/protoc-gen-ruby_spec.rb +11 -6
  107. data/spec/encoding/all_types_spec.rb +96 -84
  108. data/spec/encoding/extreme_values_spec.rb +0 -0
  109. data/spec/functional/class_inheritance_spec.rb +52 -0
  110. data/spec/functional/code_generator_spec.rb +38 -0
  111. data/spec/functional/socket_server_spec.rb +15 -15
  112. data/spec/functional/zmq_server_spec.rb +29 -27
  113. data/spec/lib/protobuf/cli_spec.rb +82 -67
  114. data/spec/lib/protobuf/code_generator_spec.rb +37 -10
  115. data/spec/lib/protobuf/enum_spec.rb +77 -46
  116. data/spec/lib/protobuf/field/bool_field_spec.rb +91 -0
  117. data/spec/lib/protobuf/field/double_field_spec.rb +9 -0
  118. data/spec/lib/protobuf/field/enum_field_spec.rb +26 -0
  119. data/spec/lib/protobuf/field/field_array_spec.rb +69 -0
  120. data/spec/lib/protobuf/field/fixed32_field_spec.rb +7 -0
  121. data/spec/lib/protobuf/field/fixed64_field_spec.rb +7 -0
  122. data/spec/lib/protobuf/field/float_field_spec.rb +90 -0
  123. data/spec/lib/protobuf/field/int32_field_spec.rb +114 -1
  124. data/spec/lib/protobuf/field/int64_field_spec.rb +7 -0
  125. data/spec/lib/protobuf/field/message_field_spec.rb +132 -0
  126. data/spec/lib/protobuf/field/sfixed32_field_spec.rb +9 -0
  127. data/spec/lib/protobuf/field/sfixed64_field_spec.rb +9 -0
  128. data/spec/lib/protobuf/field/sint32_field_spec.rb +9 -0
  129. data/spec/lib/protobuf/field/sint64_field_spec.rb +9 -0
  130. data/spec/lib/protobuf/field/string_field_spec.rb +44 -11
  131. data/spec/lib/protobuf/field/uint32_field_spec.rb +7 -0
  132. data/spec/lib/protobuf/field/uint64_field_spec.rb +7 -0
  133. data/spec/lib/protobuf/field_spec.rb +4 -6
  134. data/spec/lib/protobuf/generators/base_spec.rb +80 -13
  135. data/spec/lib/protobuf/generators/enum_generator_spec.rb +35 -21
  136. data/spec/lib/protobuf/generators/extension_generator_spec.rb +12 -13
  137. data/spec/lib/protobuf/generators/field_generator_spec.rb +73 -21
  138. data/spec/lib/protobuf/generators/file_generator_spec.rb +89 -6
  139. data/spec/lib/protobuf/generators/service_generator_spec.rb +25 -13
  140. data/spec/lib/protobuf/lifecycle_spec.rb +25 -20
  141. data/spec/lib/protobuf/message_spec.rb +578 -79
  142. data/spec/lib/protobuf/optionable_spec.rb +202 -26
  143. data/spec/lib/protobuf/rpc/client_spec.rb +16 -16
  144. data/spec/lib/protobuf/rpc/connectors/base_spec.rb +167 -13
  145. data/spec/lib/protobuf/rpc/connectors/connector_spec.rb +4 -5
  146. data/spec/lib/protobuf/rpc/connectors/http_spec.rb +13 -11
  147. data/spec/lib/protobuf/rpc/connectors/ping_spec.rb +69 -0
  148. data/spec/lib/protobuf/rpc/connectors/socket_spec.rb +6 -7
  149. data/spec/lib/protobuf/rpc/connectors/zmq_spec.rb +35 -52
  150. data/spec/lib/protobuf/rpc/middleware/exception_handler_spec.rb +10 -10
  151. data/spec/lib/protobuf/rpc/middleware/logger_spec.rb +11 -11
  152. data/spec/lib/protobuf/rpc/middleware/request_decoder_spec.rb +23 -23
  153. data/spec/lib/protobuf/rpc/middleware/response_encoder_spec.rb +11 -11
  154. data/spec/lib/protobuf/rpc/middleware/statsd_spec.rb +6 -6
  155. data/spec/lib/protobuf/rpc/servers/http/server_spec.rb +47 -44
  156. data/spec/lib/protobuf/rpc/servers/socket_server_spec.rb +6 -6
  157. data/spec/lib/protobuf/rpc/servers/zmq/server_spec.rb +12 -10
  158. data/spec/lib/protobuf/rpc/servers/zmq/util_spec.rb +11 -11
  159. data/spec/lib/protobuf/rpc/servers/zmq/worker_spec.rb +7 -7
  160. data/spec/lib/protobuf/rpc/service_directory_spec.rb +47 -49
  161. data/spec/lib/protobuf/rpc/service_dispatcher_spec.rb +8 -25
  162. data/spec/lib/protobuf/rpc/service_filters_spec.rb +102 -69
  163. data/spec/lib/protobuf/rpc/service_spec.rb +37 -36
  164. data/spec/lib/protobuf/rpc/stat_spec.rb +7 -9
  165. data/spec/lib/protobuf/varint_spec.rb +29 -0
  166. data/spec/lib/protobuf_spec.rb +55 -28
  167. data/spec/spec_helper.rb +12 -27
  168. data/spec/support/all.rb +0 -1
  169. data/spec/support/packed_field.rb +4 -3
  170. data/spec/support/{test → protos}/all_types.data.bin +0 -0
  171. data/spec/support/{test → protos}/all_types.data.txt +0 -0
  172. data/spec/support/{test → protos}/enum.pb.rb +8 -4
  173. data/spec/support/{test → protos}/enum.proto +4 -1
  174. data/spec/support/{test → protos}/extreme_values.data.bin +0 -0
  175. data/spec/support/protos/google_unittest.bin +0 -0
  176. data/spec/support/protos/google_unittest.pb.rb +798 -0
  177. data/spec/support/{test → protos}/google_unittest.proto +237 -66
  178. data/spec/support/protos/google_unittest_custom_options.bin +0 -0
  179. data/spec/support/protos/google_unittest_custom_options.pb.rb +268 -0
  180. data/spec/support/protos/google_unittest_custom_options.proto +424 -0
  181. data/spec/support/protos/google_unittest_import.pb.rb +55 -0
  182. data/spec/support/{test → protos}/google_unittest_import.proto +19 -10
  183. data/spec/support/protos/google_unittest_import_public.pb.rb +31 -0
  184. data/spec/support/{test → protos}/google_unittest_import_public.proto +8 -5
  185. data/spec/support/{test → protos}/multi_field_extensions.pb.rb +5 -2
  186. data/spec/support/{test → protos}/multi_field_extensions.proto +2 -0
  187. data/spec/support/{test → protos}/resource.pb.rb +47 -11
  188. data/spec/support/{test → protos}/resource.proto +24 -1
  189. data/spec/support/resource_service.rb +23 -0
  190. data/spec/support/server.rb +32 -61
  191. metadata +119 -59
  192. data/lib/protobuf/deprecator.rb +0 -42
  193. data/lib/protobuf/logger.rb +0 -93
  194. data/lib/protobuf/rpc/connector.rb +0 -21
  195. data/lib/protobuf/rpc/connectors/common.rb +0 -172
  196. data/spec/data/data.bin +0 -3
  197. data/spec/data/types.bin +0 -0
  198. data/spec/lib/protobuf/logger_spec.rb +0 -145
  199. data/spec/lib/protobuf/rpc/connector_spec.rb +0 -26
  200. data/spec/lib/protobuf/rpc/connectors/common_spec.rb +0 -170
  201. data/spec/support/test/defaults.pb.rb +0 -25
  202. data/spec/support/test/defaults.proto +0 -9
  203. data/spec/support/test/extended.pb.rb +0 -22
  204. data/spec/support/test/extended.proto +0 -10
  205. data/spec/support/test/google_unittest.pb.rb +0 -543
  206. data/spec/support/test/google_unittest_import.pb.rb +0 -37
  207. data/spec/support/test/google_unittest_import_public.pb.rb +0 -8
  208. data/spec/support/test/resource_service.rb +0 -26
  209. data/spec/support/tolerance_matcher.rb +0 -40
@@ -9,15 +9,23 @@ require 'protobuf/rpc/dynamic_discovery.pb'
9
9
 
10
10
  module Protobuf
11
11
  module Rpc
12
+ def self.service_directory
13
+ @service_directory ||= ::Protobuf::Rpc::ServiceDirectory.instance
14
+ end
15
+
16
+ def self.service_directory=(directory)
17
+ @service_directory = directory
18
+ end
19
+
12
20
  class ServiceDirectory
13
21
  include ::Singleton
14
- include ::Protobuf::Logger::LogMethods
22
+ include ::Protobuf::Logging
15
23
 
16
- DEFAULT_ADDRESS = "0.0.0.0"
24
+ DEFAULT_ADDRESS = '0.0.0.0'.freeze
17
25
  DEFAULT_PORT = 53000
18
26
  DEFAULT_TIMEOUT = 1
19
27
 
20
- class Listing < Delegator
28
+ class Listing < SimpleDelegator
21
29
  attr_reader :expires_at
22
30
 
23
31
  def initialize(server)
@@ -45,13 +53,9 @@ module Protobuf
45
53
  end
46
54
 
47
55
  def update(server)
48
- @server = server
56
+ __setobj__(server)
49
57
  @expires_at = Time.now.to_i + ttl
50
58
  end
51
-
52
- def __getobj__
53
- @server
54
- end
55
59
  end
56
60
 
57
61
  # Class Methods
@@ -70,11 +74,11 @@ module Protobuf
70
74
 
71
75
  def self.start
72
76
  yield(self) if block_given?
73
- self.instance.start
77
+ instance.start
74
78
  end
75
79
 
76
80
  def self.stop
77
- self.instance.stop
81
+ instance.stop
78
82
  end
79
83
 
80
84
  #
@@ -86,6 +90,7 @@ module Protobuf
86
90
 
87
91
  def all_listings_for(service)
88
92
  if running? && @listings_by_service.key?(service.to_s)
93
+ start_listener_thread if listener_dead?
89
94
  @listings_by_service[service.to_s].entries.shuffle
90
95
  else
91
96
  []
@@ -93,15 +98,19 @@ module Protobuf
93
98
  end
94
99
 
95
100
  def each_listing(&block)
101
+ start_listener_thread if listener_dead?
96
102
  @listings_by_uuid.each_value(&block)
97
103
  end
98
104
 
99
105
  def lookup(service)
100
- if running?
101
- if @listings_by_service.key?(service.to_s)
102
- @listings_by_service[service.to_s].entries.sample
103
- end
104
- end
106
+ return unless running?
107
+ start_listener_thread if listener_dead?
108
+ return unless @listings_by_service.key?(service.to_s)
109
+ @listings_by_service[service.to_s].entries.sample
110
+ end
111
+
112
+ def listener_dead?
113
+ @thread.nil? || !@thread.alive?
105
114
  end
106
115
 
107
116
  def restart
@@ -110,22 +119,29 @@ module Protobuf
110
119
  end
111
120
 
112
121
  def running?
113
- !!@thread.try(:alive?)
122
+ !!@running
114
123
  end
115
124
 
116
125
  def start
117
126
  unless running?
118
127
  init_socket
119
- log_info { sign_message("listening to udp://#{self.class.address}:#{self.class.port}") }
120
- @thread = Thread.new { self.send(:run) }
128
+ logger.info { sign_message("listening to udp://#{self.class.address}:#{self.class.port}") }
129
+ @running = true
121
130
  end
122
131
 
132
+ start_listener_thread if listener_dead?
123
133
  self
124
134
  end
125
135
 
136
+ def start_listener_thread
137
+ return if @thread.try(:alive?)
138
+ @thread = Thread.new { send(:run) }
139
+ end
140
+
126
141
  def stop
127
- log_info { sign_message("Stopping directory") }
142
+ logger.info { sign_message("Stopping directory") }
128
143
 
144
+ @running = false
129
145
  @thread.try(:kill).try(:join)
130
146
  @socket.try(:close)
131
147
 
@@ -151,7 +167,7 @@ module Protobuf
151
167
  end
152
168
 
153
169
  trigger(action, listing)
154
- log_debug { sign_message("#{action} server: #{server.inspect}") }
170
+ logger.debug { sign_message("#{action} server: #{server.inspect}") }
155
171
  end
156
172
 
157
173
  def init_socket
@@ -177,7 +193,7 @@ module Protobuf
177
193
  remove_listing(uuid)
178
194
  end
179
195
  else
180
- log_info { sign_message("Ignoring incomplete beacon: #{beacon.inspect}") }
196
+ logger.info { sign_message("Ignoring incomplete beacon: #{beacon.inspect}") }
181
197
  end
182
198
  end
183
199
 
@@ -193,18 +209,18 @@ module Protobuf
193
209
  end
194
210
 
195
211
  def remove_expired_listings
196
- log_debug { sign_message("Removing expired listings") }
212
+ logger.debug { sign_message("Removing expired listings") }
197
213
  @listings_by_uuid.each do |uuid, listing|
198
214
  remove_listing(uuid) if listing.expired?
199
215
  end
200
216
  end
201
217
 
202
218
  def remove_listing(uuid)
203
- listing = @listings_by_uuid[uuid] or return
219
+ listing = @listings_by_uuid[uuid] || return
204
220
 
205
- log_debug { sign_message("Removing listing: #{listing.inspect}") }
221
+ logger.debug { sign_message("Removing listing: #{listing.inspect}") }
206
222
 
207
- @listings_by_service.each do |service, listings|
223
+ @listings_by_service.each_value do |listings|
208
224
  listings.delete(listing)
209
225
  end
210
226
 
@@ -219,7 +235,7 @@ module Protobuf
219
235
  end
220
236
 
221
237
  def run
222
- sweep_interval = 1 # sweep expired listings every 1 second
238
+ sweep_interval = 5 # sweep expired listings every 5 seconds
223
239
  next_sweep = Time.now.to_i + sweep_interval
224
240
 
225
241
  loop do
@@ -233,7 +249,7 @@ module Protobuf
233
249
  end
234
250
  end
235
251
  rescue => e
236
- log_debug { sign_message("ERROR: (#{e.class}) #{e.message}\n#{e.backtrace.join("\n")}") }
252
+ logger.debug { sign_message("ERROR: (#{e.class}) #{e.message}\n#{e.backtrace.join("\n")}") }
237
253
  retry
238
254
  end
239
255
 
@@ -1,17 +1,21 @@
1
- require 'protobuf/logger'
1
+ require 'protobuf/logging'
2
2
 
3
3
  module Protobuf
4
4
  module Rpc
5
5
  class ServiceDispatcher
6
- include ::Protobuf::Logger::LogMethods
6
+ include ::Protobuf::Logging
7
7
 
8
8
  attr_reader :env
9
9
 
10
- def initialize(app)
10
+ def initialize(_app)
11
11
  # End of the line...
12
12
  end
13
13
 
14
14
  def call(env)
15
+ dup._call(env)
16
+ end
17
+
18
+ def _call(env)
15
19
  @env = env
16
20
 
17
21
  env.response = dispatch_rpc_request
@@ -22,15 +26,10 @@ module Protobuf
22
26
  @rpc_service ||= env.rpc_service.new(env)
23
27
  end
24
28
 
25
- private
29
+ private
26
30
 
27
- # Call the given service method.
28
31
  def dispatch_rpc_request
29
- unless rpc_service.respond_to?(method_name)
30
- raise MethodNotFound.new("#{service_name}##{method_name} is not a publicly defined method.")
31
- end
32
-
33
- rpc_service.callable_rpc_method(method_name).call
32
+ rpc_service.call(method_name)
34
33
  rpc_service.response
35
34
  end
36
35
 
@@ -24,7 +24,7 @@ module Protobuf
24
24
  # whose values are Sets.
25
25
  #
26
26
  def filters
27
- @filters ||= Hash.new { |h,k| h[k] = [] }
27
+ @filters ||= Hash.new { |h, k| h[k] = [] }
28
28
  end
29
29
 
30
30
  # Filters hash keyed based on filter type (e.g. :before, :after, :around),
@@ -37,7 +37,7 @@ module Protobuf
37
37
  def rescue_from(*ex_klasses, &block)
38
38
  options = ex_klasses.last.is_a?(Hash) ? ex_klasses.pop : {}
39
39
  callable = options.delete(:with) { block }
40
- raise ArgumentError, 'Option :with missing from rescue_from options' if callable.nil?
40
+ fail ArgumentError, 'Option :with missing from rescue_from options' if callable.nil?
41
41
  ex_klasses.each { |ex_klass| rescue_filters[ex_klass] = callable }
42
42
  end
43
43
 
@@ -45,12 +45,12 @@ module Protobuf
45
45
 
46
46
  def define_filter(type, filter, options = {})
47
47
  return if filter_defined?(type, filter)
48
- filters[type] << options.merge({ :callable => filter })
48
+ filters[type] << options.merge(:callable => filter)
49
49
  remember_filter(type, filter)
50
50
  end
51
51
 
52
52
  def defined_filters
53
- @defined_filters ||= Hash.new { |h,k| h[k] = Set.new }
53
+ @defined_filters ||= Hash.new { |h, k| h[k] = Set.new }
54
54
  end
55
55
 
56
56
  # Check to see if the filter has been defined.
@@ -66,8 +66,8 @@ module Protobuf
66
66
  end
67
67
 
68
68
  # Takes a list of actually (or potentially) callable objects.
69
- # TODO add support for if/unless
70
- # TODO add support for only/except sub-filters
69
+ # TODO: add support for if/unless
70
+ # TODO: add support for only/except sub-filters
71
71
  #
72
72
  def set_filters(type, *args)
73
73
  options = args.last.is_a?(Hash) ? args.pop : {}
@@ -94,10 +94,10 @@ module Protobuf
94
94
  # if the filter should not be invoked, true if invocation should occur.
95
95
  #
96
96
  def invoke_filter?(rpc_method, filter)
97
- return invoke_via_only?(rpc_method, filter) \
98
- && invoke_via_except?(rpc_method, filter) \
99
- && invoke_via_if?(rpc_method, filter) \
100
- && invoke_via_unless?(rpc_method, filter)
97
+ invoke_via_only?(rpc_method, filter) &&
98
+ invoke_via_except?(rpc_method, filter) &&
99
+ invoke_via_if?(rpc_method, filter) &&
100
+ invoke_via_unless?(rpc_method, filter)
101
101
  end
102
102
 
103
103
  # If the target rpc endpoint method is listed under an :except option,
@@ -108,8 +108,8 @@ module Protobuf
108
108
  # Value should be a symbol/string or an array of symbols/strings.
109
109
  #
110
110
  def invoke_via_except?(rpc_method, filter)
111
- except = [ filter.fetch(:except) { [] } ].flatten
112
- return except.empty? || ! except.include?(rpc_method)
111
+ except = [filter.fetch(:except) { [] }].flatten
112
+ except.empty? || !except.include?(rpc_method)
113
113
  end
114
114
 
115
115
  # Invoke the given :if callable (if any) and return its return value.
@@ -119,16 +119,10 @@ module Protobuf
119
119
  # Value can either be a symbol/string indicating an instance method to call
120
120
  # or an object that responds to `call`.
121
121
  #
122
- def invoke_via_if?(rpc_method, filter)
123
- if_check = filter.fetch(:if) { lambda { |service| return true } }
124
- do_invoke = case
125
- when if_check.nil? then
126
- true
127
- else
128
- call_or_send(if_check)
129
- end
130
-
131
- return do_invoke
122
+ def invoke_via_if?(_rpc_method, filter)
123
+ if_check = filter.fetch(:if, nil)
124
+ return true if if_check.nil?
125
+ call_or_send(if_check)
132
126
  end
133
127
 
134
128
  # If the target rpc endpoint method is listed in the :only option,
@@ -138,8 +132,8 @@ module Protobuf
138
132
  # Value should be a symbol/string or an array of symbols/strings.
139
133
  #
140
134
  def invoke_via_only?(rpc_method, filter)
141
- only = [ filter.fetch(:only) { [] } ].flatten
142
- return only.empty? || only.include?(rpc_method)
135
+ only = [filter.fetch(:only) { [] }].flatten
136
+ only.empty? || only.include?(rpc_method)
143
137
  end
144
138
 
145
139
  # Invoke the given :unless callable (if any) and return the opposite
@@ -149,16 +143,10 @@ module Protobuf
149
143
  # Value can either be a symbol/string indicating an instance method to call
150
144
  # or an object that responds to `call`.
151
145
  #
152
- def invoke_via_unless?(rpc_method, filter)
153
- unless_check = filter.fetch(:unless) { lambda { |service| return false } }
154
- skip_invoke = case
155
- when unless_check.nil? then
156
- false
157
- else
158
- call_or_send(unless_check)
159
- end
160
-
161
- return ! skip_invoke
146
+ def invoke_via_unless?(_rpc_method, filter)
147
+ unless_check = filter.fetch(:unless, nil)
148
+ return true if unless_check.nil?
149
+ !call_or_send(unless_check)
162
150
  end
163
151
 
164
152
  def rescue_filters
@@ -176,7 +164,7 @@ module Protobuf
176
164
  end
177
165
  end
178
166
 
179
- return true
167
+ true
180
168
  end
181
169
 
182
170
  # Reverse build a chain of around filters. To implement an around chain,
@@ -209,17 +197,16 @@ module Protobuf
209
197
  # end
210
198
  #
211
199
  def run_around_filters(rpc_method)
212
- final = lambda { __send__(rpc_method) }
213
- filters[:around].reverse.inject(final) { |previous, filter|
200
+ final = -> { __send__(rpc_method) }
201
+ filters[:around].reverse.reduce(final) do |previous, filter|
214
202
  if invoke_filter?(rpc_method, filter)
215
- lambda { call_or_send(filter[:callable], &previous) }
203
+ -> { call_or_send(filter[:callable], &previous) }
216
204
  else
217
205
  previous
218
206
  end
219
- }.call
207
+ end.call
220
208
  end
221
209
 
222
-
223
210
  # Entry method to call each filter type in the appropriate order. This should
224
211
  # be used instead of the other run methods directly.
225
212
  #
@@ -240,10 +227,10 @@ module Protobuf
240
227
  begin
241
228
  yield
242
229
  rescue *rescue_filters.keys => ex
243
- callable = rescue_filters.fetch(ex.class) {
244
- mapped_klass = rescue_filters.keys.detect { |child_klass| ex.class < child_klass }
230
+ callable = rescue_filters.fetch(ex.class) do
231
+ mapped_klass = rescue_filters.keys.find { |child_klass| ex.class < child_klass }
245
232
  rescue_filters[mapped_klass]
246
- }
233
+ end
247
234
 
248
235
  call_or_send(callable, ex)
249
236
  end
@@ -254,20 +241,10 @@ module Protobuf
254
241
  # __send__ assuming that we respond_to it. Return the call's return value.
255
242
  #
256
243
  def call_or_send(callable, *args, &block)
257
- return_value = case
258
- when callable.respond_to?(:call) then
259
- callable.call(self, *args, &block)
260
- when respond_to?(callable, true) then
261
- __send__(callable, *args, &block)
262
- else
263
- raise "Object #{callable} is not callable"
264
- end
265
-
266
- return return_value
244
+ return callable.call(self, *args, &block) if callable.respond_to?(:call)
245
+ __send__(callable, *args, &block)
267
246
  end
268
-
269
247
  end
270
-
271
248
  end
272
249
  end
273
250
  end
@@ -1,6 +1,5 @@
1
1
  require 'date'
2
2
  require 'time'
3
- require 'protobuf/logger'
4
3
  require 'protobuf/statsd'
5
4
 
6
5
  module Protobuf
@@ -20,9 +19,7 @@ module Protobuf
20
19
  start
21
20
  end
22
21
 
23
- def client=(client_host)
24
- @client = client_host
25
- end
22
+ attr_writer :client
26
23
 
27
24
  def client
28
25
  @client || nil
@@ -37,7 +34,7 @@ module Protobuf
37
34
  end
38
35
 
39
36
  def server=(peer)
40
- @server = {:port => peer[0], :ip => peer[1]}
37
+ @server = { :port => peer[0], :ip => peer[1] }
41
38
  end
42
39
 
43
40
  def server
@@ -75,7 +72,7 @@ module Protobuf
75
72
  end
76
73
 
77
74
  def stopped?
78
- ! end_time.nil?
75
+ !end_time.nil?
79
76
  end
80
77
 
81
78
  def rpc
@@ -98,7 +95,7 @@ module Protobuf
98
95
  rpc,
99
96
  sizes,
100
97
  elapsed_time,
101
- @end_time.try(:iso8601)
98
+ @end_time.try(:iso8601),
102
99
  ].compact.join(' - ')
103
100
  end
104
101
 
@@ -134,4 +131,3 @@ module Protobuf
134
131
  end
135
132
  end
136
133
  end
137
-