Module: Aws::Record::DirtyTracking

Included in:
Aws::Record
Defined in:
lib/aws-record/record/dirty_tracking.rb

Defined Under Namespace

Modules: DirtyTrackingClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(sub_class) ⇒ Object



18
19
20
# File 'lib/aws-record/record/dirty_tracking.rb', line 18

def self.included(sub_class)
  sub_class.extend(DirtyTrackingClassMethods)
end

Instance Method Details

#attribute_dirty!(name) ⇒ Object

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.

Examples:

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'

Parameters:

  • name (String, Symbol)

    The name of the attribute to mark as changing.



95
96
97
# File 'lib/aws-record/record/dirty_tracking.rb', line 95

def attribute_dirty!(name)
  @data.attribute_dirty!(name)
end

#attribute_dirty?(name) ⇒ Boolean

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

Examples:

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

Parameters:

  • name (String, Symbol)

    The name of the attribute to to check for dirty changes.

Returns:

  • (Boolean)

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



38
39
40
# File 'lib/aws-record/record/dirty_tracking.rb', line 38

def attribute_dirty?(name)
  @data.attribute_dirty?(name)
end

#attribute_was(name) ⇒ Object

Returns the original value of the specified attribute.

Examples:

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'   

Parameters:

  • name (String, Symbol)

    The name of the attribute to retrieve the original value of.

Returns:

  • (Object)

    The original value of the specified attribute.



57
58
59
# File 'lib/aws-record/record/dirty_tracking.rb', line 57

def attribute_was(name)
  @data.attribute_was(name)
end

#clean!Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



203
204
205
# File 'lib/aws-record/record/dirty_tracking.rb', line 203

def clean!
  @data.clean!
end

#dirtyArray

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

Examples:

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']

Returns:

  • (Array)

    The names of attributes with dirty changes.



114
115
116
# File 'lib/aws-record/record/dirty_tracking.rb', line 114

def dirty
  @data.dirty
end

#dirty?Boolean

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

Examples:

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

Returns:

  • (Boolean)

    true if any attributes have dirty changes, false otherwise.



134
135
136
# File 'lib/aws-record/record/dirty_tracking.rb', line 134

def dirty?
  @data.dirty?
end

#reload!self

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

Returns:

  • (self)

    Returns the item instance.

Raises:



145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# File 'lib/aws-record/record/dirty_tracking.rb', line 145

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) ⇒ Object

Restores all attributes to their original values.

Examples:

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'

Parameters:

  • names (Array, String, Symbol) (defaults to: dirty)

    The names of attributes to restore.



198
199
200
# File 'lib/aws-record/record/dirty_tracking.rb', line 198

def rollback!(names = dirty)
  Array(names).each { |name| rollback_attribute!(name) }
end

#rollback_attribute!(name) ⇒ Object

Restores the attribute specified to its original value.

Examples:

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'

Parameters:

  • name (String, Symbol)

    The name of the attribute to restore



179
180
181
# File 'lib/aws-record/record/dirty_tracking.rb', line 179

def rollback_attribute!(name)
  @data.rollback_attribute!(name)
end

#saveObject



210
211
212
# File 'lib/aws-record/record/dirty_tracking.rb', line 210

def save(*)
  super.tap { clean! }
end