Sha256: 785bec9e7a18b0d7b264f83cd79b163335b078d1bae2ad6a1065f2cf6dc8f210

Contents?: true

Size: 1 KB

Versions: 17

Compression:

Stored size: 1 KB

Contents

module Dynamoid
  module Dirty
    extend ActiveSupport::Concern
    include ActiveModel::Dirty

    module ClassMethods
      def from_database(*)
        super.tap { |d| d.changed_attributes.clear }
      end
    end

    def save(*)
      clear_changes { super }
    end

    def update!(*)
      ret = super
      clear_changes #update! completely reloads all fields on the class, so any extant changes are wiped out
      ret
    end

    def reload
      super.tap { clear_changes }
    end

    def clear_changes
      previous = changes
      (block_given? ? yield : true).tap do |result|
        unless result == false #failed validation; nil is OK.
          @previously_changed = previous
          changed_attributes.clear
        end
      end
    end

    def write_attribute(name, value)
      attribute_will_change!(name) unless self.read_attribute(name) == value
      super
    end

    protected

    def attribute_method?(attr)
      super || self.class.attributes.has_key?(attr.to_sym)
    end
  end
end

Version data entries

17 entries across 17 versions & 4 rubygems

Version Path
dynamoid-1.3.4 lib/dynamoid/dirty.rb
dynamoid-1.3.3 lib/dynamoid/dirty.rb
dynamoid-1.3.2 lib/dynamoid/dirty.rb
dynamoid-1.3.1 lib/dynamoid/dirty.rb
dynamoid-1.3.0 lib/dynamoid/dirty.rb
synamoid-1.2.1 lib/dynamoid/dirty.rb
dynamoid-1.2.1 lib/dynamoid/dirty.rb
dynamoid-1.2.0 lib/dynamoid/dirty.rb
dynamoid-edge-1.1.2 lib/dynamoid/dirty.rb
dynamoid-edge-1.1.1 lib/dynamoid/dirty.rb
dynamoid-edge-1.1.0 lib/dynamoid/dirty.rb
dynamoid-1.1.0 lib/dynamoid/dirty.rb
dynamoid-1.0.0 lib/dynamoid/dirty.rb
dynamoid-moda-0.7.2 lib/dynamoid/dirty.rb
dynamoid-moda-0.7.1 lib/dynamoid/dirty.rb
dynamoid-0.7.1 lib/dynamoid/dirty.rb
dynamoid-0.7.0 lib/dynamoid/dirty.rb