class Virtus::DirtyAttribute::Session

Attributes

subject[R]

Public Class Methods

new(subject) click to toggle source
# File lib/virtus/dirty_attribute/session.rb, line 7
def initialize(subject)
  @subject = subject
end

Public Instance Methods

attribute_clean!(name) click to toggle source
# File lib/virtus/dirty_attribute/session.rb, line 23
def attribute_clean!(name)
  dirty_attributes.delete name
  original_attributes.delete name
end
clean!() click to toggle source
# File lib/virtus/dirty_attribute/session.rb, line 32
def clean!
  original_attributes.clear
  dirty_attributes.clear
end
dirty!(name, value) click to toggle source
# File lib/virtus/dirty_attribute/session.rb, line 19
def dirty!(name, value)
  dirty_attributes[name] = value
end
dirty?(name = nil) click to toggle source
# File lib/virtus/dirty_attribute/session.rb, line 28
def dirty?(name = nil)
  name ? dirty_attributes.key?(name) : dirty_attributes.any?
end
dirty_attributes() click to toggle source
# File lib/virtus/dirty_attribute/session.rb, line 15
def dirty_attributes
  @_dirty_attributes ||= {}
end
original_attributes() click to toggle source
# File lib/virtus/dirty_attribute/session.rb, line 11
def original_attributes
  @_original_attributes ||= get_original_attributes(subject).dup
end

Private Instance Methods

get_original_attributes(subject) click to toggle source

Get the original values from the instance variable directly and not the possibly overridden accessor.

This allows for accessors that are created to provide lazy loading of external resources.

Whenever something is loaded from the server is should be marked clean.

# File lib/virtus/dirty_attribute/session.rb, line 46
def get_original_attributes(subject)
  subject.class.attribute_set.each_with_object({}) do |attribute, attributes|
    name = attribute.name
    attributes[name] = subject.instance_variable_get("@#{name}")
  end
end