class Protobuf::Message
Public Class Methods
new(fields = {}) { |self| ... }
click to toggle source
Constructor
# File lib/protobuf/message.rb, line 29 def initialize(fields = {}) @values = {} fields.to_hash.each_pair do |name, value| self[name] = value end yield self if block_given? end
to_json()
click to toggle source
Class Methods
# File lib/protobuf/message.rb, line 21 def self.to_json name end
Public Instance Methods
==(other)
click to toggle source
# File lib/protobuf/message.rb, line 128 def ==(other) return false unless other.is_a?(self.class) each_field do |field, value| return false unless value == other.__send__(field.name) end true end
[](name)
click to toggle source
# File lib/protobuf/message.rb, line 136 def [](name) if (field = self.class.get_field(name, true)) __send__(field.getter) end end
[]=(name, value)
click to toggle source
# File lib/protobuf/message.rb, line 142 def []=(name, value) if (field = self.class.get_field(name, true)) __send__(field.setter, value) unless value.nil? else unless ::Protobuf.ignore_unknown_fields? fail ::Protobuf::FieldNotDefinedError, name end end end
clear!()
click to toggle source
Public Instance Methods
# File lib/protobuf/message.rb, line 42 def clear! @values.delete_if do |_, value| if value.is_a?(::Protobuf::Field::FieldArray) value.clear false else true end end self end
clone()
click to toggle source
Calls superclass method
# File lib/protobuf/message.rb, line 54 def clone copy_to(super, :clone) end
dup()
click to toggle source
Calls superclass method
# File lib/protobuf/message.rb, line 58 def dup copy_to(super, :dup) end
each_field() { |field, value| ... }
click to toggle source
Iterate over every field, invoking the given block
# File lib/protobuf/message.rb, line 64 def each_field self.class.all_fields.each do |field| value = __send__(field.getter) yield(field, value) end end
each_field_for_serialization() { |field, value| ... }
click to toggle source
# File lib/protobuf/message.rb, line 71 def each_field_for_serialization self.class.all_fields.each do |field| next unless field_must_be_serialized?(field) value = @values[field.getter] if value.nil? fail ::Protobuf::SerializationError, "Required field #{self.class.name}##{field.name} does not have a value." else yield(field, value) end end end
field?(name)
click to toggle source
# File lib/protobuf/message.rb, line 85 def field?(name) @values.key?(name) end
inspect()
click to toggle source
# File lib/protobuf/message.rb, line 90 def inspect attrs = self.class.fields.map do |field| [field.name, send(field.name).inspect].join('=') end.join(' ') "#<#{self.class} #{attrs}>" end
respond_to_has?(key)
click to toggle source
# File lib/protobuf/message.rb, line 98 def respond_to_has?(key) respond_to?(key) && field?(key) end
respond_to_has_and_present?(key)
click to toggle source
# File lib/protobuf/message.rb, line 102 def respond_to_has_and_present?(key) respond_to_has?(key) && (__send__(key).present? || [true, false].include?(__send__(key))) end
to_hash()
click to toggle source
Return a hash-representation of the given fields for this message type.
# File lib/protobuf/message.rb, line 108 def to_hash result = {} @values.keys.each do |field_name| value = __send__(field_name) hashed_value = value.respond_to?(:to_hash_value) ? value.to_hash_value : value result.merge!(field_name => hashed_value) end result end
Also aliased as: to_hash_value, to_proto_hash
to_json(options = {})
click to toggle source
# File lib/protobuf/message.rb, line 120 def to_json(options = {}) to_hash.to_json(options) end
to_proto()
click to toggle source
# File lib/protobuf/message.rb, line 124 def to_proto self end
unknown()
click to toggle source
Includes & Extends
# File lib/protobuf/message.rb, line 14 extend ::Protobuf::Message::Fields
Private Instance Methods
copy_to(object, method)
click to toggle source
Private Instance Methods
# File lib/protobuf/message.rb, line 173 def copy_to(object, method) duplicate = proc do |obj| case obj when Message, String then obj.__send__(method) else obj end end object.__send__(:initialize) @values.each do |name, value| if value.is_a?(::Protobuf::Field::FieldArray) object.__send__(name).replace(value.map { |v| duplicate.call(v) }) else object.__send__("#{name}=", duplicate.call(value)) end end object end