Sha256: 3cfa51552ebaab8e54272371e52b96d18d63eea16a2c638c6e24bb914b66a58d

Contents?: true

Size: 1.1 KB

Versions: 5

Compression:

Stored size: 1.1 KB

Contents

# encoding: UTF-8
module MongoMapper
  module Plugins
    module Dirty
      extend ActiveSupport::Concern
      include ::ActiveModel::Dirty

      module ClassMethods
        def create_accessors_for(key)
          super.tap do
            define_attribute_methods([key.name])
          end
        end
      end

      def save_to_collection(*)
        super.tap do
          changes_applied
        end
      end

      def reload!
        super.tap do
          clear_changes_information
        end
      end

    private

      def write_key(key_name, value)
        key_name = unalias_key(key_name)

        if !keys.key?(key_name)
          super
        else
          # find the MongoMapper::Plugins::Keys::Key
          _, key = keys.detect { |n, v| n == key_name }

          # typecast to the new value
          old_value = read_key(key_name)
          new_value = key.set(value)

          # only mark changed if really changed value (after typecasting)
          unless old_value == new_value
            attribute_will_change!(key_name)
          end

          super
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
mongo_mapper-0.17.0 lib/mongo_mapper/plugins/dirty.rb
mongo_mapper-0.16.0 lib/mongo_mapper/plugins/dirty.rb
mongo_mapper-0.15.6 lib/mongo_mapper/plugins/dirty.rb
mongo_mapper-0.15.5 lib/mongo_mapper/plugins/dirty.rb
mongo_mapper-0.15.4 lib/mongo_mapper/plugins/dirty.rb