module Aws::Record::DirtyTracking

Public Class Methods

included(sub_class) click to toggle source
# File lib/aws-record/record/dirty_tracking.rb, line 18
def self.included(sub_class)
  sub_class.extend(DirtyTrackingClassMethods)
end

Public Instance Methods

attribute_dirty!(name) click to toggle source

Mark that an attribute is changing. This is useful in situations where it is necessary to track that the value of an attribute is changing in-place.

@example

class Model
  include Aws::Record
  integer_attr :id,   hash_key: true
  string_attr  :name
end

model.name        # => 'Alex'
model.name_dirty? # => false
model.name_was    # => 'Alex'

model.name << 'i'
model.name        # => 'Alexi'

# The change was made in place. Since the String instance representing
# the value of name is the same as it was originally, the change is not
# detected.
model.name_dirty? # => false
model.name_was    # => 'Alexi'

model.name_dirty!
model.name_dirty? # => true
model.name_was    # => 'Alexi'

model.name << 's'
model.name        # => 'Alexis'
model.name_dirty? # => true
model.name_was    # => 'Alexi'

@param [String, Symbol] name The name of the attribute to mark as

changing.
# File lib/aws-record/record/dirty_tracking.rb, line 95
def attribute_dirty!(name)
  @data.attribute_dirty!(name)
end
attribute_dirty?(name) click to toggle source

Returns true if the specified attribute has any dirty changes, false otherwise.

@example

class Model
  include Aws::Record
  integer_attr :id, hash_key: true
  string_attr  :name
end

model.name_dirty? # => false
model.name     # => 'Alex'
model.name = 'Nick'
model.name_dirty? # => true

@param [String, Symbol] name The name of the attribute to to check for dirty changes. @return [Boolean] true if the specified attribute has any dirty changes, false otherwise.

# File lib/aws-record/record/dirty_tracking.rb, line 38
def attribute_dirty?(name)
  @data.attribute_dirty?(name)
end
attribute_was(name) click to toggle source

Returns the original value of the specified attribute.

@example

class Model
  include Aws::Record
  integer_attr :id,   hash_key: true
  string_attr  :name
end

model.name         # => 'Alex'
model.name = 'Nick'
model.name_was     # => 'Alex'

@param [String, Symbol] name The name of the attribute to retrieve the original value of. @return [Object] The original value of the specified attribute.

# File lib/aws-record/record/dirty_tracking.rb, line 57
def attribute_was(name)
  @data.attribute_was(name)
end
clean!() click to toggle source

@api private

# File lib/aws-record/record/dirty_tracking.rb, line 267
def clean!
  @data.clean!
end
destroyed?() click to toggle source

Returns true if the model has been destroyed, false otherwise.

@example

class Model
  include Aws::Record
  integer_attr :id, hash_key: true
  string_attr  :name
end

model = Model.new
model.destroyed? # => false
model.save
model.destroyed? # => false
model.delete! 
model.destroyed? # => true

@return [Boolean] true if the model has been destroyed, false

otherwise.
# File lib/aws-record/record/dirty_tracking.rb, line 198
def destroyed?
  @data.destroyed?
end
dirty() click to toggle source

Returns an array with the name of the attributes with dirty changes.

@example

class Model
  include Aws::Record
  integer_attr :id, hash_key: true
  string_attr  :name
end

model.dirty # => []
model.name  # => 'Alex'
model.name = 'Nick'
model.dirty # => ['name']

@return [Array] The names of attributes with dirty changes.

# File lib/aws-record/record/dirty_tracking.rb, line 114
def dirty
  @data.dirty
end
dirty?() click to toggle source

Returns true if any attributes have dirty changes, false otherwise.

@example

class Model
  include Aws::Record
  integer_attr :id, hash_key: true
  string_attr  :name
end

model.dirty? # => false
model.name   # => 'Alex'
model.name = 'Nick'
model.dirty? # => true

@return [Boolean] true if any attributes have dirty changes, false

otherwise.
# File lib/aws-record/record/dirty_tracking.rb, line 134
def dirty?
  @data.dirty?
end
new_record?() click to toggle source

Returns true if the model is newly initialized, false otherwise.

@example

class Model
  include Aws::Record
  integer_attr :id, hash_key: true
  string_attr  :name
end

model = Model.new
model.new_record? # => true
model.save
model.new_record? # => false

@return [Boolean] true if the model is newly initialized, false

otherwise.
# File lib/aws-record/record/dirty_tracking.rb, line 176
def new_record?
  @data.new_record?
end
persisted?() click to toggle source

Returns true if the model is not new and has not been deleted, false otherwise.

@example

class Model
  include Aws::Record
  integer_attr :id, hash_key: true
  string_attr  :name
end

model = Model.new
model.persisted? # => false
model.save
model.persisted? # => true
model.delete!
model.persisted? # => false

@return [Boolean] true if the model is not new and has not been deleted, false

otherwise.
# File lib/aws-record/record/dirty_tracking.rb, line 156
def persisted?
  @data.persisted?
end
reload!() click to toggle source

Fetches attributes for this instance of an item from Amazon DynamoDB using its primary key and the +find(*)+ class method.

@raise [Aws::Record::Errors::NotFound] if no record exists in the

database matching the primary key of the item instance.

@return [self] Returns the item instance.

# File lib/aws-record/record/dirty_tracking.rb, line 209
def reload!
  primary_key = self.class.keys.values.inject({}) do |memo, key| 
    memo[key] = send(key)
    memo 
  end

  record = self.class.find(primary_key)

  unless record.nil?
    @data = record.instance_variable_get("@data")
  else
    raise Errors::NotFound.new("No record found")
  end

  clean!

  self
end
rollback!(names = dirty) click to toggle source

Restores all attributes to their original values.

@example

class Model
  include Aws::Record
  integer_attr :id, hash_key: true
  string_attr  :name
end

model.name # => 'Alex'
model.name = 'Nick'
model.rollback!
model.name # => 'Alex'

@param [Array, String, Symbol] names The names of attributes to restore.

# File lib/aws-record/record/dirty_tracking.rb, line 262
def rollback!(names = dirty)
  Array(names).each { |name| rollback_attribute!(name) }
end
rollback_attribute!(name) click to toggle source

Restores the attribute specified to its original value.

@example

class Model
  include Aws::Record
  integer_attr :id, hash_key: true
  string_attr  :name
end

model.name # => 'Alex'
model.name = 'Nick'
model.rollback_attribute!(:name)
model.name # => 'Alex'

@param [String, Symbol] name The name of the attribute to restore

# File lib/aws-record/record/dirty_tracking.rb, line 243
def rollback_attribute!(name)
  @data.rollback_attribute!(name)
end
save(*) click to toggle source

@private

@override save(*)

Calls superclass method
# File lib/aws-record/record/dirty_tracking.rb, line 274
def save(*)
  super.tap { clean! }
end