Sha256: ca3ff1f18110ac142859b3da000686ee98ab3e602922f1f16e0b5f9b91c5f94b
Contents?: true
Size: 1.23 KB
Versions: 2
Compression:
Stored size: 1.23 KB
Contents
module Pupper module TrackableAttributes def self.included(base) base.send :include, ActiveModel::Dirty base.send :include, InstanceMethods class << base prepend ClassMethods end end module InstanceMethods def attributes @attributes ||= {} end def new_changes changes.transform_values(&:last) end def reload! restore_attributes end def rollback! restore_attributes end def refresh(**attrs) assign_attributes(**attrs) changes_applied end end module ClassMethods def _attributes @_attributes ||= [] end def _attributes=(attrs) @_attributes = attrs end def attr_accessor(*attrs) # override the default so that we can hook into the created methods define_attribute_methods(*attrs) _attributes.concat(attrs) attrs.each do |attr| define_method attr do attributes[attr] end define_method "#{attr}=" do |value| send("#{attr}_will_change!") unless value == send(attr) attributes[attr] = value end end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
pupper-0.2.2 | lib/pupper/trackable_attributes.rb |
pupper-0.2.1 | lib/pupper/trackable_attributes.rb |