Sha256: 6bedfd7e11e295236102af69128aae55ce4cab889d77bffa054f79576959613e
Contents?: true
Size: 1.22 KB
Versions: 3
Compression:
Stored size: 1.22 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 << 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
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
pupper-0.2.0 | lib/pupper/trackable_attributes.rb |
pupper-0.1.13 | lib/pupper/trackable_attributes.rb |
pupper-0.1.12 | lib/pupper/trackable_attributes.rb |