Sha256: 1ca437e229c5e29271b4815f6d144a51adf727e4f51705789050038c910b6591

Contents?: true

Size: 1.35 KB

Versions: 7

Compression:

Stored size: 1.35 KB

Contents

module DataMapper
  module Types
    module Paranoid
      module Base
        def self.included(model)
          model.extend ClassMethods
          model.instance_variable_set(:@paranoid_properties, {})
        end

        def paranoid_destroy
          model.paranoid_properties.each do |name, block|
            attribute_set(name, block.call(self))
          end
          save_self
          self.persistence_state = Resource::PersistenceState::Immutable.new(self)
          true
        end

      private

        # @api private
        def _destroy(execute_hooks = true)
          return false unless saved?
          if execute_hooks
            paranoid_destroy
          else
            super
          end
        end
      end # module Base

      module ClassMethods
        def inherited(model)
          model.instance_variable_set(:@paranoid_properties, @paranoid_properties.dup)
          super
        end

        # @api public
        def with_deleted
          with_exclusive_scope({}) { block_given? ? yield : all }
        end

        # @api private
        def paranoid_properties
          @paranoid_properties
        end

        # @api private
        def set_paranoid_property(name, &block)
          paranoid_properties[name] = block
        end
      end # module ClassMethods
    end # module Paranoid
  end # module Types
end # module DataMapper

Version data entries

7 entries across 7 versions & 2 rubygems

Version Path
ardm-types-1.2.3 lib/dm-types/paranoid/base.rb
ardm-types-1.2.2 lib/dm-types/paranoid/base.rb
dm-types-1.2.2 lib/dm-types/paranoid/base.rb
dm-types-1.2.1 lib/dm-types/paranoid/base.rb
dm-types-1.2.0 lib/dm-types/paranoid/base.rb
dm-types-1.2.0.rc2 lib/dm-types/paranoid/base.rb
dm-types-1.2.0.rc1 lib/dm-types/paranoid/base.rb