Sha256: fb1baa3587224918514f951b38691bb41bc43c3cb0c21e40cd434e7e39a8bcc9
Contents?: true
Size: 1.79 KB
Versions: 22
Compression:
Stored size: 1.79 KB
Contents
module JsonApiClient module Helpers module Dirty def changed? changed_attributes.present? end def changed changed_attributes.keys end def changed_attributes @changed_attributes ||= ActiveSupport::HashWithIndifferentAccess.new end def clear_changes_information @changed_attributes = ActiveSupport::HashWithIndifferentAccess.new end def forget_change!(attr) @changed_attributes.delete(attr.to_s) end def set_all_attributes_dirty attributes.each do |k, v| set_attribute_was(k, v) end end def attribute_will_change!(attr) return if attribute_changed?(attr) set_attribute_was(attr, attributes[attr]) end def set_attribute_was(attr, value) begin value = value.duplicable? ? value.clone : value changed_attributes[attr] = value rescue TypeError, NoMethodError end end def attribute_was(attr) # :nodoc: attribute_changed?(attr) ? changed_attributes[attr] : attributes[attr] end def attribute_changed?(attr) changed.include?(attr.to_s) end def attribute_change(attr) [changed_attributes[attr], attributes[attr]] if attribute_changed?(attr) end protected def method_missing(method, *args, &block) if method.to_s =~ /^(.*)_changed\?$/ has_attribute?($1) ? attribute_changed?($1) : nil elsif method.to_s =~ /^(.*)_was$/ has_attribute?($1) ? attribute_was($1) : nil else super end end def set_attribute(name, value) attribute_will_change!(name) if value != attributes[name] || !attributes.has_key?(name) super end end end end
Version data entries
22 entries across 22 versions & 2 rubygems
Version | Path |
---|---|
json_api_client-1.10.0 | lib/json_api_client/helpers/dirty.rb |
json_api_client-1.9.0 | lib/json_api_client/helpers/dirty.rb |