protobuf 2.4.2-java → 2.4.3-java
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/lib/protobuf/field/base_field.rb +54 -30
- data/lib/protobuf/field/bytes_field.rb +12 -11
- data/lib/protobuf/field/enum_field.rb +4 -0
- data/lib/protobuf/field/field_array.rb +10 -1
- data/lib/protobuf/field/message_field.rb +5 -1
- data/lib/protobuf/field/string_field.rb +7 -1
- data/lib/protobuf/field/varint_field.rb +9 -1
- data/lib/protobuf/message.rb +23 -30
- data/lib/protobuf/message/decoder.rb +1 -2
- data/lib/protobuf/rpc/buffer.rb +1 -1
- data/lib/protobuf/rpc/client.rb +1 -1
- data/lib/protobuf/rpc/connectors/common.rb +2 -2
- data/lib/protobuf/rpc/server.rb +0 -1
- data/lib/protobuf/rpc/servers/socket/server.rb +1 -1
- data/lib/protobuf/rpc/servers/zmq/worker.rb +1 -1
- data/lib/protobuf/version.rb +1 -1
- data/spec/benchmark/tasks.rb +11 -0
- data/spec/lib/protobuf/message_spec.rb +13 -4
- data/spec/lib/protobuf/rpc/client_spec.rb +1 -1
- metadata +2 -3
- data/lib/protobuf/message/extend.rb +0 -8
@@ -4,6 +4,15 @@ require 'protobuf/field/field_array'
|
|
4
4
|
module Protobuf
|
5
5
|
module Field
|
6
6
|
class BaseField
|
7
|
+
##
|
8
|
+
# Constants
|
9
|
+
#
|
10
|
+
PACKED_TYPES = [
|
11
|
+
::Protobuf::WireType::VARINT,
|
12
|
+
::Protobuf::WireType::FIXED32,
|
13
|
+
::Protobuf::WireType::FIXED64
|
14
|
+
].freeze
|
15
|
+
|
7
16
|
##
|
8
17
|
# Attributes
|
9
18
|
#
|
@@ -29,24 +38,11 @@ module Protobuf
|
|
29
38
|
@extension = options.delete(:extension)
|
30
39
|
@packed = repeated? && options.delete(:packed)
|
31
40
|
@deprecated = options.delete(:deprecated)
|
32
|
-
unless options.empty?
|
33
|
-
warn "WARNING: Invalid options: #{options.inspect} (in #{@message_class.name.split('::').last}.#{@name})"
|
34
|
-
end
|
35
|
-
|
36
|
-
if packed? && ! [WireType::VARINT, WireType::FIXED32, WireType::FIXED64].include?(wire_type)
|
37
|
-
raise "Can't use packed encoding for `#{@type}' type"
|
38
|
-
end
|
39
|
-
|
40
|
-
@default_value = \
|
41
|
-
case @rule
|
42
|
-
when :repeated then
|
43
|
-
::Protobuf::Field::FieldArray.new(self).freeze
|
44
|
-
when :required then
|
45
|
-
nil
|
46
|
-
when :optional then
|
47
|
-
typed_default_value
|
48
|
-
end
|
49
41
|
|
42
|
+
set_rule_predicates
|
43
|
+
set_default_value
|
44
|
+
warn_excess_options(options) unless options.empty?
|
45
|
+
validate_packed_field if packed?
|
50
46
|
define_accessor
|
51
47
|
end
|
52
48
|
|
@@ -58,13 +54,11 @@ module Protobuf
|
|
58
54
|
end
|
59
55
|
|
60
56
|
def enum?
|
61
|
-
|
62
|
-
@_enum = (self.class < ::Protobuf::Field::EnumField)
|
57
|
+
false
|
63
58
|
end
|
64
59
|
|
65
60
|
def message?
|
66
|
-
|
67
|
-
@_message = (self.class < ::Protobuf::Field::MessageField)
|
61
|
+
false
|
68
62
|
end
|
69
63
|
|
70
64
|
# Decode +bytes+ and pass to +message_instance+.
|
@@ -103,25 +97,22 @@ module Protobuf
|
|
103
97
|
end
|
104
98
|
|
105
99
|
def extension?
|
106
|
-
|
100
|
+
!! @extension
|
107
101
|
end
|
108
102
|
|
109
103
|
# Is this a repeated field?
|
110
104
|
def repeated?
|
111
|
-
|
112
|
-
@_repeated = (@rule == :repeated)
|
105
|
+
!! @repeated
|
113
106
|
end
|
114
107
|
|
115
108
|
# Is this a required field?
|
116
109
|
def required?
|
117
|
-
|
118
|
-
@_required = (@rule == :required)
|
110
|
+
!! @required
|
119
111
|
end
|
120
112
|
|
121
113
|
# Is this a optional field?
|
122
114
|
def optional?
|
123
|
-
|
124
|
-
@_optional = (@rule == :optional)
|
115
|
+
!! @optional
|
125
116
|
end
|
126
117
|
|
127
118
|
# Is this a deprecated field?
|
@@ -184,8 +175,9 @@ module Protobuf
|
|
184
175
|
@message_class.class_eval do
|
185
176
|
define_method(field.setter_method_name) do |val|
|
186
177
|
field.warn_if_deprecated
|
178
|
+
val.compact! if val.respond_to?(:compact!)
|
187
179
|
|
188
|
-
if val.nil?
|
180
|
+
if val.nil? || (val.respond_to?(:empty?) && val.empty?)
|
189
181
|
@values.delete(field.name)
|
190
182
|
else
|
191
183
|
@values[field.name] ||= ::Protobuf::Field::FieldArray.new(field)
|
@@ -211,7 +203,7 @@ module Protobuf
|
|
211
203
|
define_method(field.setter_method_name) do |val|
|
212
204
|
field.warn_if_deprecated
|
213
205
|
|
214
|
-
if val.nil?
|
206
|
+
if val.nil? || (val.respond_to?(:empty?) && val.empty?)
|
215
207
|
@values.delete(field.name)
|
216
208
|
elsif field.acceptable?(val)
|
217
209
|
@values[field.name] = val
|
@@ -222,6 +214,28 @@ module Protobuf
|
|
222
214
|
end
|
223
215
|
end
|
224
216
|
|
217
|
+
def set_default_value
|
218
|
+
@default_value = case
|
219
|
+
when repeated? then ::Protobuf::Field::FieldArray.new(self).freeze
|
220
|
+
when required? then nil
|
221
|
+
when optional? then typed_default_value
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
def set_rule_predicates
|
226
|
+
case @rule
|
227
|
+
when :repeated then
|
228
|
+
@required = @optional = false
|
229
|
+
@repeated = true
|
230
|
+
when :required then
|
231
|
+
@repeated = @optional = false
|
232
|
+
@required = true
|
233
|
+
when :optional then
|
234
|
+
@repeated = @required = false
|
235
|
+
@optional = true
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
225
239
|
def typed_default_value
|
226
240
|
if @default.nil?
|
227
241
|
self.class.default
|
@@ -230,6 +244,16 @@ module Protobuf
|
|
230
244
|
end
|
231
245
|
end
|
232
246
|
|
247
|
+
def validate_packed_field
|
248
|
+
if packed? && ! ::Protobuf::Field::BaseField::PACKED_TYPES.include?(wire_type)
|
249
|
+
raise "Can't use packed encoding for `#{@type}' type"
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
253
|
+
def warn_excess_options(options)
|
254
|
+
warn "WARNING: Invalid options: #{options.inspect} (in #{@message_class.name.split('::').last}.#{@name})"
|
255
|
+
end
|
256
|
+
|
233
257
|
end
|
234
258
|
end
|
235
259
|
end
|
@@ -1,14 +1,14 @@
|
|
1
|
+
require 'protobuf/wire_type'
|
2
|
+
|
1
3
|
module Protobuf
|
2
4
|
module Field
|
3
5
|
class BytesField < BaseField
|
6
|
+
BYTES_ENCODING = "ASCII-8BIT".freeze
|
7
|
+
|
4
8
|
def self.default
|
5
9
|
''
|
6
10
|
end
|
7
11
|
|
8
|
-
def wire_type
|
9
|
-
WireType::LENGTH_DELIMITED
|
10
|
-
end
|
11
|
-
|
12
12
|
def acceptable?(val)
|
13
13
|
if val.nil? || val.is_a?(::Protobuf::Message) || val.instance_of?(String)
|
14
14
|
return true
|
@@ -18,20 +18,21 @@ module Protobuf
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def decode(bytes)
|
21
|
-
bytes.force_encoding(::Protobuf::
|
21
|
+
bytes.force_encoding(::Protobuf::Field::BytesField::BYTES_ENCODING)
|
22
22
|
bytes
|
23
23
|
end
|
24
24
|
|
25
25
|
def encode(value)
|
26
|
-
if value.is_a?(::Protobuf::Message)
|
27
|
-
|
28
|
-
else
|
29
|
-
value.force_encoding(::Protobuf::Message::STRING_ENCODING) if value.respond_to?(:force_encoding)
|
30
|
-
end
|
26
|
+
value = value.serialize_to_string if value.is_a?(::Protobuf::Message)
|
27
|
+
value.force_encoding(::Protobuf::Field::BytesField::BYTES_ENCODING)
|
31
28
|
|
32
|
-
string_size = VarintField.encode(value.size)
|
29
|
+
string_size = ::Protobuf::Field::VarintField.encode(value.size)
|
33
30
|
string_size << value
|
34
31
|
end
|
32
|
+
|
33
|
+
def wire_type
|
34
|
+
::Protobuf::WireType::LENGTH_DELIMITED
|
35
|
+
end
|
35
36
|
end
|
36
37
|
end
|
37
38
|
end
|
@@ -28,7 +28,7 @@ module Protobuf
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def replace(val)
|
31
|
-
|
31
|
+
raise_type_error(val) unless val.is_a?(Array)
|
32
32
|
val = val.map { |v| normalize(v) }
|
33
33
|
super(val)
|
34
34
|
end
|
@@ -60,6 +60,15 @@ module Protobuf
|
|
60
60
|
value
|
61
61
|
end
|
62
62
|
end
|
63
|
+
|
64
|
+
def raise_type_error(val)
|
65
|
+
error_text = <<-TYPE_ERROR
|
66
|
+
Expected value of type '#{@field.type}'
|
67
|
+
Got '#{val.class}' for protobuf field #{@field.name}
|
68
|
+
TYPE_ERROR
|
69
|
+
|
70
|
+
raise TypeError, error_text
|
71
|
+
end
|
63
72
|
end
|
64
73
|
end
|
65
74
|
end
|
@@ -21,10 +21,14 @@ module Protobuf
|
|
21
21
|
|
22
22
|
def encode(value)
|
23
23
|
bytes = value.serialize_to_string
|
24
|
-
result = VarintField.encode(bytes.size)
|
24
|
+
result = ::Protobuf::Field::VarintField.encode(bytes.size)
|
25
25
|
result << bytes
|
26
26
|
end
|
27
27
|
|
28
|
+
def message?
|
29
|
+
true
|
30
|
+
end
|
31
|
+
|
28
32
|
def wire_type
|
29
33
|
::Protobuf::WireType::LENGTH_DELIMITED
|
30
34
|
end
|
@@ -6,9 +6,15 @@ module Protobuf
|
|
6
6
|
ENCODING = 'UTF-8'.freeze
|
7
7
|
|
8
8
|
def decode(bytes)
|
9
|
-
bytes.force_encoding(::Protobuf::Field::StringField::ENCODING)
|
9
|
+
bytes.force_encoding(::Protobuf::Field::StringField::ENCODING)
|
10
10
|
bytes
|
11
11
|
end
|
12
|
+
|
13
|
+
def encode(value)
|
14
|
+
value.force_encoding(::Protobuf::Field::StringField::ENCODING)
|
15
|
+
string_size = ::Protobuf::Field::VarintField.encode(value.size)
|
16
|
+
string_size << value
|
17
|
+
end
|
12
18
|
end
|
13
19
|
end
|
14
20
|
end
|
@@ -49,7 +49,15 @@ module Protobuf
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def encode(value)
|
52
|
-
|
52
|
+
return [value].pack('C') if value < 128
|
53
|
+
|
54
|
+
bytes = []
|
55
|
+
until value == 0
|
56
|
+
bytes << (0x80 | (value & 0x7f))
|
57
|
+
value >>= 7
|
58
|
+
end
|
59
|
+
bytes[-1] &= 0x7f
|
60
|
+
bytes.pack('C*')
|
53
61
|
end
|
54
62
|
|
55
63
|
def wire_type
|
data/lib/protobuf/message.rb
CHANGED
@@ -6,10 +6,6 @@ require 'protobuf/message/decoder'
|
|
6
6
|
|
7
7
|
module Protobuf
|
8
8
|
class Message
|
9
|
-
##
|
10
|
-
# Constants
|
11
|
-
#
|
12
|
-
STRING_ENCODING = "ASCII-8BIT".freeze
|
13
9
|
|
14
10
|
##
|
15
11
|
# Class Methods
|
@@ -129,7 +125,7 @@ module Protobuf
|
|
129
125
|
|
130
126
|
def clear!
|
131
127
|
@values.delete_if do |_, value|
|
132
|
-
if value.is_a?(Field::FieldArray)
|
128
|
+
if value.is_a?(::Protobuf::Field::FieldArray)
|
133
129
|
value.clear
|
134
130
|
false
|
135
131
|
else
|
@@ -160,7 +156,7 @@ module Protobuf
|
|
160
156
|
|
161
157
|
def each_field_for_serialization
|
162
158
|
all_fields.each do |field|
|
163
|
-
next unless
|
159
|
+
next unless __field_must_be_serialized__?(field)
|
164
160
|
|
165
161
|
value = @values[field.name]
|
166
162
|
|
@@ -225,15 +221,17 @@ module Protobuf
|
|
225
221
|
(self.__send__(key).present? || [true, false].include?(self.__send__(key)))
|
226
222
|
end
|
227
223
|
|
228
|
-
def
|
224
|
+
def serialize_to_string
|
225
|
+
stream = ""
|
226
|
+
|
229
227
|
each_field_for_serialization do |field, value|
|
230
228
|
if field.repeated?
|
231
229
|
if field.packed?
|
232
230
|
key = (field.tag << 3) | ::Protobuf::WireType::LENGTH_DELIMITED
|
233
231
|
packed_value = value.map { |val| field.encode(val) }.join
|
234
|
-
stream
|
235
|
-
stream
|
236
|
-
stream
|
232
|
+
stream << ::Protobuf::Field::VarintField.encode(key)
|
233
|
+
stream << ::Protobuf::Field::VarintField.encode(packed_value.size)
|
234
|
+
stream << packed_value
|
237
235
|
else
|
238
236
|
value.each { |val| write_pair(stream, field, val) }
|
239
237
|
end
|
@@ -241,14 +239,8 @@ module Protobuf
|
|
241
239
|
write_pair(stream, field, value)
|
242
240
|
end
|
243
241
|
end
|
244
|
-
end
|
245
242
|
|
246
|
-
|
247
|
-
io = StringIO.new(string)
|
248
|
-
serialize_to(io)
|
249
|
-
result = io.string
|
250
|
-
result.force_encoding(::Protobuf::Message::STRING_ENCODING) if result.respond_to?(:force_encoding)
|
251
|
-
result
|
243
|
+
return stream
|
252
244
|
end
|
253
245
|
|
254
246
|
def set_field(tag, bytes)
|
@@ -273,6 +265,10 @@ module Protobuf
|
|
273
265
|
to_hash.to_json
|
274
266
|
end
|
275
267
|
|
268
|
+
def to_proto
|
269
|
+
self
|
270
|
+
end
|
271
|
+
|
276
272
|
def ==(obj)
|
277
273
|
return false unless obj.is_a?(self.class)
|
278
274
|
each_field do |field, value|
|
@@ -301,6 +297,7 @@ module Protobuf
|
|
301
297
|
# Instance Aliases
|
302
298
|
#
|
303
299
|
alias_method :to_hash_value, :to_hash
|
300
|
+
alias_method :to_proto_hash, :to_hash
|
304
301
|
alias_method :to_s, :serialize_to_string
|
305
302
|
alias_method :bytes, :serialize_to_string
|
306
303
|
alias_method :serialize, :serialize_to_string
|
@@ -329,7 +326,7 @@ module Protobuf
|
|
329
326
|
|
330
327
|
object.__send__(:initialize)
|
331
328
|
@values.each do |name, value|
|
332
|
-
if value.is_a?(Field::FieldArray)
|
329
|
+
if value.is_a?(::Protobuf::Field::FieldArray)
|
333
330
|
object.__send__(name).replace(value.map {|v| duplicate.call(v)})
|
334
331
|
else
|
335
332
|
object.__send__("#{name}=", duplicate.call(value))
|
@@ -338,24 +335,20 @@ module Protobuf
|
|
338
335
|
object
|
339
336
|
end
|
340
337
|
|
341
|
-
def
|
342
|
-
|
343
|
-
|
344
|
-
if field.repeated? && has_field?(field.name)
|
345
|
-
@values[field.name].compact!
|
346
|
-
@values.delete(field.name) if @values[field.name].empty?
|
347
|
-
end
|
338
|
+
def __field_must_be_serialized__?(field)
|
339
|
+
field.required? || __field_value_is_present__?(field)
|
340
|
+
end
|
348
341
|
|
349
|
-
|
342
|
+
def __field_value_is_present__?(field)
|
343
|
+
value = @values[field.name]
|
344
|
+
!value.nil? && (value.present? || [true, false].include?(value))
|
350
345
|
end
|
351
346
|
|
352
347
|
# Encode key and value, and write to +stream+.
|
353
348
|
def write_pair(stream, field, value)
|
354
349
|
key = (field.tag << 3) | field.wire_type
|
355
|
-
|
356
|
-
stream.
|
357
|
-
bytes = field.encode(value)
|
358
|
-
stream.write(bytes)
|
350
|
+
stream << ::Protobuf::Field::VarintField.encode(key)
|
351
|
+
stream << field.encode(value)
|
359
352
|
end
|
360
353
|
|
361
354
|
end
|
@@ -43,10 +43,9 @@ module Protobuf
|
|
43
43
|
|
44
44
|
# Read varint integer value from +stream+.
|
45
45
|
def read_varint(stream)
|
46
|
-
read_method = stream.respond_to?(:readbyte) ? :readbyte : :readchar
|
47
46
|
value = index = 0
|
48
47
|
begin
|
49
|
-
byte = stream.
|
48
|
+
byte = stream.readbyte
|
50
49
|
value |= (byte & 0x7f) << (7 * index)
|
51
50
|
index += 1
|
52
51
|
end while (byte & 0x80).nonzero?
|
data/lib/protobuf/rpc/buffer.rb
CHANGED
data/lib/protobuf/rpc/client.rb
CHANGED
@@ -10,7 +10,7 @@ module Protobuf
|
|
10
10
|
extend Forwardable
|
11
11
|
include Protobuf::Logger::LogMethods
|
12
12
|
|
13
|
-
|
13
|
+
def_delegators :@connector, :options, :complete_cb, :success_cb, :failure_cb
|
14
14
|
attr_reader :connector
|
15
15
|
|
16
16
|
# Create a new client with default options (defined in ClientConnection)
|
@@ -104,10 +104,10 @@ module Protobuf
|
|
104
104
|
def rpc_request_data
|
105
105
|
validate_request_type
|
106
106
|
|
107
|
-
return Protobuf::Socketrpc::Request.new(
|
107
|
+
return ::Protobuf::Socketrpc::Request.new(
|
108
108
|
:service_name => @options[:service].name,
|
109
109
|
:method_name => @options[:method].to_s,
|
110
|
-
:request_proto => @options[:request]
|
110
|
+
:request_proto => @options[:request]
|
111
111
|
).serialize_to_string
|
112
112
|
rescue => e
|
113
113
|
fail(:INVALID_REQUEST_PROTO, "Could not set request proto: #{e.message}")
|
data/lib/protobuf/rpc/server.rb
CHANGED
@@ -9,7 +9,7 @@ module Protobuf
|
|
9
9
|
include ::Protobuf::Rpc::Server
|
10
10
|
include ::Protobuf::Logger::LogMethods
|
11
11
|
|
12
|
-
AUTO_COLLECT_TIMEOUT =
|
12
|
+
AUTO_COLLECT_TIMEOUT = 5 # seconds
|
13
13
|
|
14
14
|
def self.cleanup?
|
15
15
|
# every 10 connections run a cleanup routine after closing the response
|
@@ -49,7 +49,7 @@ module Protobuf
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def send_data
|
52
|
-
response_data = @response.
|
52
|
+
response_data = @response.to_s # to_s is aliases as serialize_to_string in Message
|
53
53
|
@stats.response_size = response_data.size
|
54
54
|
zmq_error_check(@socket.send_string(response_data))
|
55
55
|
end
|
data/lib/protobuf/version.rb
CHANGED
data/spec/benchmark/tasks.rb
CHANGED
@@ -140,6 +140,17 @@ namespace :benchmark do
|
|
140
140
|
puts args[:profile_output]
|
141
141
|
end
|
142
142
|
|
143
|
+
desc "benchmark Protobuf Message #serialize"
|
144
|
+
task :profile_protobuf_serialize, [:number, :profile_output] do |t, args|
|
145
|
+
args.with_defaults(:number => 1000, :profile_output => "/tmp/profiler_new_#{Time.now.to_i}")
|
146
|
+
create_params = { :name => "The name that we set", :date_created => Time.now.to_i, :status => 2 }
|
147
|
+
::PerfTools::CpuProfiler.start(args[:profile_output]) do
|
148
|
+
args[:number].to_i.times { Test::Resource.new(create_params).serialize }
|
149
|
+
end
|
150
|
+
|
151
|
+
puts args[:profile_output]
|
152
|
+
end
|
153
|
+
|
143
154
|
desc "benchmark EventMachine client with EventMachine server"
|
144
155
|
task :em_client_em_server, [:number, :length] do |t, args|
|
145
156
|
args.with_defaults(:number => 1000, :length => 100)
|
@@ -23,25 +23,34 @@ describe Protobuf::Message do
|
|
23
23
|
describe '#encode' do
|
24
24
|
context "when there's no value for a required field" do
|
25
25
|
let(:message) { ::Test::Resource.new }
|
26
|
-
let(:stream) { StringIO.new }
|
27
26
|
|
28
27
|
it "raises a 'message not initialized' error" do
|
29
28
|
expect {
|
30
|
-
message.
|
29
|
+
message.serialize_to_string
|
31
30
|
}.to raise_error(Protobuf::SerializationError, /required/i)
|
32
31
|
end
|
33
32
|
end
|
34
33
|
|
35
34
|
context "repeated fields" do
|
36
35
|
let(:message) { ::Test::Resource.new(:name => "something") }
|
37
|
-
let(:stream) { StringIO.new }
|
38
36
|
|
39
37
|
it "does not raise an error when repeated fields are []" do
|
40
38
|
expect {
|
41
39
|
message.repeated_enum = []
|
42
|
-
message.
|
40
|
+
message.serialize_to_string
|
43
41
|
}.to_not raise_error
|
44
42
|
end
|
43
|
+
|
44
|
+
it "sets the value to nil when empty array is passed" do
|
45
|
+
message.repeated_enum = []
|
46
|
+
message.instance_variable_get("@values")[:repeated_enum].should be_nil
|
47
|
+
end
|
48
|
+
|
49
|
+
it "raises TypeError when a non-array replaces it" do
|
50
|
+
expect {
|
51
|
+
message.repeated_enum = 2
|
52
|
+
}.to raise_error(/value of type/)
|
53
|
+
end
|
45
54
|
end
|
46
55
|
end
|
47
56
|
|
@@ -9,7 +9,7 @@ describe Protobuf::Rpc::Client do
|
|
9
9
|
context "when using fiber based calls" do
|
10
10
|
it "waits for response" do
|
11
11
|
EventMachine.fiber_run do
|
12
|
-
StubServer.new(:delay =>
|
12
|
+
StubServer.new(:delay => 1) do |server|
|
13
13
|
client = Test::ResourceService.client
|
14
14
|
start = now
|
15
15
|
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: protobuf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 2.4.
|
5
|
+
version: 2.4.3
|
6
6
|
platform: java
|
7
7
|
authors:
|
8
8
|
- BJ Neilsen
|
@@ -11,7 +11,7 @@ autorequire:
|
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
13
|
|
14
|
-
date: 2012-11-
|
14
|
+
date: 2012-11-17 00:00:00 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: activesupport
|
@@ -305,7 +305,6 @@ files:
|
|
305
305
|
- lib/protobuf/logger.rb
|
306
306
|
- lib/protobuf/message.rb
|
307
307
|
- lib/protobuf/message/decoder.rb
|
308
|
-
- lib/protobuf/message/extend.rb
|
309
308
|
- lib/protobuf/message/message.rb
|
310
309
|
- lib/protobuf/rpc/buffer.rb
|
311
310
|
- lib/protobuf/rpc/client.rb
|