protobuf 3.3.6 → 3.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (141) hide show
  1. checksums.yaml +7 -0
  2. data/.rubocop.yml +48 -0
  3. data/.rubocop_todo.yml +79 -0
  4. data/.travis.yml +12 -4
  5. data/Rakefile +14 -11
  6. data/bin/protoc-gen-ruby +0 -1
  7. data/bin/rpc_server +1 -0
  8. data/install-protobuf.sh +8 -0
  9. data/lib/protobuf.rb +30 -24
  10. data/lib/protobuf/cli.rb +35 -35
  11. data/lib/protobuf/code_generator.rb +11 -8
  12. data/lib/protobuf/decoder.rb +4 -5
  13. data/lib/protobuf/deprecation.rb +20 -0
  14. data/lib/protobuf/descriptors/google/protobuf/compiler/plugin.pb.rb +2 -0
  15. data/lib/protobuf/descriptors/google/protobuf/descriptor.pb.rb +2 -0
  16. data/lib/protobuf/encoder.rb +9 -4
  17. data/lib/protobuf/enum.rb +38 -54
  18. data/lib/protobuf/field.rb +2 -2
  19. data/lib/protobuf/field/base_field.rb +28 -32
  20. data/lib/protobuf/field/bool_field.rb +4 -4
  21. data/lib/protobuf/field/bytes_field.rb +5 -4
  22. data/lib/protobuf/field/double_field.rb +0 -1
  23. data/lib/protobuf/field/enum_field.rb +4 -7
  24. data/lib/protobuf/field/field_array.rb +3 -4
  25. data/lib/protobuf/field/fixed32_field.rb +1 -1
  26. data/lib/protobuf/field/fixed64_field.rb +0 -1
  27. data/lib/protobuf/field/float_field.rb +0 -1
  28. data/lib/protobuf/field/int32_field.rb +0 -1
  29. data/lib/protobuf/field/int64_field.rb +0 -1
  30. data/lib/protobuf/field/integer_field.rb +0 -1
  31. data/lib/protobuf/field/message_field.rb +2 -3
  32. data/lib/protobuf/field/sfixed32_field.rb +0 -1
  33. data/lib/protobuf/field/sfixed64_field.rb +0 -1
  34. data/lib/protobuf/field/signed_integer_field.rb +0 -1
  35. data/lib/protobuf/field/sint32_field.rb +0 -1
  36. data/lib/protobuf/field/sint64_field.rb +0 -1
  37. data/lib/protobuf/field/string_field.rb +0 -1
  38. data/lib/protobuf/field/uint32_field.rb +0 -1
  39. data/lib/protobuf/field/uint64_field.rb +0 -1
  40. data/lib/protobuf/field/varint_field.rb +0 -1
  41. data/lib/protobuf/generators/base.rb +1 -2
  42. data/lib/protobuf/generators/enum_generator.rb +1 -2
  43. data/lib/protobuf/generators/extension_generator.rb +1 -2
  44. data/lib/protobuf/generators/field_generator.rb +4 -5
  45. data/lib/protobuf/generators/file_generator.rb +22 -27
  46. data/lib/protobuf/generators/group_generator.rb +15 -16
  47. data/lib/protobuf/generators/message_generator.rb +13 -14
  48. data/lib/protobuf/generators/printable.rb +9 -10
  49. data/lib/protobuf/generators/service_generator.rb +1 -2
  50. data/lib/protobuf/lifecycle.rb +20 -33
  51. data/lib/protobuf/logging.rb +4 -6
  52. data/lib/protobuf/message.rb +22 -16
  53. data/lib/protobuf/message/fields.rb +14 -17
  54. data/lib/protobuf/message/serialization.rb +6 -5
  55. data/lib/protobuf/rpc/buffer.rb +10 -12
  56. data/lib/protobuf/rpc/client.rb +12 -12
  57. data/lib/protobuf/rpc/connectors/base.rb +4 -3
  58. data/lib/protobuf/rpc/connectors/common.rb +15 -17
  59. data/lib/protobuf/rpc/connectors/socket.rb +2 -2
  60. data/lib/protobuf/rpc/connectors/zmq.rb +118 -108
  61. data/lib/protobuf/rpc/dynamic_discovery.pb.rb +2 -0
  62. data/lib/protobuf/rpc/env.rb +12 -12
  63. data/lib/protobuf/rpc/error.rb +1 -1
  64. data/lib/protobuf/rpc/error/client_error.rb +4 -4
  65. data/lib/protobuf/rpc/error/server_error.rb +6 -6
  66. data/lib/protobuf/rpc/middleware/exception_handler.rb +1 -1
  67. data/lib/protobuf/rpc/middleware/logger.rb +3 -3
  68. data/lib/protobuf/rpc/middleware/request_decoder.rb +5 -5
  69. data/lib/protobuf/rpc/middleware/response_encoder.rb +3 -3
  70. data/lib/protobuf/rpc/rpc.pb.rb +2 -0
  71. data/lib/protobuf/rpc/servers/socket/server.rb +75 -65
  72. data/lib/protobuf/rpc/servers/socket/worker.rb +2 -2
  73. data/lib/protobuf/rpc/servers/socket_runner.rb +12 -6
  74. data/lib/protobuf/rpc/servers/zmq/broker.rb +10 -6
  75. data/lib/protobuf/rpc/servers/zmq/server.rb +20 -26
  76. data/lib/protobuf/rpc/servers/zmq/util.rb +7 -7
  77. data/lib/protobuf/rpc/servers/zmq/worker.rb +5 -7
  78. data/lib/protobuf/rpc/servers/zmq_runner.rb +14 -3
  79. data/lib/protobuf/rpc/service.rb +15 -15
  80. data/lib/protobuf/rpc/service_directory.rb +7 -11
  81. data/lib/protobuf/rpc/service_dispatcher.rb +3 -3
  82. data/lib/protobuf/rpc/service_filters.rb +27 -28
  83. data/lib/protobuf/rpc/stat.rb +4 -7
  84. data/lib/protobuf/socket.rb +0 -1
  85. data/lib/protobuf/tasks/compile.rake +2 -2
  86. data/lib/protobuf/version.rb +1 -1
  87. data/protobuf.gemspec +20 -4
  88. data/spec/benchmark/tasks.rb +49 -23
  89. data/spec/bin/protoc-gen-ruby_spec.rb +11 -6
  90. data/spec/encoding/all_types_spec.rb +91 -77
  91. data/spec/encoding/extreme_values_spec.rb +0 -0
  92. data/spec/functional/socket_server_spec.rb +9 -10
  93. data/spec/functional/zmq_server_spec.rb +21 -19
  94. data/spec/lib/protobuf/cli_spec.rb +20 -20
  95. data/spec/lib/protobuf/code_generator_spec.rb +6 -6
  96. data/spec/lib/protobuf/enum_spec.rb +57 -31
  97. data/spec/lib/protobuf/field/float_field_spec.rb +2 -2
  98. data/spec/lib/protobuf/field/int32_field_spec.rb +1 -1
  99. data/spec/lib/protobuf/field/string_field_spec.rb +7 -8
  100. data/spec/lib/protobuf/field_spec.rb +3 -6
  101. data/spec/lib/protobuf/generators/base_spec.rb +6 -6
  102. data/spec/lib/protobuf/generators/enum_generator_spec.rb +22 -17
  103. data/spec/lib/protobuf/generators/extension_generator_spec.rb +8 -9
  104. data/spec/lib/protobuf/generators/field_generator_spec.rb +14 -11
  105. data/spec/lib/protobuf/generators/file_generator_spec.rb +7 -4
  106. data/spec/lib/protobuf/generators/service_generator_spec.rb +14 -11
  107. data/spec/lib/protobuf/lifecycle_spec.rb +9 -4
  108. data/spec/lib/protobuf/message_spec.rb +63 -35
  109. data/spec/lib/protobuf/optionable_spec.rb +3 -3
  110. data/spec/lib/protobuf/rpc/client_spec.rb +2 -2
  111. data/spec/lib/protobuf/rpc/connector_spec.rb +1 -1
  112. data/spec/lib/protobuf/rpc/connectors/base_spec.rb +6 -6
  113. data/spec/lib/protobuf/rpc/connectors/common_spec.rb +26 -18
  114. data/spec/lib/protobuf/rpc/connectors/socket_spec.rb +4 -4
  115. data/spec/lib/protobuf/rpc/connectors/zmq_spec.rb +11 -9
  116. data/spec/lib/protobuf/rpc/middleware/exception_handler_spec.rb +2 -2
  117. data/spec/lib/protobuf/rpc/middleware/logger_spec.rb +7 -7
  118. data/spec/lib/protobuf/rpc/middleware/request_decoder_spec.rb +14 -14
  119. data/spec/lib/protobuf/rpc/middleware/response_encoder_spec.rb +5 -5
  120. data/spec/lib/protobuf/rpc/servers/socket_server_spec.rb +1 -1
  121. data/spec/lib/protobuf/rpc/servers/zmq/server_spec.rb +9 -7
  122. data/spec/lib/protobuf/rpc/servers/zmq/util_spec.rb +9 -9
  123. data/spec/lib/protobuf/rpc/servers/zmq/worker_spec.rb +2 -2
  124. data/spec/lib/protobuf/rpc/service_directory_spec.rb +24 -23
  125. data/spec/lib/protobuf/rpc/service_dispatcher_spec.rb +4 -4
  126. data/spec/lib/protobuf/rpc/service_filters_spec.rb +84 -51
  127. data/spec/lib/protobuf/rpc/service_spec.rb +15 -14
  128. data/spec/lib/protobuf/rpc/stat_spec.rb +1 -1
  129. data/spec/lib/protobuf_spec.rb +9 -9
  130. data/spec/spec_helper.rb +7 -19
  131. data/spec/support/server.rb +29 -59
  132. data/spec/support/test/defaults.pb.rb +2 -0
  133. data/spec/support/test/enum.pb.rb +2 -0
  134. data/spec/support/test/extended.pb.rb +2 -0
  135. data/spec/support/test/google_unittest_import.pb.rb +2 -0
  136. data/spec/support/test/google_unittest_import_public.pb.rb +2 -0
  137. data/spec/support/test/multi_field_extensions.pb.rb +2 -0
  138. data/spec/support/test/resource.pb.rb +2 -0
  139. data/spec/support/test/resource_service.rb +17 -20
  140. metadata +153 -112
  141. data/lib/protobuf/deprecator.rb +0 -42
