Module: Aws::Record::ItemOperations

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

Defined Under Namespace

Modules: ItemOperationsClassMethods

Instance Method Summary collapse

Instance Method Details

#assign_attributes(opts) ⇒ Object

Deletes the item instance that matches the key values of this item instance in Amazon DynamoDB.

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)


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

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.



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

def delete!
  dynamodb_client.delete_item(
    table_name: self.class.table_name,
    key: key_values
  )
  self.instance_variable_get("@data").destroyed = true
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

#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.



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

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:



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

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