module Protobuf::ActiveRecord::Serialization::ClassMethods

Public Instance Methods

_protobuf_collection_association_object(field) click to toggle source
# File lib/protobuf/active_record/serialization.rb, line 154
def _protobuf_collection_association_object(field)
  CollectionAssociationCaller.new(field)
end
_protobuf_convert_to_fields_object(field) click to toggle source
# File lib/protobuf/active_record/serialization.rb, line 200
def _protobuf_convert_to_fields_object(field)
  is_datetime_time_or_timestamp_column = _protobuf_date_datetime_time_or_timestamp_column?(field)
  is_date_column = _protobuf_date_column?(field)

  if is_datetime_time_or_timestamp_column
    if is_date_column
      DateCaller.new(field)
    else
      DateTimeCaller.new(field)
    end
  else
    NoConversionCaller.new(field)
  end
end
_protobuf_field_objects() click to toggle source
# File lib/protobuf/active_record/serialization.rb, line 19
def _protobuf_field_objects
  @_protobuf_field_objects ||= {}
end
_protobuf_field_options() click to toggle source
# File lib/protobuf/active_record/serialization.rb, line 23
def _protobuf_field_options
  @_protobuf_field_options ||= {}
end
_protobuf_field_symbol_transformers() click to toggle source
# File lib/protobuf/active_record/serialization.rb, line 27
def _protobuf_field_symbol_transformers
  @_protobuf_field_symbol_transformers ||= {}
end
_protobuf_field_transformer_object(field) click to toggle source
# File lib/protobuf/active_record/serialization.rb, line 215
def _protobuf_field_transformer_object(field)
  _protobuf_field_transformers[field]
end
_protobuf_field_transformers() click to toggle source
# File lib/protobuf/active_record/serialization.rb, line 31
def _protobuf_field_transformers
  @_protobuf_field_transformers ||= {}
end
_protobuf_message_deprecated_fields() click to toggle source
# File lib/protobuf/active_record/serialization.rb, line 35
def _protobuf_message_deprecated_fields
  @_protobuf_message_deprecated_fields ||= begin
    self.protobuf_message.all_fields.map do |field|
      next if field.nil?
      next unless field.deprecated?

      field.name.to_sym
    end
  end
end
_protobuf_message_non_deprecated_fields() click to toggle source
# File lib/protobuf/active_record/serialization.rb, line 46
def _protobuf_message_non_deprecated_fields
  @_protobuf_message_non_deprecated_fields ||= begin
    self.protobuf_message.all_fields.map do |field|
      next if field.nil?
      next if field.deprecated?

      field.name.to_sym
    end
  end
end
_protobuf_nil_object(_field) click to toggle source
# File lib/protobuf/active_record/serialization.rb, line 228
def _protobuf_nil_object(_field)
  NilMethodCaller.new
end
_protobuf_symbol_transformer_object(field) click to toggle source
# File lib/protobuf/active_record/serialization.rb, line 243
def _protobuf_symbol_transformer_object(field)
  FieldSymbolTransformerCaller.new(self, _protobuf_field_symbol_transformers[field])
end
field_from_record(field, transformer = nil, &block) click to toggle source

Define a field transformation from a record. Accepts a Symbol, callable, or block that is called with the record being serialized.

When given a callable or block, it is directly used to convert the field.

When a symbol is given, it extracts the method with the same name.

The callable or method must accept a single parameter, which is the proto message.

Examples:

field_from_record :public_key, :convert_public_key_to_proto
field_from_record :status, lambda { |record| # Do some stuff... }
field_from_record :status do |record|
  # Do some blocky stuff...
end
# File lib/protobuf/active_record/serialization.rb, line 74
def field_from_record(field, transformer = nil, &block)
  if transformer.is_a?(Symbol)
    _protobuf_field_symbol_transformers[field] = transformer
    return
  end

  transformer ||= block
  callable = transformer
  unless callable.respond_to?(:call)
    raise FieldTransformerError
  end

  _protobuf_field_transformers[field.to_sym] = callable
end
protobuf_fields(*fields) click to toggle source

Define the protobuf fields that will be automatically serialized (by default, all fields will be serialized). Accepts any number of field names and is equivalent to passing the :only option to `protobuf_message`.

If :except is specified, all fields except the specified fields will be serialized.

By default, deprecated fields will be serialized. To exclude deprecated fields, pass :deprecated => false in the options hash.

Examples:

protobuf_fields :guid, :name
protobuf_fields :except => :email_domain
protobuf_fields :except => :email_domain, :deprecated => false
# File lib/protobuf/active_record/serialization.rb, line 103
def protobuf_fields(*fields)
  options = fields.extract_options!
  options[:only] = fields if fields.present?

  self._protobuf_field_options = options
end
protobuf_message(message = nil, options = {}) click to toggle source

Define the protobuf message class that should be used to serialize the object to protobuf. Accepts a string or symbol and an options hash.

When protobuf_message is declared, Protoable automatically extracts the fields from the message and automatically adds a to_proto method that serializes the object to protobuf.

The fields that will be automatically serialized can be configured by passing :only or :except in the options hash. If :only is specified, only the specified fields will be serialized. If :except is specified, all field except the specified fields will be serialized.

By default, deprecated fields will be serialized. To exclude deprecated fields, pass :deprecated => false in the options hash.

Examples:

protobuf_message :user_message
protobuf_message "UserMessage"
protobuf_message "Namespaced::UserMessage"
protobuf_message :user_message, :only => [ :guid, :name ]
protobuf_message :user_message, :except => :email_domain
protobuf_message :user_message, :except => :email_domain, :deprecated => false
# File lib/protobuf/active_record/serialization.rb, line 133
def protobuf_message(message = nil, options = {})
  unless message.nil?
    @protobuf_message = message.to_s.classify.constantize
    self._protobuf_field_options = options
  end

  @protobuf_message
end