@@ -26,7 +26,7 @@ module Protobuf
26
26
 
27
27
  loop do
28
28
  process_local_queue
29
- rc = @poller.poll(500)
29
+ rc = @poller.poll(broker_polling_milliseconds)
30
30
 
31
31
  # The server was shutdown and no requests are pending
32
32
  break if rc == 0 && !running? && @server.workers.empty?
@@ -51,11 +51,15 @@ module Protobuf
51
51
  @backend_poll_weight ||= [ENV["PB_ZMQ_SERVER_BACKEND_POLL_WEIGHT"].to_i, 1].max
52
52
  end
53
53
 
54
+ def broker_polling_milliseconds
55
+ @broker_polling_milliseconds ||= [ENV["PB_ZMQ_BROKER_POLLING_MILLISECONDS"].to_i, 500].max
56
+ end
57
+
54
58
  def check_and_process_backend
55
59
  readables_include_backend = @poller.readables.include?(@backend_socket)
56
60
  message_count_read_from_backend = 0
57
61
 
58
- while readables_include_backend && message_count_read_from_backend < backend_poll_weight do
62
+ while readables_include_backend && message_count_read_from_backend < backend_poll_weight
59
63
  message_count_read_from_backend += 1
60
64
  process_backend
61
65
  @poller.poll_nonblock
