Module: Gecko::Helpers::SerializationHelper

Included in:
Record::Base, Record::Variant::VariantLocation, Record::Variant::VariantPrice
Defined in:
lib/gecko/helpers/serialization_helper.rb

Overview

Provides serialization to records

Instance Method Summary collapse

Instance Method Details

#_serialize(serialized) ⇒ String

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Serialize an attribute



82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/gecko/helpers/serialization_helper.rb', line 82

def _serialize(serialized) # rubocop:disable Metrics/MethodLength
  if serialized.respond_to?(:serializable_hash)
    serialized.serializable_hash
  else
    case serialized
    when Array
      serialized.map { |attr| _serialize(attr) }
    when BigDecimal
      serialized.to_s("F")
    else
      serialized
    end
  end
end

#as_jsonHash

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a full JSON representation of a record

Examples:

product.as_json #=> {product: {id: 12, name: "Big"}}


15
16
17
18
19
# File 'lib/gecko/helpers/serialization_helper.rb', line 15

def as_json
  {
    root => serializable_hash
  }
end

#rootString

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Return JSON root key for a record

Examples:

product.root #=> "product"


105
106
107
# File 'lib/gecko/helpers/serialization_helper.rb', line 105

def root
  self.class.demodulized_name.underscore.to_sym
end

#serializable_hashHash

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Return a serialized hash of the record’s attributes

Examples:

product.serializable_hash #=> {id: 12, name: "Big"}


29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/gecko/helpers/serialization_helper.rb', line 29

def serializable_hash
  attribute_hash = {}
  attribute_set.each do |attribute|
    next unless writeable?(attribute)

    serialize_attribute(attribute_hash, attribute)
  end

  embedded_collections_for_serialization.each do |collection|
    serialize_new_records(attribute_hash, collection)
  end

  attribute_hash
end

#serialize_attribute(attribute_hash, attribute) ⇒ undefined

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Store the serialized representation of a single attribute



71
72
73
# File 'lib/gecko/helpers/serialization_helper.rb', line 71

def serialize_attribute(attribute_hash, attribute)
  attribute_hash[attribute.name] = _serialize(attributes[attribute.name])
end

#writeable?(attribute) ⇒ Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns true if an attribute can be serialized



49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/gecko/helpers/serialization_helper.rb', line 49

def writeable?(attribute)
  return if attribute.options[:readonly]
  return true unless attribute.options[:writeable_on]

  case attribute.options[:writeable_on]
  when :update
    persisted?
  when :create
    !persisted?
  else
    raise ArgumentError
  end
end