protobuf 2.4.2 → 2.4.3.rc1
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/message.rb +11 -17
- data/lib/protobuf/message/decoder.rb +1 -2
- data/lib/protobuf/rpc/buffer.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/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 +2 -4
- metadata +5 -9
- data/lib/protobuf/message/extend.rb +0 -8
data/lib/protobuf/message.rb
CHANGED
@@ -129,7 +129,7 @@ module Protobuf
|
|
129
129
|
|
130
130
|
def clear!
|
131
131
|
@values.delete_if do |_, value|
|
132
|
-
if value.is_a?(Field::FieldArray)
|
132
|
+
if value.is_a?(::Protobuf::Field::FieldArray)
|
133
133
|
value.clear
|
134
134
|
false
|
135
135
|
else
|
@@ -225,15 +225,17 @@ module Protobuf
|
|
225
225
|
(self.__send__(key).present? || [true, false].include?(self.__send__(key)))
|
226
226
|
end
|
227
227
|
|
228
|
-
def
|
228
|
+
def serialize_to_string
|
229
|
+
stream = ""
|
230
|
+
|
229
231
|
each_field_for_serialization do |field, value|
|
230
232
|
if field.repeated?
|
231
233
|
if field.packed?
|
232
234
|
key = (field.tag << 3) | ::Protobuf::WireType::LENGTH_DELIMITED
|
233
235
|
packed_value = value.map { |val| field.encode(val) }.join
|
234
|
-
stream
|
235
|
-
stream
|
236
|
-
stream
|
236
|
+
stream << ::Protobuf::Field::VarintField.encode(key)
|
237
|
+
stream << ::Protobuf::Field::VarintField.encode(packed_value.size)
|
238
|
+
stream << packed_value
|
237
239
|
else
|
238
240
|
value.each { |val| write_pair(stream, field, val) }
|
239
241
|
end
|
@@ -241,14 +243,8 @@ module Protobuf
|
|
241
243
|
write_pair(stream, field, value)
|
242
244
|
end
|
243
245
|
end
|
244
|
-
end
|
245
246
|
|
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
|
247
|
+
return stream
|
252
248
|
end
|
253
249
|
|
254
250
|
def set_field(tag, bytes)
|
@@ -329,7 +325,7 @@ module Protobuf
|
|
329
325
|
|
330
326
|
object.__send__(:initialize)
|
331
327
|
@values.each do |name, value|
|
332
|
-
if value.is_a?(Field::FieldArray)
|
328
|
+
if value.is_a?(::Protobuf::Field::FieldArray)
|
333
329
|
object.__send__(name).replace(value.map {|v| duplicate.call(v)})
|
334
330
|
else
|
335
331
|
object.__send__("#{name}=", duplicate.call(value))
|
@@ -352,10 +348,8 @@ module Protobuf
|
|
352
348
|
# Encode key and value, and write to +stream+.
|
353
349
|
def write_pair(stream, field, value)
|
354
350
|
key = (field.tag << 3) | field.wire_type
|
355
|
-
|
356
|
-
stream.
|
357
|
-
bytes = field.encode(value)
|
358
|
-
stream.write(bytes)
|
351
|
+
stream << ::Protobuf::Field::VarintField.encode(key)
|
352
|
+
stream << field.encode(value)
|
359
353
|
end
|
360
354
|
|
361
355
|
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
@@ -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
@@ -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,23 +23,21 @@ 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
|
45
43
|
end
|
metadata
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: protobuf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.4.
|
5
|
-
prerelease:
|
4
|
+
version: 2.4.3.rc1
|
5
|
+
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- BJ Neilsen
|
@@ -369,7 +369,6 @@ files:
|
|
369
369
|
- lib/protobuf/logger.rb
|
370
370
|
- lib/protobuf/message.rb
|
371
371
|
- lib/protobuf/message/decoder.rb
|
372
|
-
- lib/protobuf/message/extend.rb
|
373
372
|
- lib/protobuf/message/message.rb
|
374
373
|
- lib/protobuf/rpc/buffer.rb
|
375
374
|
- lib/protobuf/rpc/client.rb
|
@@ -499,16 +498,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
499
498
|
version: '0'
|
500
499
|
segments:
|
501
500
|
- 0
|
502
|
-
hash:
|
501
|
+
hash: 952004748095048200
|
503
502
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
504
503
|
none: false
|
505
504
|
requirements:
|
506
|
-
- - ! '
|
505
|
+
- - ! '>'
|
507
506
|
- !ruby/object:Gem::Version
|
508
|
-
version:
|
509
|
-
segments:
|
510
|
-
- 0
|
511
|
-
hash: -3586960575258099872
|
507
|
+
version: 1.3.1
|
512
508
|
requirements: []
|
513
509
|
rubyforge_project:
|
514
510
|
rubygems_version: 1.8.24
|