protobuf 3.3.6 → 3.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.
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