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

Parameters:

  • opts (Hash)


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.

Parameters:

  • opts (Hash) (defaults to: {})

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.

Returns:

  • false if the record is invalid as defined by an attempt to call valid? on this item, if that method exists. Otherwise, returns client call return value.



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.

Parameters:

  • opts (Hash) (defaults to: {})

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

Parameters:

  • new_param, (Hash)

    contains the new parameters for the model

  • opts (Hash) (defaults to: {})

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.

Returns:

  • false if the record is invalid as defined by an attempt to call valid? on this item, if that method exists. Otherwise, returns client call return value.



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

Parameters:

  • new_param, (Hash)

    contains the new parameters for the model

  • opts (Hash) (defaults to: {})

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.

Returns:

  • The update mode if the update is successful

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