Class: Mara::Persistence

Inherits:
Object
  • Object
show all
Includes:
DynamoHelpers
Defined in:
lib/mara/persistence.rb

Overview

Perform calls to DynamoDB for saving/updating/deleting

Author:

  • Maddie Schipper

Since:

  • 1.0.0

Defined Under Namespace

Classes: CreateRequest, DestroyRequest, Error, Response

Class Method Summary collapse

Methods included from DynamoHelpers

included

Class Method Details

.delete_model(item) ⇒ true, false

Delete an item.

Parameters:

  • item (Hash)

    The item to be deleted.

Returns:

  • (true, false)

Since:

  • 1.0.0



135
136
137
138
139
140
141
142
143
# File 'lib/mara/persistence.rb', line 135

def delete_model(item)
  delete = DestroyRequest.new(item)
  response = perform_requests(
     Mara::Client.shared,
     Mara.config.dynamodb.table_name,
    [delete]
  )
  !response.nil?
end

.delete_model!(item) ⇒ void

This method returns an undefined value.

Delete an item.

Parameters:

  • item (Hash)

    The item to be deleted.

Raises:

  • Error If the delete operation fails.

See Also:

Since:

  • 1.0.0



155
156
157
158
159
# File 'lib/mara/persistence.rb', line 155

def delete_model!(item)
  return if delete_model(item)

  raise Error, 'Failed to delete!'
end

.perform_requests(client, table_name, requests, group_size = 10) ⇒ Object

Perform a batch of save requests.

Since:

  • 1.0.0



163
164
165
166
167
168
169
170
171
172
173
# File 'lib/mara/persistence.rb', line 163

def perform_requests(client, table_name, requests, group_size = 10)
  results =  Mara.instrument('save_batch_records', requests: requests, table_name: table_name) do
    requests.each_slice(group_size).map do |sub_requests|
      _perform_requests(client, table_name, sub_requests)
    end
  end
  Response.new(
    results.map(&:consumed_capacity).sum,
    results.map(&:operation_count).sum
  )
end

.save_model(item) ⇒ true, false

Perform a save on a item.

Parameters:

  • item (Hash)

    The item to be saved.

Returns:

  • (true, false)

Since:

  • 1.0.0



103
104
105
106
107
108
109
110
111
# File 'lib/mara/persistence.rb', line 103

def save_model(item)
  create = CreateRequest.new(item)
  response = perform_requests(
     Mara::Client.shared,
     Mara.config.dynamodb.table_name,
    [create]
  )
  !response.nil?
end

.save_model!(item) ⇒ void

This method returns an undefined value.

Perform a save on the a item.

Parameters:

  • item (Hash)

    The item to be saved.

Raises:

  • Error If the save operation fails.

See Also:

Since:

  • 1.0.0



123
124
125
126
127
# File 'lib/mara/persistence.rb', line 123

def save_model!(item)
  return if save_model(item)

  raise Error, 'Failed to save!'
end