@@ -67,7 +71,7 @@ module Protobuf
67
71
  readables_include_frontend = @poller.readables.include?(@frontend_socket)
68
72
  message_count_read_from_frontend = 0
69
73
 
70
- while readables_include_frontend && message_count_read_from_frontend < frontend_poll_weight do
74
+ while readables_include_frontend && message_count_read_from_frontend < frontend_poll_weight
71
75
  message_count_read_from_frontend += 1
72
76
  process_frontend
73
77
  break unless local_queue_available? # no need to read frontend just to throw away messages, will prioritize backend when full
@@ -121,7 +125,7 @@ module Protobuf
121
125
  end
122
126
 
123
127
  def process_backend
124
- worker, ignore, *frames = read_from_backend
128
+ worker, _ignore, *frames = read_from_backend
125
129
 
126
130
  @idle_workers << worker
127
131
 
@@ -141,9 +145,9 @@ module Protobuf
141
145
  end
142
146
  else
143
147
  if @idle_workers.empty?
144
- local_queue << [address, ::Protobuf::Rpc::Zmq::EMPTY_STRING, message ].concat(frames)
148
+ local_queue << [address, ::Protobuf::Rpc::Zmq::EMPTY_STRING, message].concat(frames)
145
149
  else
146
- write_to_backend([@idle_workers.shift, ::Protobuf::Rpc::Zmq::EMPTY_STRING].concat([address, ::Protobuf::Rpc::Zmq::EMPTY_STRING, message ]).concat(frames))
150
+ write_to_backend([@idle_workers.shift, ::Protobuf::Rpc::Zmq::EMPTY_STRING].concat([address, ::Protobuf::Rpc::Zmq::EMPTY_STRING, message]).concat(frames))
147
151
  end
