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_and_has?(key)
Alias for: respond_to_has?
respond_to_and_has_and_present?(key)
respond_to_and_has_present?(key)
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
respond_to_has_present?(key)
responds_to_and_has?(key)
Alias for: respond_to_has?
responds_to_and_has_and_present?(key)
responds_to_and_has_present?(key)
responds_to_has?(key)
Alias for: respond_to_has?
responds_to_has_present?(key)
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_hash_value()

Instance Aliases

Alias for: to_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
to_proto_hash()
Alias for: to_hash
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