Sha256: 6e1f68bed5ad2e8035add021e481828dff9038fa965c494ba32c8a81ef8983c1
Contents?: true
Size: 1.55 KB
Versions: 5
Compression:
Stored size: 1.55 KB
Contents
require 'active_model/dirty' # Overrides persistence methods, providing support for dirty tracking. # module ActiveRemote module Dirty def self.included(klass) klass.class_eval do include ActiveModel::Dirty end end # Override #reload to provide dirty tracking. # def reload(*) super.tap do @previously_changed.try(:clear) @changed_attributes.clear end end # Override #save to store changes as previous changes then clear them. # def save(*) if status = super @previously_changed = changes @changed_attributes.clear end status end # Override #save to store changes as previous changes then clear them. # def save!(*) super.tap do @previously_changed = changes @changed_attributes.clear end end # Override #serialize_records so that we can clear changes after # initializing records returned from a search. # def serialize_records(*) if serialized_records = super serialized_records.each do |record| record.previous_changes.try(:clear) record.changed_attributes.try(:clear) end end end private # Override ActiveAttr's attribute= method so we can provide support for # ActiveModel::Dirty. # def attribute=(name, value) __send__("#{name}_will_change!") unless value == self[name] super end # Override #update to only send changed attributes. # def update(*) super(changed) end end end
Version data entries
5 entries across 5 versions & 1 rubygems