Sha256: 184a256880ddb999d5019dc05901abe2a7086f1f0e585ce5346aa475d4f19b56
Contents?: true
Size: 1.23 KB
Versions: 1
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 changed_attributes 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
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
pupper-0.1.11 | lib/pupper/trackable_attributes.rb |