Module: Aws::Record::ItemOperations

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

Defined Under Namespace

Modules: ItemOperationsClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(sub_class) ⇒ 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.



19
20
21
# File 'lib/aws-record/record/item_operations.rb', line 19

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

Instance Method Details

#assign_attributes(opts) ⇒ Object

Assigns the attributes provided onto the model.

Examples:

Usage Example

class MyModel
  include Aws::Record
  integer_attr :uuid,   hash_key: true
  string_attr  :name, range_key: true
  integer_attr :age
  float_attr   :height
end

model = MyModel.new(id: 4, name: "John", age: 4, height: 70.5)
model.age    # => 4
model.height # => 70.5
model.save
model.dirty? # => false

model.assign_attributes(age: 5, height: 150.75)
model.age    # => 5
model.height # => 150.75
model.dirty? # => true


109
110
111
112
113
114
115
116
# File 'lib/aws-record/record/item_operations.rb', line 109

def assign_attributes(opts)
  opts.each do |field, new_value|
    field = field.to_sym
    setter = "#{field}="
    raise ArgumentError.new "Invalid field: #{field} for model" unless respond_to?(setter)
    public_send(setter, new_value)
  end
end

#delete!Object

Deletes the item instance that matches the key values of this item instance in Amazon DynamoDB. Uses the Aws::DynamoDB::Client#delete_item API.



190
191
192
193
194
195
196
# File 'lib/aws-record/record/item_operations.rb', line 190

def delete!
  dynamodb_client.delete_item(
    table_name: self.class.table_name,
    key: key_values
  )
  self.instance_variable_get("@data").destroyed = true
end

#key_valuesObject

Validates and generates the key values necessary for API operations such as the Aws::DynamoDB::Client#delete_item operation.



201
202
203
204
205
206
207
208
209
210
# File 'lib/aws-record/record/item_operations.rb', line 201

def key_values
  validate_key_values
  attributes = self.class.attributes
  self.class.keys.values.each_with_object({}) do |attr_name, hash|
    db_name = attributes.storage_name_for(attr_name)
    hash[db_name] = attributes
      .attribute_for(attr_name)
      .serialize(@data.raw_value(attr_name))
  end
end

#save(opts = {}) ⇒ Object

Saves this instance of an item to Amazon DynamoDB. If this item is “new” as defined by having new or altered key attributes, will attempt a conditional Aws::DynamoDB::Client#put_item call, which will not overwrite an existing item. If the item only has altered non-key attributes, will perform an Aws::DynamoDB::Client#update_item call. Uses this item instance’s attributes in order to build the request on your behalf.

You can use the :force option to perform a simple put/overwrite without conditional validation or update logic.

Options Hash (opts):

  • :force (Boolean)

    if true, will save as a put operation and overwrite any existing item on the remote end. Otherwise, and by default, will either perform a conditional put or an update call.



76
77
78
79
80
81
82
# File 'lib/aws-record/record/item_operations.rb', line 76

def save(opts = {})
  if _invalid_record?(opts)
    false
  else
    _perform_save(opts)
  end
end

#save!(opts = {}) ⇒ Object

Saves this instance of an item to Amazon DynamoDB. If this item is “new” as defined by having new or altered key attributes, will attempt a conditional Aws::DynamoDB::Client#put_item call, which will not overwrite an existing item. If the item only has altered non-key attributes, will perform an Aws::DynamoDB::Client#update_item call. Uses this item instance’s attributes in order to build the request on your behalf.

You can use the :force option to perform a simple put/overwrite without conditional validation or update logic.

Options Hash (opts):

  • :force (Boolean)

    if true, will save as a put operation and overwrite any existing item on the remote end. Otherwise, and by default, will either perform a conditional put or an update call.

Raises:



47
48
49
50
51
52
53
54
# File 'lib/aws-record/record/item_operations.rb', line 47

def save!(opts = {})
  ret = save(opts)
  if ret
    ret
  else
    raise Errors::ValidationError.new("Validation hook returned false!")
  end
end

#save_valuesObject

Validates key values and returns a hash consisting of the parameters to save the record using the Aws::DynamoDB::Client#batch_write_item operation.



216
217
218
# File 'lib/aws-record/record/item_operations.rb', line 216

def save_values
  _build_item_for_save
end

#update(new_params, opts = {}) ⇒ Object

Mass assigns the attributes to the model and then performs a save

You can use the :force option to perform a simple put/overwrite without conditional validation or update logic.

Note that aws-record allows you to change your model’s key values, but this will be interpreted as persisting a new item to your DynamoDB table

Examples:

Usage Example

class MyModel
  include Aws::Record
  integer_attr :uuid,   hash_key: true
  string_attr  :name, range_key: true
  integer_attr :age
  float_attr   :height
end

model = MyModel.new(id: 4, name: "John", age: 4, height: 70.5)
model.age    # => 4
model.height # => 70.5
model.save
model.dirty? # => false

model.update(age: 5, height: 150.75)
model.age    # => 5
model.height # => 150.75
model.dirty? # => false

Options Hash (opts):

  • :force (Boolean)

    if true, will save as a put operation and overwrite any existing item on the remote end. Otherwise, and by default, will either perform a conditional put or an update call.



157
158
159
160
# File 'lib/aws-record/record/item_operations.rb', line 157

def update(new_params, opts = {})
  assign_attributes(new_params)
  save(opts)
end

#update!(new_params, opts = {}) ⇒ Object

Updates model attributes and validates new values

You can use the :force option to perform a simple put/overwrite without conditional validation or update logic.

Note that aws-record allows you to change your model’s key values, but this will be interpreted as persisting a new item to your DynamoDB table

Options Hash (opts):

  • :force (Boolean)

    if true, will save as a put operation and overwrite any existing item on the remote end. Otherwise, and by default, will either perform a conditional put or an update call.

Raises:



181
182
183
184
# File 'lib/aws-record/record/item_operations.rb', line 181

def update!(new_params, opts = {})
  assign_attributes(new_params)
  save!(opts)
end