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

Parameters:

  • serialized (Object)

    The attribute to serialize

Returns:

  • (String)


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"}}

Returns:

  • (Hash)


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"

Returns:

  • (String)


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"}

Returns:

  • (Hash)


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

Parameters:

  • attribute_hash (Hash)

    Serialized record being iterated over

  • attribute (Virtus::Attribute)

    The attribute being serialized

Returns:

  • (undefined)


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

Returns:

  • (Boolean)


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