protobuf 1.3.0 → 1.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.
data/.gitignore CHANGED
@@ -9,3 +9,4 @@ doc
9
9
  .yardoc
10
10
  .DS_Store
11
11
  *.bin
12
+ Gemfile.lock
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- protobuf (1.3.0)
4
+ protobuf (1.4.0)
5
5
  eventmachine
6
6
  eventually
7
7
  ffi-rzmq
@@ -10,46 +10,39 @@ PATH
10
10
  GEM
11
11
  remote: http://rubygems.org/
12
12
  specs:
13
- coderay (1.0.5)
13
+ coderay (1.0.7)
14
14
  diff-lcs (1.1.3)
15
- eventmachine (0.12.10)
15
+ eventmachine (1.0.0)
16
16
  eventually (0.1.1)
17
- ffi (1.0.11)
18
- ffi-rzmq (0.9.3)
17
+ ffi (1.1.5)
18
+ ffi-rzmq (0.9.6)
19
19
  ffi
20
- json_pure (1.7.3)
21
- method_source (0.7.1)
22
- multi_json (1.2.0)
23
- pry (0.9.8.4)
20
+ json_pure (1.7.5)
21
+ method_source (0.8)
22
+ multi_json (1.3.6)
23
+ pry (0.9.10)
24
24
  coderay (~> 1.0.5)
25
- method_source (~> 0.7.1)
26
- slop (>= 2.4.4, < 3)
27
- pry (0.9.8.4-java)
28
- coderay (~> 1.0.5)
29
- method_source (~> 0.7.1)
30
- slop (>= 2.4.4, < 3)
31
- spoon (~> 0.0)
32
- pry-nav (0.2.0)
33
- pry (~> 0.9.8.1)
25
+ method_source (~> 0.8)
26
+ slop (~> 3.3.1)
27
+ pry-nav (0.2.2)
28
+ pry (~> 0.9.10)
34
29
  rake (0.9.2.2)
35
- rspec (2.9.0)
36
- rspec-core (~> 2.9.0)
37
- rspec-expectations (~> 2.9.0)
38
- rspec-mocks (~> 2.9.0)
39
- rspec-core (2.9.0)
40
- rspec-expectations (2.9.0)
30
+ rspec (2.11.0)
31
+ rspec-core (~> 2.11.0)
32
+ rspec-expectations (~> 2.11.0)
33
+ rspec-mocks (~> 2.11.0)
34
+ rspec-core (2.11.1)
35
+ rspec-expectations (2.11.3)
41
36
  diff-lcs (~> 1.1.3)
42
- rspec-mocks (2.9.0)
43
- simplecov (0.6.1)
37
+ rspec-mocks (2.11.2)
38
+ simplecov (0.6.4)
44
39
  multi_json (~> 1.0)
45
40
  simplecov-html (~> 0.5.3)
46
41
  simplecov-html (0.5.3)
47
- slop (2.4.4)
48
- spoon (0.0.1)
49
- yard (0.7.5)
42
+ slop (3.3.3)
43
+ yard (0.8.2.1)
50
44
 
51
45
  PLATFORMS
52
- java
53
46
  ruby
54
47
 
55
48
  DEPENDENCIES
