Sha256: 80a9be203cc5356c57ebe7829c356aff2be5dbf75d3f09f8b4fec353126bf5fb
Contents?: true
Size: 1.55 KB
Versions: 2
Compression:
Stored size: 1.55 KB
Contents
require 'ice_nine' require 'ice_nine/core_ext/object' module MemoryModel::Base::Actionable extend ActiveSupport::Concern included do define_model_callbacks :create, :update, :save, :destroy attr_reader :timestamp end VALID_IVARS = [ :@deleted, :@attributes, :@timestamp, :@version ] def commit @timestamp = Time.now @version = SecureRandom.hex(6) self.class.insert self self end def delete @deleted = true commit freeze end def deleted? !!@deleted end def deleted_at deleted? ? @timestamp : nil end def destroy run_callbacks :destroy do delete end end def dup deep_dup end def deep_dup Marshal.load Marshal.dump self end def freeze instance_variables.reject { |ivar| ivar.in? VALID_IVARS }.each do |ivar| remove_instance_variable ivar if instance_variable_defined?(ivar) end instance_variables.each { |ivar| instance_variable_get(ivar).freeze } deep_freeze super end def save callback = persisted? ? :update : :create run_callbacks callback do run_callbacks :save do commit end end end def restore instance = frozen? ? self.dup : self instance.instance_variable_set :@deleted, false instance.save instance end module ClassMethods def create(attributes={}) new(attributes).save end def delete_all all.map(&:delete).reject(&:deleted?).empty? end def destroy_all all.map(&:destroy).reject(&:deleted?).empty? end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
memory_model-0.0.2 | lib/memory_model/base/actionable.rb |
memory_model-0.0.1 | lib/memory_model/base/actionable.rb |