148
152
  end
149
153
  end
@@ -62,15 +62,10 @@ module Protobuf
62
62
  end
63
63
 
64
64
  def beacon_port
65
- unless @beacon_port
66
- unless port = options[:beacon_port]
67
- port = ::Protobuf::Rpc::ServiceDirectory.port
68
- end
69
-
70
- @beacon_port = port.to_i
71
- end
72
-
73
- @beacon_port
65
+ @beacon_port ||= options.fetch(
66
+ :beacon_port,
67
+ ::Protobuf::Rpc::ServiceDirectory.port,
68
+ ).to_i
74
69
  end
75
70
 
76
71
  def beacon_uri
@@ -84,7 +79,7 @@ module Protobuf
84
79
  def broadcast_flatline
85
80
  flatline = ::Protobuf::Rpc::DynamicDiscovery::Beacon.new(
86
81
  :beacon_type => ::Protobuf::Rpc::DynamicDiscovery::BeaconType::FLATLINE,
87
- :server => self.to_proto
82
+ :server => to_proto,
88
83
  )
89
84
 
90
85
  @beacon_socket.send(flatline.encode, 0)
@@ -95,7 +90,7 @@ module Protobuf
95
90
 
96
91
  heartbeat = ::Protobuf::Rpc::DynamicDiscovery::Beacon.new(
97
92
  :beacon_type => ::Protobuf::Rpc::DynamicDiscovery::BeaconType::HEARTBEAT,
98
- :server => self.to_proto
93
+ :server => to_proto,
99
94
  )
100
95
 
101
96
  @beacon_socket.send(heartbeat.encode, 0)
@@ -129,7 +124,7 @@ module Protobuf
129
124
  end
130
125
 
131
126
  def inproc?
132
- !!self.options[:zmq_inproc]
127
+ !!options[:zmq_inproc]
133
128
  end
134
129
 
135
130
  def maintenance_timeout
@@ -167,7 +162,7 @@ module Protobuf
167
162
  @last_reaping = Time.now.to_i
168
163
 
169
164
  @workers.keep_if do |worker|
170
- worker.alive? or worker.join && false
165
+ worker.alive? || worker.join && false
171
166
  end
172
167
  end
173
168
 