data/bin/rpc_server CHANGED
@@ -12,6 +12,8 @@ require 'protobuf/rpc/servers/zmq_runner'
12
12
  server = OpenStruct.new({
13
13
  :app => nil,
14
14
  :env => ENV['RPC_SERVER_ENV'] || 'development',
15
+ :gc_pause_during_request => false,
16
+ :gc_pause_during_serialization => false,
15
17
  :host => '127.0.0.1',
16
18
  :port => 9595,
17
19
  :backlog => 100,
@@ -76,6 +78,14 @@ parser = OptionParser.new do |opts|
76
78
 
77
79
  server.runner = ::Protobuf::Rpc::ZmqRunner
78
80
  end
81
+
82
+ opts.on("--[no-]gc-pause-request", "Enable/Disable GC pause during request.") do |v|
83
+ server.gc_pause_during_request = v
84
+ end
85
+
86
+ opts.on("--[no-]gc-pause-serialization", "Enable/Disable GC pause during serialization.") do |v|
87
+ server.gc_pause_during_serialization = v
88
+ end
79
89
 
80
90
  opts.on("-d", "--[no-]debug", "Debug Mode. Override log level to DEBUG.") do |v|
81
91
  server.debug = v
@@ -120,6 +130,13 @@ elsif(ENV['PB_SERVER_TYPE'] =~ /socket/i)
120
130
  server.runner = ::Protobuf::Rpc::SocketRunner
121
131
  end
122
132
 
133
+ ##
134
+ # Setup GC settings
135
+ #
136
+ ::Protobuf::Rpc::GC_PAUSE_REQUEST = server.gc_pause_during_request
137
+ # If we pause during request we don't need to pause in serialization
138
+ ::Protobuf::Rpc::GC_PAUSE_SERIALIZATION = (!server.gc_pause_during_request && server.gc_pause_during_serialization)
139
+
123
140
  # protobuf.rb picks up PB_CLIENT_TYPE and PB_SERVER_TYPE and does something
124
141
  # useful with them
125
142
  require 'protobuf'
@@ -141,11 +158,11 @@ begin
141
158
  end
142
159
 
143
160
  # Configure the ::Protobuf::Logger
144
- ::Protobuf::Logger.configure :file => server.log, :level => server.debug ? ::Logger::DEBUG : server.level
161
+ ::Protobuf::Logger.configure(:file => server.log, :level => server.debug ? ::Logger::DEBUG : server.level)
145
162
 
146
163
  # Output the server opts
147
- ::Protobuf::Logger.debug 'Debugging options:'
148
- ::Protobuf::Logger.debug server.inspect
164
+ ::Protobuf::Logger.debug { 'Debugging options:' }
165
+ ::Protobuf::Logger.debug { server.inspect }
149
166
 
150
167
  # Set the name of the process
151
168
  $0 = 'rpc_server %s:%d %s' % [server.host, server.port, server.app]
@@ -156,8 +173,8 @@ begin
156
173
  server.runner.run(server)
157
174
  rescue
158
175
  msg = 'ERROR: RPC Server failed to start. %s' % $!.inspect
159
- $stderr.puts msg, *($!.backtrace)
160
- ::Protobuf::Logger.error msg
161
- ::Protobuf::Logger.error $!.backtrace.join("\n")
176
+ $stderr.puts(msg, *($!.backtrace))
177
+ ::Protobuf::Logger.error { msg }
178
+ ::Protobuf::Logger.error { $!.backtrace.join("\n") }
162
179
  exit 1
163
180
  end
@@ -4,7 +4,7 @@ require 'protobuf/message/protoable'
4
4
 
5
5
  module Protobuf
6
6
  class Enum
7
- class <<self
7
+ class << self
8
8
  include Protoable
9
9
 
10
10
  attr_reader :values
@@ -120,28 +120,26 @@ module Protobuf
120
120
  raise NotImplementedError, "#{self.class.name}\#encode"
121
121
  end
122
122
 
123
- # Merge +value+ with +message_instance+.
124
- def merge(message_instance, value)
125
- if repeated?
126
- merge_array(message_instance, value)
127
- else
128
- merge_value(message_instance, value)
129
- end
123
+ def extension?
124
+ !!@extension
130
125
  end
131
126
 
132
127
  # Is this a repeated field?
133
128
  def repeated?
134
- @rule == :repeated
129
+ return @_repeated unless @_repeated.nil?
130
+ @_repeated = (@rule == :repeated)
135
131
  end
136
132
 
137
133
  # Is this a required field?
138
134
  def required?
139
- @rule == :required
135
+ return @_required unless @_required.nil?
136
+ @_required = (@rule == :required)
140
137
  end
141
138
 
142
139
  # Is this a optional field?
143
140
  def optional?
144
- @rule == :optional
141
+ return @_optional unless @_optional.nil?
142
+ @_optional = (@rule == :optional)
145
143
  end
146
144
 
147
145
  # Is this a packed repeated field?
@@ -183,11 +181,12 @@ module Protobuf
183
181
  field = self
184
182
  @message_class.class_eval do
185
183
  define_method(field.name) do
186
- if @values.has_key?(field.name)
187
- @values[field.name]
188
- else
189
- field.default_value
190
- end
184
+ @values[field.name] || field.default_value
185
+ # if @values.has_key?(field.name)
186
+ # @values[field.name]
187
+ # else
188
+ # field.default_value
189
+ # end
191
190
  end
192
191
  end
193
192
  end
@@ -214,14 +213,6 @@ module Protobuf
214
213
  end
215
214
  end
216
215
 
217
- def merge_array(message_instance, value)
218
- message_instance.__send__(@name).concat(value)
219
- end
220
-
221
- def merge_value(message_instance, value)
222
- message_instance.__send__("#{@name}=", value)
223
- end
224
-
225
216
  def typed_default_value
226
217
  if @default.nil?
227
218
  self.class.default
@@ -365,7 +356,7 @@ module Protobuf
365
356
  UINT32_MAX = 2**32 - 1
366
357
  UINT64_MAX = 2**64 - 1
367
358
 
368
- class <<self
359
+ class << self
369
360
  def default
370
361
  0
371
362
  end
@@ -638,9 +629,6 @@ module Protobuf
638
629
  end
639
630
  end
640
631
 
641
- def merge_value(message_instance, value)
642
- message_instance.__send__(@name).merge_from(value)
643
- end
644
632
  end
645
633
 
646
634
 
@@ -28,6 +28,14 @@ module Protobuf
28
28
  class << self
29
29
  include Protoable
30
30
 
31
+ def all_fields
32
+ @all_fields ||= begin
33
+ fields_hash = fields.merge(extension_fields)
34
+ ordered_keys = fields_hash.keys.sort
35
+ ordered_keys.map { |key| fields_hash[key] }
36
+ end
37
+ end
38
+
31
39
  # Reserve field numbers for extensions. Don't use this method directly.
32
40
  def extensions(range)
33
41
  @extension_fields = ExtensionFields.new(range)
@@ -48,33 +56,58 @@ module Protobuf
48
56
  define_field(:repeated, type, name, tag, options)
49
57
  end
50
58
 
59
+ def descriptor
60
+ @descriptor ||= Descriptor::Descriptor.new(self)
61
+ end
62
+
51
63
  # Define a field. Don't use this method directly.
52
64
  def define_field(rule, type, fname, tag, options)
53
65
  field_hash = options[:extension] ? extension_fields : fields
66
+ field_name_hash = options[:extension] ? extension_fields_by_name : fields_by_name
67
+
54
68
  if field_hash.keys.include?(tag)
55
69
  raise TagCollisionError, %!{Field number #{tag} has already been used in "#{self.name}" by field "#{fname}".!
56
70
  end
57
- field_hash[tag] = Field.build(self, rule, type, fname, tag, options)
71
+
72
+ field_definition = Field.build(self, rule, type, fname, tag, options)
73
+ field_name_hash[fname.to_sym] = field_definition
74
+ field_hash[tag] = field_definition
58
75
  end
59
76
 
60
77
  def extension_tag?(tag)
61
78
  extension_fields.include_tag?(tag)
62
79
  end
80
+
81
+ # An extension field object.
82
+ def extension_fields
83
+ @extension_fields ||= ExtensionFields.new
84
+ end
85
+
86
+ def extension_fields_by_name
87
+ @extension_fields_by_name ||= {}
88
+ end
63
89
 
64
90
  # A collection of field object.
65
91
  def fields
66
92
  @fields ||= {}
67
93
  end
68
94
 
69
- # An extension field object.
70
- def extension_fields
71
- @extension_fields ||= ExtensionFields.new
95
+ def fields_by_name
96
+ @field_by_name ||= {}
97
+ end
98
+
99
+ def repeated_fields
100
+ @repeated_fields ||= []
101
+ end
102
+
103
+ def repeated_extension_fields
104
+ @repeated_extension_fields ||= []
72
105
  end
73
106
 
74
107
  # Find a field object by +name+.
75
108
  def get_field_by_name(name)
76
- name = name.to_sym
77
- fields.values.find {|field| field.name == name}
109
+ # Check if the name has been used before, if not then set it to the sym value
110
+ fields_by_name[name] ||= fields_by_name[name.to_sym]
78
111
  end
79
112
 
80
113
  # Find a field object by +tag+ number.
@@ -82,9 +115,13 @@ module Protobuf
82
115
  fields[tag]
83
116
  end
84
117
 
118
+ def field_cache
119
+ @field_cache ||= {}
120
+ end
121
+
85
122
  # Find a field object by +tag_or_name+.
86
123
  def get_field(tag_or_name)
87
- case tag_or_name
124
+ field_cache[tag_or_name] ||= case tag_or_name
88
125
  when Integer then get_field_by_tag(tag_or_name)
89
126
  when String, Symbol then get_field_by_name(tag_or_name)
90
127
  else raise TypeError, tag_or_name.class
@@ -93,8 +130,8 @@ module Protobuf
93
130
 
94
131
  #TODO merge to get_field_by_name
95
132
  def get_ext_field_by_name(name)
96
- name = name.to_sym
97
- extension_fields.values.find {|field| field.name == name}
133
+ # Check if the name has been used before, if not then set it to the sym value
134
+ extension_fields_by_name[name] ||= extension_fields_by_name[name.to_sym]
98
135
  end
99
136
 
100
137
  #TODO merge to get_field_by_tag
@@ -111,36 +148,68 @@ module Protobuf
111
148
  end
112
149
  end
113
150
 
114
- def descriptor
115
- @descriptor ||= Descriptor::Descriptor.new(self)
151
+ def initialize_unready_fields
152
+ unless @unready_initialized
153
+ initialize_type_fields
154
+ initialize_type_extension_fields
155
+ @unready_initialized = true
156
+ end
157
+ end
158
+
159
+ def initialize_type_fields
160
+ fields.each do |tag, field|
161
+ unless field.ready?
162
+ field = field.setup
163
+ fields[tag] = field
164
+ fields_by_name[field.name.to_sym] = field
165
+ fields_by_name[field.name] = field
166
+ end
167
+ end
168
+ end
169
+
170
+ def initialize_type_extension_fields
171
+ extension_fields.each do |tag, field|
172
+ unless field.ready?
173
+ field = field.setup
174
+ extension_fields[tag] = field
175
+ extension_fields_by_name[field.name.to_sym] = field
176
+ extension_fields_by_name[field.name] = field
177
+ end
178
+ end
179
+ end
180
+
181
+ def setup_repeated_field_arrays
182
+ unless @repeated_fields_setup
183
+ all_fields.each do |field|
184
+ next unless field.repeated?
185
+
186
+ if field.extension?
187
+ repeated_extension_fields << field
188
+ else
189
+ repeated_fields << field
190
+ end
191
+ end
192
+
193
+ @repeated_fields_setup = true
194
+ end
116
195
  end
117
196
  end
118
197
 
119
198
  def initialize(values={})
120
199
  @values = {}
121
200
 
122
- self.class.fields.each do |tag, field|
123
- unless field.ready?
124
- field = field.setup
125
- self.class.class_eval {@fields[tag] = field}
126
- end
127
- if field.repeated?
128
- @values[field.name] = Field::FieldArray.new(field)
129
- end
201
+ self.class.initialize_unready_fields
202
+ self.class.setup_repeated_field_arrays
203
+
204
+ self.class.repeated_fields.each do |field|
205
+ @values[field.name] = Field::FieldArray.new(field)
130
206
  end
131
207
 
132
- # TODO
133
- self.class.extension_fields.each do |tag, field|
134
- unless field.ready?
135
- field = field.setup
136
- self.class.class_eval {@extension_fields[tag] = field}
137
- end
138
- if field.repeated?
139
- @values[field.name] = Field::FieldArray.new(field)
140
- end
208
+ self.class.repeated_extension_fields.each do |field|
209
+ @values[field.name] = Field::FieldArray.new(field)
141
210
  end
142
211
 
143
- values.each {|tag, val| self[tag] = val}
212
+ values.each { |tag, val| self[tag] = val}
144
213
  end
145
214
 
146
215
  def initialized?
@@ -205,7 +274,7 @@ module Protobuf
205
274
  def inspect(indent=0)
206
275
  result = []
207
276
  i = ' ' * indent
208
- field_value_to_string = lambda {|field, value|
277
+ field_value_to_string = lambda { |field, value|
209
278
  result << \
210
279
  if field.optional? && ! has_field?(field.name)
211
280
  ''
@@ -281,22 +350,11 @@ module Protobuf
281
350
  Encoder.encode(stream, self)
282
351
  end
283
352
 
284
- def merge_from(message)
285
- # TODO
286
- fields.each {|tag, field| merge_field(tag, message.__send__(field.name))}
287
- extension_fields.each {|tag, field| merge_field(tag, message.__send__(field.name))}
288
- end
289
-
290
353
  def set_field(tag, bytes)
291
354
  field = (get_field_by_tag(tag) || get_ext_field_by_tag(tag))
292
355
  field.set(self, bytes) if field
293
356
  end
294
357
 
295
- def merge_field(tag, value)
296
- #get_field_by_tag(tag).merge self, bytes #TODO
297
- (get_field_by_tag(tag) || get_ext_field_by_tag(tag)).merge(self, value)
298
- end
299
-
300
358
  def [](tag_or_name)
301
359
  if field = get_field(tag_or_name) || get_ext_field(tag_or_name)
302
360
  __send__(field.name)
@@ -314,8 +372,12 @@ module Protobuf
314
372
  end
315
373
 
316
374
  # Returns a hash; which key is a tag number, and value is a field object.
375
+ def all_fields
376
+ @_all_fields ||= self.class.all_fields
377
+ end
378
+
317
379
  def fields
318
- self.class.fields
380
+ @_fields ||= self.class.fields
319
381
  end
320
382
 
321
383
  # Returns field object or +nil+.
@@ -355,7 +417,7 @@ module Protobuf
355
417
  # # do something
356
418
  # end
357
419
  def each_field
358
- fields.merge(extension_fields).sort_by {|tag, _| tag}.each do |_, field|
420
+ all_fields.each do |field|
359
421
  value = __send__(field.name)
360
422
  yield(field, value)
361
423
  end
@@ -363,7 +425,7 @@ module Protobuf
363
425
 
364
426
  def to_hash
365
427
  result = {}
366
- build_value = lambda {|field, value|
428
+ build_value = lambda { |field, value|
367
429
  if !field.optional? || (field.optional? && has_field?(field.name))
368
430
  case field
369
431
  when Field::MessageField then
@@ -8,6 +8,16 @@ module Protobuf
8
8
  module Rpc
9
9
  module Server
10
10
 
11
+ def _gc_pause_request
12
+ return @_gc_pause_request unless @_gc_pause_request.nil?
13
+ @_gc_pause_request ||= (defined?(::Protobuf::Rpc::GC_PAUSE_REQUEST) && ::Protobuf::Rpc::GC_PAUSE_REQUEST)
14
+ end
15
+
16
+ def _gc_pause_serialization
17
+ return @_gc_pause_serialization unless @_gc_pause_serialization.nil?
18
+ @_gc_pause_serialization ||= (defined?(::Protobuf::Rpc::GC_PAUSE_SERIALIZATION) && ::Protobuf::Rpc::GC_PAUSE_SERIALIZATION)
19
+ end
20
+
11
21
  # Invoke the service method dictated by the proto wrapper request object
12
22
  def handle_client
13
23
  # Parse the protobuf request from the socket
@@ -20,6 +30,7 @@ module Protobuf
20
30
 
21
31
  # Call the service method
22
32
  log_debug { "[#{log_signature}] Dispatching client request to service" }
33
+ GC.disable if _gc_pause_request
23
34
  invoke_rpc_method
24
35
  rescue => error
25
36
  # Ensure we're handling any errors that try to slip out the back door
@@ -132,13 +143,18 @@ module Protobuf
132
143
  @stats.end
133
144
  @stats.log_stats
134
145
  @did_respond = true
146
+ ensure
147
+ GC.enable if _gc_pause_request
135
148
  end
136
149
 
137
150
  def serialize_response(response)
151
+ GC.disable if _gc_pause_serialization
138
152
  log_debug { "[#{log_signature}] serializing response: %s" % response.inspect }
139
153
  @response.response_proto = response.serialize_to_string
140
154
  rescue
141
155
  raise BadResponseProto, $!.message
156
+ ensure
157
+ GC.enable if _gc_pause_serialization
142
158
  end
143
159
  end
144
160
  end
@@ -3,12 +3,12 @@ module Protobuf
3
3
  class SocketRunner
4
4
 
5
5
  def self.stop
6
- Protobuf::Rpc::Socket::Server.stop
7
- Protobuf::Logger.info 'Shutdown complete'
6
+ ::Protobuf::Rpc::Socket::Server.stop
7
+ ::Protobuf::Logger.info { 'Shutdown complete' }
8
8
  end
9
9
 
10
10
  def self.run(server)
11
- Protobuf::Logger.info "Socket::Server Running"
11
+ ::Protobuf::Logger.info { "Socket::Server Running" }
12
12
  server_config = case
13
13
  when server.is_a?(OpenStruct) then
14
14
  server.marshal_dump
@@ -20,9 +20,9 @@ module Protobuf
20
20
  raise "Cannot parser Socket Server - server options"
21
21
  end
22
22
 
23
- Protobuf::Rpc::Socket::Server.run(server_config)
23
+ ::Protobuf::Rpc::Socket::Server.run(server_config)
24
24
  end
25
- end
26
25
 
26
+ end
27
27
  end
28
28
  end
@@ -12,7 +12,6 @@ module Protobuf
12
12
  # Constructor
13
13
  #
14
14
  def initialize(opts={})
15
-
16
15
  @options = opts
17
16
  host = @options.fetch(:host, "127.0.0.1")
18
17
  port = @options.fetch(:port, 9400)
@@ -60,7 +59,7 @@ module Protobuf
60
59
  end
61
60
 
62
61
  def send_data
63
- response_data = @response.is_a?(Protobuf::Message) ? @response.serialize_to_string : @response.to_s
62
+ response_data = @response.is_a?(::Protobuf::Message) ? @response.serialize_to_string : @response.to_s
64
63
  @stats.response_size = response_data.size
65
64
  zmq_error_check(@socket.send_string(response_data))
66
65
  @did_respond = true
@@ -1,3 +1,3 @@
1
1
  module Protobuf
2
- VERSION = '1.3.0'
2
+ VERSION = '1.4.0'
3
3
  end
@@ -76,7 +76,7 @@ describe Protobuf::Logger do
76
76
  subject.fatal 'No errors here'
77
77
  subject.add 'No errors here'
78
78
  subject.log 'No errors here'
79
- }.should_not raise_error
79
+ }.to_not raise_error
80
80
  end
81
81
 
82
82
  it 'logs correctly when instance is valid' do
@@ -118,4 +118,4 @@ describe Protobuf::Logger do
118
118
 
119
119
  end
120
120
 
121
- end
121
+ end
@@ -161,7 +161,7 @@ describe Protobuf::Rpc::Client do
161
161
  it 'should respond to defined service methods' do
162
162
  client = Spec::Proto::TestService.client
163
163
  client.should_receive(:send_request).and_return(nil)
164
- expect { client.find(nil) }.should_not raise_error
164
+ expect { client.find(nil) }.to_not raise_error
165
165
  end
166
166
 
167
167
  it 'raises a NameError when accessing a var that does not exist' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: protobuf
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-06-20 00:00:00.000000000Z
13
+ date: 2012-09-18 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: eventmachine
17
- requirement: &2160220480 !ruby/object:Gem::Requirement
17
+ requirement: &2161594760 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '0'
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *2160220480
25
+ version_requirements: *2161594760
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: eventually
28
- requirement: &2160220060 !ruby/object:Gem::Requirement
28
+ requirement: &2161594340 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *2160220060
36
+ version_requirements: *2161594340
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: json_pure
39
- requirement: &2160219640 !ruby/object:Gem::Requirement
39
+ requirement: &2161593920 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: '0'
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *2160219640
47
+ version_requirements: *2161593920
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: ffi-rzmq
50
- requirement: &2160219220 !ruby/object:Gem::Requirement
50
+ requirement: &2161593500 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: '0'
56
56
  type: :runtime
57
57
  prerelease: false
58
- version_requirements: *2160219220
58
+ version_requirements: *2161593500
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: rake
61
- requirement: &2160218800 !ruby/object:Gem::Requirement
61
+ requirement: &2161593080 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: '0'
67
67
  type: :development
68
68
  prerelease: false
69
- version_requirements: *2160218800
69
+ version_requirements: *2161593080
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: pry
72
- requirement: &2160218380 !ruby/object:Gem::Requirement
72
+ requirement: &2161592660 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ! '>='
@@ -77,10 +77,10 @@ dependencies:
77
77
  version: '0'
78
78
  type: :development
79
79
  prerelease: false
80
- version_requirements: *2160218380
80
+ version_requirements: *2161592660
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: pry-nav
83
- requirement: &2160217960 !ruby/object:Gem::Requirement
83
+ requirement: &2161592240 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ! '>='
@@ -88,10 +88,10 @@ dependencies:
88
88
  version: '0'
89
89
  type: :development
90
90
  prerelease: false
91
- version_requirements: *2160217960
91
+ version_requirements: *2161592240
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: rspec
94
- requirement: &2160217540 !ruby/object:Gem::Requirement
94
+ requirement: &2161591820 !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
97
  - - ! '>='
@@ -99,10 +99,10 @@ dependencies:
99
99
  version: '0'
100
100
  type: :development
101
101
  prerelease: false
102
- version_requirements: *2160217540
102
+ version_requirements: *2161591820
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: yard
105
- requirement: &2160217120 !ruby/object:Gem::Requirement
105
+ requirement: &2161591400 !ruby/object:Gem::Requirement
106
106
  none: false
107
107
  requirements:
108
108
  - - ! '>='
@@ -110,10 +110,10 @@ dependencies:
110
110
  version: '0'
111
111
  type: :development
112
112
  prerelease: false
113
- version_requirements: *2160217120
113
+ version_requirements: *2161591400
114
114
  - !ruby/object:Gem::Dependency
115
115
  name: simplecov
116
- requirement: &2160216700 !ruby/object:Gem::Requirement
116
+ requirement: &2161590980 !ruby/object:Gem::Requirement
117
117
  none: false
118
118
  requirements:
119
119
  - - ! '>='
@@ -121,7 +121,7 @@ dependencies:
121
121
  version: '0'
122
122
  type: :development
123
123
  prerelease: false
124
- version_requirements: *2160216700
124
+ version_requirements: *2161590980
125
125
  description: ! 'Ruby implementation for Protocol Buffers. Works with other protobuf
126
126
  rpc implementations (e.g. Java, Python, C++).
127
127