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

#destroyed?Boolean

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

Examples:

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

Returns:

  • (Boolean)

    true if the model has been destroyed, false otherwise.



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

def destroyed?
  @data.destroyed?
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

#new_record?Boolean

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

Examples:

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

Returns:

  • (Boolean)

    true if the model is newly initialized, false otherwise.



176
177
178
# File 'lib/aws-record/record/dirty_tracking.rb', line 176

def new_record?
  @data.new_record?
end

#persisted?Boolean

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

Examples:

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

Returns:

  • (Boolean)

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



156
157
158
# File 'lib/aws-record/record/dirty_tracking.rb', line 156

def persisted?
  @data.persisted?
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:



209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
# 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) ⇒ 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.



262
263
264
# 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) ⇒ 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



243
244
245
# File 'lib/aws-record/record/dirty_tracking.rb', line 243

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

#saveObject



274
275
276
# File 'lib/aws-record/record/dirty_tracking.rb', line 274

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