Module: MmPartialUpdate::Plugins::PartialUpdate::InstanceMethods
- Defined in:
- lib/mm_partial_update/plugins/partial_update.rb
Instance Method Summary collapse
- #add_updates_to_command(command) ⇒ Object
- #create_or_update_changes(options = {}) ⇒ Object
-
#persistable_changes ⇒ Object
Since we are going to persist the values directly from the changes hash, we need to make sure they are propertly readied for storage.
- #prepare_update_command ⇒ Object
- #save_changes(options = {}) ⇒ Object
- #save_changes!(options = {}) ⇒ Object
Instance Method Details
#add_updates_to_command(command) ⇒ Object
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/mm_partial_update/plugins/partial_update.rb', line 57 def add_updates_to_command(command) selector = respond_to?(:database_selector) ? database_selector : nil add_create_self_to_command(selector, command) and return if new? field_changes = persistable_changes associations.values.each do |association| if proxy = self.instance_variable_get(association.ivar) association_changes = field_changes.delete(association.name) proxy.add_updates_to_command(association_changes, command) if proxy.respond_to?(:add_updates_to_command) end end field_changes = field_changes.inject({}) do |changes,change| changes[change[0]] = change[-1][-1] changes end command.tap {|c|c.set(selector,field_changes)} end |
#create_or_update_changes(options = {}) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/mm_partial_update/plugins/partial_update.rb', line 41 def create_or_update_changes(={}) #assert_root_saved update_comment = execute_command() #callbacks and changes_only are not valid # options for regular MongoMapper saves. # clear_changes_to_subtree will pass this options # hash to downstream saves, which can errors # so they need to be removed .reject!{ |k,v|[:callbacks, :changes_only].include?(k)} clear_changes_to_subtree() end |
#persistable_changes ⇒ Object
Since we are going to persist the values directly from the changes hash, we need to make sure they are propertly readied for storage
83 84 85 86 87 88 89 90 91 |
# File 'lib/mm_partial_update/plugins/partial_update.rb', line 83 def persistable_changes changes.tap do |persistable_changes| persistable_changes.each_pair do |key_name, value| if (key = keys[key_name]) value[-1] = key.set(value[-1]) end end end end |
#prepare_update_command ⇒ Object
53 54 55 |
# File 'lib/mm_partial_update/plugins/partial_update.rb', line 53 def prepare_update_command UpdateCommand.new(self).tap { |command| add_updates_to_command(command) } end |
#save_changes(options = {}) ⇒ Object
30 31 32 33 34 |
# File 'lib/mm_partial_update/plugins/partial_update.rb', line 30 def save_changes(={}) .assert_valid_keys(:validate, :callbacks, :safe, :changes_only) .reverse_merge!(:validate=>true, :callbacks=>true) ![:validate] || valid? ? create_or_update_changes() : false end |
#save_changes!(options = {}) ⇒ Object
36 37 38 39 |
# File 'lib/mm_partial_update/plugins/partial_update.rb', line 36 def save_changes!(={}) .assert_valid_keys(:callbacks, :safe, :changes_only) save_changes() || raise(MongoMapper::DocumentNotValid.new(self)) end |