module MarkMapper::Plugins::PartialUpdates

Public Class Methods

new(*) click to toggle source
Calls superclass method
# File lib/mark_mapper/plugins/partial_updates.rb, line 16
def initialize(*)
  _reset_partial_updates_callback
  super
end

Public Instance Methods

fields_for_partial_update() click to toggle source
# File lib/mark_mapper/plugins/partial_updates.rb, line 21
def fields_for_partial_update
  raise PartialUpdatesDisabledError if !partial_updates

  Hash.new.tap do |hash|
    attrs = _dealiased_attributes

    hash[:set_fields] = Array.new.tap do |array|
      attrs.each do |key, value|
        if !@_last_saved_attributes.include?(key) ||
            @_last_saved_attributes[key] != value
          array << key
        end
      end
    end

    hash[:unset_fields] = @_last_saved_attributes.keys - attrs.keys
  end
end

Private Instance Methods

_dealiased_attributes() click to toggle source
# File lib/mark_mapper/plugins/partial_updates.rb, line 68
def _dealiased_attributes
  self.class.dealias_keys(attributes)
end
_reset_attributes_for_partial_update() click to toggle source
# File lib/mark_mapper/plugins/partial_updates.rb, line 72
def _reset_attributes_for_partial_update
  @_last_saved_attributes = _dealiased_attributes._mark_mapper_deep_copy_
end
_reset_partial_updates_callback() click to toggle source
# File lib/mark_mapper/plugins/partial_updates.rb, line 42
def _reset_partial_updates_callback
  _reset_attributes_for_partial_update if partial_updates
  true
end
_update(options={}) click to toggle source
Calls superclass method
# File lib/mark_mapper/plugins/partial_updates.rb, line 47
def _update(options={})
  if partial_updates
    updates = fields_for_partial_update

    set_fields = updates[:set_fields]
    unset_fields = updates[:unset_fields]

    if set_fields.any? || unset_fields.any?
      set_fields.push("_id") if !set_fields.include?("_id")
    end

    super(options.merge({
      :persistence_method => :update,
      :set_fields => set_fields,
      :unset_fields => unset_fields
    }))
  else
    super
  end
end