@@ -221,10 +216,6 @@ module Protobuf
221
216
  @last_reaping = @last_beacon = @timeout = nil
222
217
  end
223
218
 
224
- def total_workers
225
- @total_workers ||= [@options[:threads].to_i, 1].max
226
- end
227
-
228
219
  def timeout
229
220
  if @timeout.nil?
230
221
  @timeout = 0
@@ -233,13 +224,17 @@ module Protobuf
233
224
  end
234
225
  end
235
226
 
227
+ def total_workers
228
+ @total_workers ||= [@options[:threads].to_i, 1].max
229
+ end
230
+
236
231
  def to_proto
237
232
  @proto ||= ::Protobuf::Rpc::DynamicDiscovery::Server.new(
238
233
  :uuid => uuid,
239
234
  :address => frontend_ip,
240
235
  :port => frontend_port.to_s,
241
236
  :ttl => (beacon_interval * 1.5).ceil,
242
- :services => ::Protobuf::Rpc::Service.implemented_services
237
+ :services => ::Protobuf::Rpc::Service.implemented_services,
243
238
  )
244
239
  end
245
240
 
@@ -256,14 +251,13 @@ module Protobuf
256
251
  start_missing_workers
257
252
  end
258
253
 
259
- if broadcast_heartbeat?
260
- if all_workers_busy? && options[:broadcast_busy]
261
- broadcast_flatline
262
- else
263
- broadcast_heartbeat
264
- end
265
- end
254
+ next unless broadcast_heartbeat?
266
255
 
256
+ if options[:broadcast_busy] && all_workers_busy?
257
+ broadcast_flatline
258
+ else
259
+ broadcast_heartbeat
260
+ end
267
261
  end
268
262
  end
269
263
 
@@ -301,7 +295,7 @@ module Protobuf
301
295
  begin
302
296
  ::Protobuf::Rpc::Zmq::Worker.new(server).run
303
297
  rescue => e
304
- message = "Worker failed: #{e.inspect}\n #{e.backtrace.join($/)}"
298
+ message = "Worker failed: #{e.inspect}\n #{e.backtrace.join($INPUT_RECORD_SEPARATOR)}"
305
299
  $stderr.puts(message)
306
300
  logger.error { message }
307
301
  end
@@ -19,13 +19,13 @@ module Protobuf
19
19
  end
20
20
 
21
21
  def zmq_error_check(return_code, source = nil)
22
- unless ::ZMQ::Util.resultcode_ok?(return_code)
23
- raise <<-ERROR
24
- Last ZMQ API call #{source ? "to #{source}" : ""} failed with "#{::ZMQ::Util.error_string}".
22
+ return if ::ZMQ::Util.resultcode_ok?(return_code)
25
23
 
26
- #{caller(1).join($/)}
27
- ERROR
28
- end
24
+ fail <<-ERROR
25
+ Last ZMQ API call #{source ? "to #{source}" : ''} failed with "#{::ZMQ::Util.error_string}".
26
+
27
+ #{caller(1).join($INPUT_RECORD_SEPARATOR)}
28
+ ERROR
29
29
  end
30
30
 
31
31
  def log_signature
@@ -38,7 +38,7 @@ module Protobuf
38
38
  end
39
39
 
40
40
  def resolve_ip(hostname)
41
- ::Resolv.getaddresses(hostname).detect do |address|
41
+ ::Resolv.getaddresses(hostname).find do |address|
42
42
  address =~ ADDRESS_MATCH
43
43
  end
44
44
  end
@@ -46,13 +46,11 @@ module Protobuf
46
46
  loop do
47
47
  rc = poller.poll(500)
48
48
 
49
- # The server was shutdown and no requests are pending
50
- break if rc == 0 && !running?
51
-
52
- # Something went wrong
53
- break if rc == -1
54
-
55
- if rc > 0
49
+ if rc == 0 && !running?
50
+ break # The server was shutdown and no requests are pending
51
+ elsif rc == -1
52
+ break # Something went wrong
53
+ elsif rc > 0
56
54
  ::Thread.current[:busy] = true
