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
- #alter_attributes_for_draftsman(serializer, attributes) ⇒ Object
- #alter_draft_attribute_changes(serializer, changes) ⇒ Object
-
#serialize_attributes_for_draftsman(attributes) ⇒ Object
Used for ‘Version#object` attribute.
-
#serialize_draft_attribute_changes(changes) ⇒ Object
Used for Version#object_changes attribute.
-
#type_for_attribute(attr_name) ⇒ Object
Backport Rails 4.2 and later’s ‘type_for_attribute` to build on a common interface.
- #unserialize_attributes_for_draftsman(attributes) ⇒ Object
- #unserialize_draft_attribute_changes(changes) ⇒ Object
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 |