class ActiveModel::AttributeMutationTracker
:nodoc:
def any_changes?
def any_changes? attr_names.any? { |attr| changed?(attr) } end
def attr_names
def attr_names attributes.keys end
def attribute_changed?(attr_name)
def attribute_changed?(attr_name) forced_changes.include?(attr_name) || !!attributes[attr_name].changed? end
def change_to_attribute(attr_name)
def change_to_attribute(attr_name) if changed?(attr_name) [original_value(attr_name), fetch_value(attr_name)] end end
def changed?(attr_name, from: OPTION_NOT_GIVEN, to: OPTION_NOT_GIVEN)
def changed?(attr_name, from: OPTION_NOT_GIVEN, to: OPTION_NOT_GIVEN) attribute_changed?(attr_name) && (OPTION_NOT_GIVEN == from || original_value(attr_name) == type_cast(attr_name, from)) && (OPTION_NOT_GIVEN == to || fetch_value(attr_name) == type_cast(attr_name, to)) end
def changed_attribute_names
def changed_attribute_names attr_names.select { |attr_name| changed?(attr_name) } end
def changed_in_place?(attr_name)
def changed_in_place?(attr_name) attributes[attr_name].changed_in_place? end
def changed_values
def changed_values attr_names.each_with_object({}.with_indifferent_access) do |attr_name, result| if changed?(attr_name) result[attr_name] = original_value(attr_name) end end end
def changes
def changes attr_names.each_with_object({}.with_indifferent_access) do |attr_name, result| if change = change_to_attribute(attr_name) result.merge!(attr_name => change) end end end
def fetch_value(attr_name)
def fetch_value(attr_name) attributes.fetch_value(attr_name) end
def force_change(attr_name)
def force_change(attr_name) forced_changes[attr_name] = fetch_value(attr_name) end
def forced_changes
def forced_changes @forced_changes ||= {} end
def forget_change(attr_name)
def forget_change(attr_name) attributes[attr_name] = attributes[attr_name].forgetting_assignment forced_changes.delete(attr_name) end
def initialize(attributes)
def initialize(attributes) @attributes = attributes end
def original_value(attr_name)
def original_value(attr_name) attributes[attr_name].original_value end
def type_cast(attr_name, value)
def type_cast(attr_name, value) attributes[attr_name].type_cast(value) end