57
55
  process_request
58
56
  ::Thread.current[:busy] = false
@@ -1,4 +1,5 @@
1
1
  require 'ostruct'
2
+ require 'thread'
2
3
 
3
4
  module Protobuf
4
5
  module Rpc
@@ -12,9 +13,8 @@ module Protobuf
12
13
  when options.respond_to?(:to_hash) then
13
14
  options.to_hash
14
15
  else
15
- raise "Cannot parser Zmq Server - server options"
16
+ fail "Cannot parser Zmq Server - server options"
16
17
  end
17
-
18
18
  end
19
19
 
20
20
  def run
@@ -36,6 +36,17 @@ module Protobuf
36
36
  private
37
37
 
38
38
  def register_signals
39
+ trap(:TRAP) do
40
+ ::Thread.list.each do |thread|
41
+ logger.info do
42
+ <<-THREAD_TRACE
43
+ #{thread.inspect}:
44
+ #{thread.backtrace.join($INPUT_RECORD_SEPARATOR)}"
45
+ THREAD_TRACE
46
+ end
47
+ end
48
+ end
49
+
39
50
  trap(:TTIN) do
40
51
  @server.add_worker
41
52
  logger.info { "Increased worker size to: #{@server.total_workers}" }
@@ -43,7 +54,7 @@ module Protobuf
43
54
 
44
55
  trap(:TTOU) do
45
56
  logger.info { "Current worker size: #{@server.workers.size}" }
46
- logger.info { "Current worker size: #{@server.busy_worker_count}" }
57
+ logger.info { "Current busy worker size: #{@server.busy_worker_count}" }
47
58
  end
48
59
  end
49
60
  end
@@ -54,19 +54,19 @@ module Protobuf
54
54
  # The host location of the service.
55
55
  #
56
56
  def self.host
57
- @_host ||= DEFAULT_HOST
57
+ @host ||= DEFAULT_HOST
58
58
  end
59
59
 
60
60
  # The host location setter.
61
61
  #
62
- def self.host=(new_host)
63
- @_host = new_host
62
+ class << self
63
+ attr_writer :host
64
64
  end
65
65
 
66
66
  # An array of defined service classes that contain implementation
67
67
  # code
68
68
  def self.implemented_services
69
- classes = (self.subclasses || []).select do |subclass|
69
+ classes = (subclasses || []).select do |subclass|
70
70
  subclass.rpcs.any? do |(name, _)|
71
71
  subclass.method_defined? name
72
72
  end
@@ -88,13 +88,13 @@ module Protobuf
88
88
  # The port of the service on the destination server.
89
89
  #
90
90
  def self.port
91
- @_port ||= DEFAULT_PORT
91
+ @port ||= DEFAULT_PORT
92
92
  end
93
93
 
94
94
  # The port location setter.
95
95
  #
96
- def self.port=(new_port)
97
- @_port = new_port
96
+ class << self
97
+ attr_writer :port
98
98
  end
99
99
 
100
100
  # Define an rpc method with the given request and response types.
@@ -108,7 +108,7 @@ module Protobuf
108
108
  # Hash containing the set of methods defined via `rpc`.
109
109
  #
110
110
  def self.rpcs
111
- @_rpcs ||= {}
111
+ @rpcs ||= {}
112
112
  end
113
113
 
114
114
  # Check if the given method name is a known rpc endpoint.
@@ -126,13 +126,13 @@ module Protobuf
126
126
  # is why we wrap the method call).
127
127
  #
128
128
  def callable_rpc_method(method_name)
129
- lambda { run_filters(method_name) }
129
+ -> { run_filters(method_name) }
130
130
  end
131
131
 
132
132
  # Response object for this rpc cycle. Not assignable.
133
133
  #
134
134
  def response
135
- @_response ||= response_type.new
135
+ @response ||= response_type.new
136
136
  end
137
137
 
138
138
  # Convenience method to get back to class method.
