Module: MongoMapper::Dirty
- Defined in:
- lib/mongo_mapper/dirty.rb
Constant Summary collapse
- DIRTY_SUFFIXES =
['_changed?', '_change', '_will_change!', '_was']
Class Method Summary collapse
Instance Method Summary collapse
-
#changed ⇒ Object
List of keys with unsaved changes.
- #changed? ⇒ Boolean
-
#changes ⇒ Object
Map of changed attrs => [original value, new value].
- #method_missing(method, *args, &block) ⇒ Object
-
#save_with_dirty(*args) ⇒ Object
Attempts to
save
the record and clears changed keys if successful. -
#save_with_dirty!(*args) ⇒ Object
Attempts to
save!
the record and clears changed keys if successful.
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, &block) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/mongo_mapper/dirty.rb', line 11 def method_missing(method, *args, &block) if method.to_s =~ /(_changed\?|_change|_will_change!|_was)$/ method_suffix = $1 key = method.to_s.gsub(method_suffix, '') if key_names.include?(key) case method_suffix when '_changed?' key_changed?(key) when '_change' key_change(key) when '_will_change!' key_will_change!(key) when '_was' key_was(key) end else super end else super end end |
Class Method Details
.included(base) ⇒ Object
5 6 7 8 9 |
# File 'lib/mongo_mapper/dirty.rb', line 5 def self.included(base) base.alias_method_chain :write_attribute, :dirty base.alias_method_chain :save, :dirty base.alias_method_chain :save!, :dirty end |
Instance Method Details
#changed ⇒ Object
List of keys with unsaved changes.
person.changed # => []
person.name = 'bob'
person.changed # => ['name']
43 44 45 |
# File 'lib/mongo_mapper/dirty.rb', line 43 def changed changed_keys.keys end |
#changed? ⇒ Boolean
35 36 37 |
# File 'lib/mongo_mapper/dirty.rb', line 35 def changed? !changed_keys.empty? end |
#changes ⇒ Object
Map of changed attrs => [original value, new value].
person.changes # => {}
person.name = 'bob'
person.changes # => { 'name' => ['bill', 'bob'] }
51 52 53 |
# File 'lib/mongo_mapper/dirty.rb', line 51 def changes changed.inject({}) { |h, attribute| h[attribute] = key_change(attribute); h } end |
#save_with_dirty(*args) ⇒ Object
Attempts to save
the record and clears changed keys if successful.
56 57 58 59 60 61 |
# File 'lib/mongo_mapper/dirty.rb', line 56 def save_with_dirty(*args) #:nodoc: if status = save_without_dirty(*args) changed_keys.clear end status end |
#save_with_dirty!(*args) ⇒ Object
Attempts to save!
the record and clears changed keys if successful.
64 65 66 67 68 |
# File 'lib/mongo_mapper/dirty.rb', line 64 def save_with_dirty!(*args) #:nodoc: status = save_without_dirty!(*args) changed_keys.clear status end |