Sha256: 8d053e58a21276a606dbe6005715481ac65530aed2dc1fc7537797be698fd7b5
Contents?: true
Size: 1.99 KB
Versions: 2
Compression:
Stored size: 1.99 KB
Contents
require 'active_support/concern' module Ardm class Property module ParanoidBase extend ActiveSupport::Concern included do extend ClassMethods instance_variable_set(:@paranoid_properties, {}) instance_variable_set(:@paranoid_scopes, []) end def paranoid_destroy self.class.paranoid_properties.each do |name, block| attribute_set(name, block.call(self)) end save @readonly = true true end def destroy(execute_hooks = true) # NOTE: changed behavior because AR doesn't call hooks on destroying new objects return false if new_record? if execute_hooks run_callbacks :destroy do paranoid_destroy end else super end end module ClassMethods def inherited(model) model.instance_variable_set(:@paranoid_properties, @paranoid_properties.dup) model.instance_variable_set(:@paranoid_scopes, @paranoid_scopes.dup) super end # @api public def with_deleted(&block) with_deleted_scope = self.scoped.with_default_scope paranoid_scopes.each do |cond| with_deleted_scope.where_values.delete(cond) end if block_given? with_deleted_scope.scoping(&block) else with_deleted_scope.all end end # @api private def paranoid_properties @paranoid_properties end def paranoid_scopes @paranoid_scopes end # @api private def set_paranoid_property(name, &block) paranoid_properties[name] = block end def set_paranoid_scope(conditions) paranoid_scope = conditions paranoid_scopes << paranoid_scope default_scope { where(paranoid_scope) } end end # module ClassMethods end # module ParanoidBase end # class Property end # module Ardm
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
ardm-0.1.0 | lib/ardm/property/support/paranoid_base.rb |
ardm-0.0.1 | lib/ardm/property/support/paranoid_base.rb |