Sha256: 0e87b94bf5b2d298c03a415c497c701475c146a27a0bea859e9d49e74862e589
Contents?: true
Size: 1.3 KB
Versions: 1
Compression:
Stored size: 1.3 KB
Contents
module Soulless module Dirty def self.included(base) base.class_eval do def initialize(params = {}) super init_dirty(attribute_set.map { |a| a.name }) end private def init_dirty(attributes) define_dirty_attributes(attributes) define_dirty_methods(attributes) @changed_attributes = {} end def changes_applied @previously_changed = changed @changed_attributes = {} end def define_dirty_attributes(attributes) self.class.define_attribute_methods(attributes) end def define_dirty_methods(attributes) attributes.each do |attribute| define_dirty_reader(attribute) define_dirty_writer(attribute) end end def define_dirty_reader(name) self.class.send(:define_method, "#{name}".to_sym) do instance_variable_get("@#{name}") end end def define_dirty_writer(name) self.class.send(:define_method, "#{name}=".to_sym) do |value| send("#{name}_will_change!") unless instance_variable_get("@#{name}") == value super(value) end end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
soulless-0.3.0 | lib/soulless/dirty.rb |