protobuffy 3.6.0 → 4.0.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.
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
-