@@ -147,10 +147,10 @@ module Protobuf
147
147
  self.class.rpcs
148
148
  end
149
149
 
150
- private
150
+ private
151
151
 
152
152
  def request_type
153
- @_request_type ||= env.request_type
153
+ @request_type ||= env.request_type
154
154
  end
155
155
 
156
156
  # Sugar to make an rpc method feel like a controller method.
@@ -158,19 +158,19 @@ module Protobuf
158
158
  # object returned by the response reader.
159
159
  #
160
160
  def respond_with(candidate)
161
- @_response = candidate
161
+ @response = candidate
162
162
  end
163
163
  alias_method :return_from_whence_you_came, :respond_with
164
164
 
165
165
  def response_type
166
- @_response_type ||= env.response_type
166
+ @response_type ||= env.response_type
167
167
  end
168
168
 
169
169
  # Automatically fail a service method.
170
170
  #
171
171
  def rpc_failed(message)
172
172
  message = message.message if message.respond_to?(:message)
173
- raise RpcFailed.new(message)
173
+ fail RpcFailed, message
174
174
  end
175
175
  end
176
176
 
@@ -17,7 +17,7 @@ module Protobuf
17
17
  DEFAULT_PORT = 53000
18
18
  DEFAULT_TIMEOUT = 1
19
19
 
20
- class Listing < Delegator
20
+ class Listing < SimpleDelegator
21
21
  attr_reader :expires_at
22
22
 
23
23
  def initialize(server)
@@ -45,13 +45,9 @@ module Protobuf
45
45
  end
46
46
 
47
47
  def update(server)
48
- @server = server
48
+ __setobj__(server)
49
49
  @expires_at = Time.now.to_i + ttl
50
50
  end
51
-
52
- def __getobj__
53
- @server
54
- end
55
51
  end
56
52
 
57
53
  # Class Methods
@@ -70,11 +66,11 @@ module Protobuf
70
66
 
71
67
  def self.start
72
68
  yield(self) if block_given?
73
- self.instance.start
69
+ instance.start
74
70
  end
75
71
 
76
72
  def self.stop
77
- self.instance.stop
73
+ instance.stop
78
74
  end
79
75
 
80
76
  #
@@ -117,7 +113,7 @@ module Protobuf
117
113
  unless running?
118
114
  init_socket
119
115
  logger.info { sign_message("listening to udp://#{self.class.address}:#{self.class.port}") }
120
- @thread = Thread.new { self.send(:run) }
116
+ @thread = Thread.new { send(:run) }
121
117
  end
122
118
 
123
119
  self
@@ -200,11 +196,11 @@ module Protobuf
200
196
  end
201
197
 
202
198
  def remove_listing(uuid)
203
- listing = @listings_by_uuid[uuid] or return
199
+ listing = @listings_by_uuid[uuid] || return
204
200
 
205
201
  logger.debug { sign_message("Removing listing: #{listing.inspect}") }
206
202
 
207
- @listings_by_service.each do |service, listings|
203
+ @listings_by_service.each_value do |listings|
208
204
  listings.delete(listing)
209
205
  end
210
206
 
@@ -7,7 +7,7 @@ module Protobuf
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
 
@@ -22,12 +22,12 @@ module Protobuf
22
22
  @rpc_service ||= env.rpc_service.new(env)
23
23
  end
24
24
 
25
- private
25
+ private
26
26
 
27
27
  # Call the given service method.
28
28
  def dispatch_rpc_request
29
29
  unless rpc_service.respond_to?(method_name)
30
- raise MethodNotFound.new("#{service_name}##{method_name} is not a publicly defined method.")
30
+ fail MethodNotFound, "#{service_name}##{method_name} is not a publicly defined method."
31
31
  end
32
32
 
33
33
  rpc_service.callable_rpc_method(method_name).call
@@ -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,7 +94,7 @@ 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) \
97
+ invoke_via_only?(rpc_method, filter) \
98
98
  && invoke_via_except?(rpc_method, filter) \
