Module: Draftsman::AttributesSerialization

Defined in:
lib/draftsman/attributes_serialization.rb

Defined Under Namespace

Classes: NoOpAttribute, SerializedAttribute

Constant Summary collapse

NO_OP_ATTRIBUTE =
NoOpAttribute.new

Instance Method Summary collapse

Instance Method Details

#alter_attributes_for_draftsman(serializer, attributes) ⇒ Object



59
60
61
62
63
64
65
66
67
# File 'lib/draftsman/attributes_serialization.rb', line 59

def alter_attributes_for_draftsman(serializer, attributes)
  # Don't serialize before values before inserting into columns of type
  # `JSON` on `PostgreSQL` databases.
  return attributes if self.draft_class.object_col_is_json?

  attributes.each do |key, value|
    attributes[key] = type_for_attribute(key).send(serializer, value)
  end
end

#alter_draft_attribute_changes(serializer, changes) ⇒ Object



78
79
80
81
82
83
84
85
86
87
# File 'lib/draftsman/attributes_serialization.rb', line 78

def alter_draft_attribute_changes(serializer, changes)
  # Don't serialize before values before inserting into columns of type
  # `JSON` on `PostgreSQL` databases.
  return changes if self.draft_class.object_changes_col_is_json?

  changes.clone.each do |key, change|
    type = type_for_attribute(key)
    changes[key] = Array(change).map { |value| type.send(serializer, value) }
  end
end

#serialize_attributes_for_draftsman(attributes) ⇒ Object

Used for ‘Version#object` attribute.



51
52
53
# File 'lib/draftsman/attributes_serialization.rb', line 51

def serialize_attributes_for_draftsman(attributes)
  alter_attributes_for_draftsman(SERIALIZE, attributes)
end

#serialize_draft_attribute_changes(changes) ⇒ Object

Used for Version#object_changes attribute.



70
71
72
# File 'lib/draftsman/attributes_serialization.rb', line 70

def serialize_draft_attribute_changes(changes)
  alter_draft_attribute_changes(SERIALIZE, changes)
end

#type_for_attribute(attr_name) ⇒ Object

Backport Rails 4.2 and later’s ‘type_for_attribute` to build on a common interface.



38
39
40
# File 'lib/draftsman/attributes_serialization.rb', line 38

def type_for_attribute(attr_name)
  serialized_attribute_types[attr_name.to_s] || NO_OP_ATTRIBUTE
end

#unserialize_attributes_for_draftsman(attributes) ⇒ Object



55
56
57
# File 'lib/draftsman/attributes_serialization.rb', line 55

def unserialize_attributes_for_draftsman(attributes)
  alter_attributes_for_draftsman(DESERIALIZE, attributes)
end

#unserialize_draft_attribute_changes(changes) ⇒ Object



74
75
76
# File 'lib/draftsman/attributes_serialization.rb', line 74

def unserialize_draft_attribute_changes(changes)
  alter_draft_attribute_changes(DESERIALIZE, changes)
end