module Protobuf::ActiveRecord::Serialization::ClassMethods
Public Instance Methods
# File lib/protobuf/active_record/serialization.rb, line 154 def _protobuf_collection_association_object(field) CollectionAssociationCaller.new(field) end
# 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
# File lib/protobuf/active_record/serialization.rb, line 19 def _protobuf_field_objects @_protobuf_field_objects ||= {} end
# File lib/protobuf/active_record/serialization.rb, line 23 def _protobuf_field_options @_protobuf_field_options ||= {} end
# File lib/protobuf/active_record/serialization.rb, line 27 def _protobuf_field_symbol_transformers @_protobuf_field_symbol_transformers ||= {} end
# File lib/protobuf/active_record/serialization.rb, line 215 def _protobuf_field_transformer_object(field) _protobuf_field_transformers[field] end
# File lib/protobuf/active_record/serialization.rb, line 31 def _protobuf_field_transformers @_protobuf_field_transformers ||= {} end
# 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
# 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
# File lib/protobuf/active_record/serialization.rb, line 228 def _protobuf_nil_object(_field) NilMethodCaller.new end
# File lib/protobuf/active_record/serialization.rb, line 243 def _protobuf_symbol_transformer_object(field) FieldSymbolTransformerCaller.new(self, _protobuf_field_symbol_transformers[field]) end
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
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
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