Sha256: ee34be83a7775cfcc2548dee0f5e0239e3d412b6a588bac098e5f2fcea7ec477
Contents?: true
Size: 1.67 KB
Versions: 1
Compression:
Stored size: 1.67 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 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] super end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
json_api_client-1.0.0.beta6 | lib/json_api_client/helpers/dirty.rb |