99
99
  && invoke_via_if?(rpc_method, filter) \
100
100
  && invoke_via_unless?(rpc_method, filter)
@@ -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,8 +119,8 @@ 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 } }
122
+ def invoke_via_if?(_rpc_method, filter)
123
+ if_check = filter.fetch(:if) { ->(_service) { return true } }
124
124
  do_invoke = case
125
125
  when if_check.nil? then
126
126
  true
@@ -128,7 +128,7 @@ module Protobuf
128
128
  call_or_send(if_check)
129
129
  end
130
130
 
131
- return do_invoke
131
+ do_invoke
132
132
  end
133
133
 
134
134
  # If the target rpc endpoint method is listed in the :only option,
@@ -138,8 +138,8 @@ module Protobuf
138
138
  # Value should be a symbol/string or an array of symbols/strings.
139
139
  #
140
140
  def invoke_via_only?(rpc_method, filter)
141
- only = [ filter.fetch(:only) { [] } ].flatten
142
- return only.empty? || only.include?(rpc_method)
141
+ only = [filter.fetch(:only) { [] }].flatten
142
+ only.empty? || only.include?(rpc_method)
143
143
  end
144
144
 
145
145
  # Invoke the given :unless callable (if any) and return the opposite
@@ -149,8 +149,8 @@ module Protobuf
149
149
  # Value can either be a symbol/string indicating an instance method to call
150
150
  # or an object that responds to `call`.
151
151
  #
152
- def invoke_via_unless?(rpc_method, filter)
153
- unless_check = filter.fetch(:unless) { lambda { |service| return false } }
152
+ def invoke_via_unless?(_rpc_method, filter)
153
+ unless_check = filter.fetch(:unless) { ->(_service) { return false } }
154
154
  skip_invoke = case
155
155
  when unless_check.nil? then
156
156
  false
@@ -158,7 +158,7 @@ module Protobuf
158
158
  call_or_send(unless_check)
159
159
  end
160
160
 
161
- return ! skip_invoke
161
+ !skip_invoke
162
162
  end
163
163
 
164
164
  def rescue_filters
@@ -176,7 +176,7 @@ module Protobuf
176
176
  end
177
177
  end
178
178
 
179
- return true
179
+ true
180
180
  end
181
181
 
182
182
  # Reverse build a chain of around filters. To implement an around chain,
@@ -209,17 +209,16 @@ module Protobuf
209
209
  # end
210
210
  #
211
211
  def run_around_filters(rpc_method)
212
- final = lambda { __send__(rpc_method) }
213
- filters[:around].reverse.inject(final) { |previous, filter|
212
+ final = -> { __send__(rpc_method) }
213
+ filters[:around].reverse.reduce(final) do |previous, filter|
214
214
  if invoke_filter?(rpc_method, filter)
215
- lambda { call_or_send(filter[:callable], &previous) }
215
+ -> { call_or_send(filter[:callable], &previous) }
216
216
  else
217
217
  previous
218
218
  end
219
- }.call
219
+ end.call
220
220
  end
221
221
 
222
-
223
222
  # Entry method to call each filter type in the appropriate order. This should
224
223
  # be used instead of the other run methods directly.
225
224
  #
@@ -240,10 +239,10 @@ module Protobuf
240
239
  begin
241
240
  yield
242
241
  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 }
242
+ callable = rescue_filters.fetch(ex.class) do
243
+ mapped_klass = rescue_filters.keys.find { |child_klass| ex.class < child_klass }
245
244
  rescue_filters[mapped_klass]
246
- }
245
+ end
247
246
 
248
247
  call_or_send(callable, ex)
249
248
  end
@@ -260,10 +259,10 @@ module Protobuf
260
259
  when respond_to?(callable, true) then
261
260
  __send__(callable, *args, &block)
262
261
  else
263
- raise "Object #{callable} is not callable"
262
+ fail "Object #{callable} is not callable"
264
263
  end
265
264
 
266
- return return_value
265
+ return_value
267
266
  end
268
267
 
269
268
  end