Module: MongoModel::AttributeMethods::Dirty
- Extended by:
- ActiveSupport::Concern
- Includes:
- ActiveModel::AttributeMethods
- Included in:
- EmbeddedDocument
- Defined in:
- lib/mongomodel/concerns/attribute_methods/dirty.rb
Instance Method Summary collapse
- #attribute_changed?(attr, from: OPTION_NOT_GIVEN, to: OPTION_NOT_GIVEN) ⇒ Boolean
- #attribute_previously_changed?(attr) ⇒ Boolean
- #attribute_was(attr) ⇒ Object
- #changed ⇒ Object
- #changed? ⇒ Boolean
- #changed_attributes ⇒ Object (also: #attributes_changed_by_setter)
- #changes ⇒ Object
-
#original_attributes ⇒ Object
Returns the attributes as they were before any changes were made to the document.
- #previous_changes ⇒ Object
- #restore_attributes(attributes = changed) ⇒ Object
- #write_attribute(key, value) ⇒ Object
Instance Method Details
#attribute_changed?(attr, from: OPTION_NOT_GIVEN, to: OPTION_NOT_GIVEN) ⇒ Boolean
40 41 42 43 44 |
# File 'lib/mongomodel/concerns/attribute_methods/dirty.rb', line 40 def attribute_changed?(attr, from: OPTION_NOT_GIVEN, to: OPTION_NOT_GIVEN) !!changes_include?(attr) && (to == OPTION_NOT_GIVEN || to == __send__(attr)) && (from == OPTION_NOT_GIVEN || from == changed_attributes[attr]) end |
#attribute_previously_changed?(attr) ⇒ Boolean
50 51 52 |
# File 'lib/mongomodel/concerns/attribute_methods/dirty.rb', line 50 def attribute_previously_changed?(attr) previous_changes.include?(attr) end |
#attribute_was(attr) ⇒ Object
46 47 48 |
# File 'lib/mongomodel/concerns/attribute_methods/dirty.rb', line 46 def attribute_was(attr) attribute_changed?(attr) ? changed_attributes[attr] : __send__(attr) end |
#changed ⇒ Object
24 25 26 |
# File 'lib/mongomodel/concerns/attribute_methods/dirty.rb', line 24 def changed changed_attributes.keys end |
#changed? ⇒ Boolean
20 21 22 |
# File 'lib/mongomodel/concerns/attribute_methods/dirty.rb', line 20 def changed? changed_attributes.present? end |
#changed_attributes ⇒ Object Also known as: attributes_changed_by_setter
36 37 38 |
# File 'lib/mongomodel/concerns/attribute_methods/dirty.rb', line 36 def changed_attributes @changed_attributes ||= ActiveSupport::HashWithIndifferentAccess.new end |
#changes ⇒ Object
28 29 30 |
# File 'lib/mongomodel/concerns/attribute_methods/dirty.rb', line 28 def changes ActiveSupport::HashWithIndifferentAccess[changed.map { |attr| [attr, attribute_change(attr)] }] end |
#original_attributes ⇒ Object
Returns the attributes as they were before any changes were made to the document.
74 75 76 |
# File 'lib/mongomodel/concerns/attribute_methods/dirty.rb', line 74 def original_attributes {}.with_indifferent_access.merge(attributes).merge(changed_attributes) end |
#previous_changes ⇒ Object
32 33 34 |
# File 'lib/mongomodel/concerns/attribute_methods/dirty.rb', line 32 def previous_changes @previously_changed ||= ActiveSupport::HashWithIndifferentAccess.new end |
#restore_attributes(attributes = changed) ⇒ Object
54 55 56 |
# File 'lib/mongomodel/concerns/attribute_methods/dirty.rb', line 54 def restore_attributes(attributes = changed) attributes.each { |attr| restore_attribute! attr } end |
#write_attribute(key, value) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/mongomodel/concerns/attribute_methods/dirty.rb', line 58 def write_attribute(key, value) attr = key.to_sym # The attribute already has an unsaved change. if changed_attributes.include?(attr) old = changed_attributes[attr] changed_attributes.delete(attr) if value == old else old = clone_attribute_value(attr) changed_attributes[attr] = old unless value == old end super end |