class ActiveModel::AttributeMutationTracker

Experimental RBS support (using type sampling data from the type_fusion project).

# sig/active_model/attribute_mutation_tracker.rbs

class ActiveModel::AttributeMutationTracker
  def attribute_changed?: (String attr_name) -> false
  def changed?: (String attr_name, from: Object, to: Object) -> false
  def forced_changes: () -> untyped
  def initialize: (ActiveModel::AttributeSet attributes) -> void
end

: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)

Experimental RBS support (using type sampling data from the type_fusion project).

def attribute_changed?: (String attr_name) -> false

This signature was generated using 10 samples from 2 applications.

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)

Experimental RBS support (using type sampling data from the type_fusion project).

def changed?: (String attr_name, from: Object, to: Object) -> false

This signature was generated using 8 samples from 2 applications.

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

Experimental RBS support (using type sampling data from the type_fusion project).

def forced_changes: () -> untyped

This signature was generated using 11 samples from 2 applications.

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)

Experimental RBS support (using type sampling data from the type_fusion project).

def initialize: (ActiveModel::AttributeSet attributes) -> void

This signature was generated using 2 samples from 1 application.

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