diff --git a/lib/protocol_buffers/runtime/decoder.rb b/lib/protocol_buffers/runtime/decoder.rb index 9e4a68e..b48f292 100644 --- a/lib/protocol_buffers/runtime/decoder.rb +++ b/lib/protocol_buffers/runtime/decoder.rb @@ -6,7 +6,7 @@ class DecodeError < StandardError; end module Decoder # :nodoc: all def self.decode(io, message) - fields = message.fields + fields = message.message_fields until io.eof? tag_int = Varint.decode(io) diff --git a/lib/protocol_buffers/runtime/encoder.rb b/lib/protocol_buffers/runtime/encoder.rb index f13440f..40e78a8 100644 --- a/lib/protocol_buffers/runtime/encoder.rb +++ b/lib/protocol_buffers/runtime/encoder.rb @@ -12,7 +12,7 @@ module Encoder # :nodoc: all def self.encode(io, message) message.validate! - message.fields.each do |tag, field| + message.message_fields.each do |tag, field| next unless message.value_for_tag?(tag) value = message.value_for_tag(tag) diff --git a/lib/protocol_buffers/runtime/field.rb b/lib/protocol_buffers/runtime/field.rb index 954321d..ce7c1ed 100644 --- a/lib/protocol_buffers/runtime/field.rb +++ b/lib/protocol_buffers/runtime/field.rb @@ -126,7 +126,7 @@ def add_reader_to(klass) klass.class_eval <<-EOF, __FILE__, __LINE__+1 def #{name} unless @#{name} - @#{name} = RepeatedField.new(fields[#{tag}]) + @#{name} = RepeatedField.new(message_fields[#{tag}]) end @#{name} end @@ -159,7 +159,7 @@ def #{name}=(value) else klass.class_eval <<-EOF, __FILE__, __LINE__+1 def #{name}=(value) - field = fields[#{tag}] + field = message_fields[#{tag}] if value.nil? @set_fields[#{tag}] = false @#{name} = field.default_value diff --git a/lib/protocol_buffers/runtime/message.rb b/lib/protocol_buffers/runtime/message.rb index f4ebcf4..ae8b31b 100644 --- a/lib/protocol_buffers/runtime/message.rb +++ b/lib/protocol_buffers/runtime/message.rb @@ -313,7 +313,7 @@ def attributes=(hash = {}) # Comparison by class and field values. def ==(obj) return false unless obj.is_a?(self.class) - fields.each do |tag, field| + message_fields.each do |tag, field| return false unless self.__send__(field.name) == obj.__send__(field.name) end return true @@ -344,10 +344,16 @@ def self.initial_set_fields end # Returns a hash of { tag => ProtocolBuffers::Field } - def fields + def message_fields self.class.fields end + # DEPRECATED: Please use message_fields instead. + def fields + warn "[DEPRECATION] `fields` is deprecated. Please use `message_fields` instead." + message_fields + end + # Find the field for the given attribute name. Returns a # ProtocolBuffers::field def self.field_for_name(name) @@ -358,7 +364,7 @@ def self.field_for_name(name) # Equivalent to fields[tag] def self.field_for_tag(tag) - fields[tag] + message_fields[tag] end # Reflection: get the attribute value for the given tag id. @@ -367,11 +373,11 @@ def self.field_for_tag(tag) # # is equivalent to # message.f1 def value_for_tag(tag) - self.__send__(fields[tag].name) + self.__send__(message_fields[tag].name) end def set_value_for_tag(tag, value) - self.__send__("#{fields[tag].name}=", value) + self.__send__("#{message_fields[tag].name}=", value) end # Reflection: does this Message have the field set? @@ -386,7 +392,7 @@ def value_for_tag?(tag) def inspect ret = ProtocolBuffers.bin_sio ret << "#<#{self.class.name}" - fields.each do |tag, field| + message_fields.each do |tag, field| if value_for_tag?(tag) value = field.inspect_value(self.__send__(field.name)) else @@ -398,7 +404,7 @@ def inspect return ret.string end - def merge_field(tag, value, field = fields[tag]) # :nodoc: + def merge_field(tag, value, field = message_fields[tag]) # :nodoc: if field.repeated? if value.is_a?(Array) self.__send__("#{field.name}=", self.__send__(field.name) + value) @@ -495,7 +501,7 @@ def self.gen_methods! # :NODOC: protected def initialize_field(tag) - field = fields[tag] + field = message_fields[tag] new_value = field.default_value self.instance_variable_set("@#{field.name}", new_value) if field.class == Field::MessageField diff --git a/spec/proto_files/name_collision.proto b/spec/proto_files/name_collision.proto new file mode 100644 index 0000000..72a50d7 --- /dev/null +++ b/spec/proto_files/name_collision.proto @@ -0,0 +1,9 @@ +package test; + +message Field { + required string name = 1; +} + +message Message { + repeated Field fields = 1; +} diff --git a/spec/runtime_spec.rb b/spec/runtime_spec.rb index bf30e0b..7e681b2 100644 --- a/spec/runtime_spec.rb +++ b/spec/runtime_spec.rb @@ -385,7 +385,7 @@ def filled_in_bit bit2 = Featureful::ABitOfEverything.parse(bit.to_s) bit.should == bit2 - bit.fields.each do |tag, field| + bit.message_fields.each do |tag, field| bit.value_for_tag(tag).should == bit2.value_for_tag(tag) end end