protobuf 2.4.1-java → 2.4.2-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.
@@ -35,7 +35,7 @@ module Protobuf
35
35
  raise TagCollisionError, %!{Field number #{tag} has already been used in "#{self.name}" by field "#{fname}".!
36
36
  end
37
37
 
38
- field_definition = Field.build(self, rule, type, fname, tag, options)
38
+ field_definition = ::Protobuf::Field.build(self, rule, type, fname, tag, options)
39
39
  field_name_hash[fname] = tag
40
40
  field_array[tag] = field_definition
41
41
  end
@@ -160,24 +160,15 @@ module Protobuf
160
160
 
161
161
  def each_field_for_serialization
162
162
  all_fields.each do |field|
163
- next unless has_field?(field.name) || field.required?
163
+ next unless _field_must_be_serialized?(field)
164
164
 
165
165
  value = @values[field.name]
166
166
 
167
- if field.repeated?
168
- if !value.nil?
169
- value.compact!
170
- @values[field.name] = nil if value.empty?
171
- end
172
- end
173
-
174
- if has_field?(field.name) || field.required?
175
- if value.present? || [true, false].include?(value)
176
- yield(field, value)
177
- else
178
- # Only way you can get here is if you are required and not present
179
- raise ::Protobuf::SerializationError, "#{field.name} is required on #{field.message_class}"
180
- end
167
+ if value.present? || [true, false].include?(value)
168
+ yield(field, value)
169
+ else
170
+ # Only way you can get here is if you are required and not present
171
+ raise ::Protobuf::SerializationError, "#{field.name} is required on #{field.message_class}"
181
172
  end
182
173
  end
183
174
  end
@@ -347,6 +338,17 @@ module Protobuf
347
338
  object
348
339
  end
349
340
 
341
+ def _field_must_be_serialized?(field)
342
+ return true if field.required?
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
348
+
349
+ return has_field?(field.name)
350
+ end
351
+
350
352
  # Encode key and value, and write to +stream+.
351
353
  def write_pair(stream, field, value)
352
354
  key = (field.tag << 3) | field.wire_type
@@ -1,4 +1,4 @@
1
1
  module Protobuf
2
- VERSION = '2.4.1'
2
+ VERSION = '2.4.2'
3
3
  PROTOC_VERSION = '2.4.1'
4
4
  end
@@ -31,6 +31,18 @@ describe Protobuf::Message do
31
31
  }.to raise_error(Protobuf::SerializationError, /required/i)
32
32
  end
33
33
  end
34
+
35
+ context "repeated fields" do
36
+ let(:message) { ::Test::Resource.new(:name => "something") }
37
+ let(:stream) { StringIO.new }
38
+
39
+ it "does not raise an error when repeated fields are []" do
40
+ expect {
41
+ message.repeated_enum = []
42
+ message.serialize_to(stream)
43
+ }.to_not raise_error
44
+ end
45
+ end
34
46
  end
35
47
 
36
48
  describe "boolean predicate methods" do
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: protobuf
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 2.4.1
5
+ version: 2.4.2
6
6
  platform: java
7
7
  authors:
8
8
  - BJ Neilsen