Class: AWS::DynamoDB::BatchGet

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/aws/dynamo_db/batch_get.rb

Overview

A utility class for configuring a list of tables, attributes and items to request information for.

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ BatchGet



29
30
31
32
# File 'lib/aws/dynamo_db/batch_get.rb', line 29

def initialize options = {}
  super(options)
  @request_items = {}
end

Instance Method Details

#each(&block) ⇒ nil



142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
# File 'lib/aws/dynamo_db/batch_get.rb', line 142

def each &block

  options = { :request_items => @request_items }

  begin

    response = client.batch_get_item(options)

    response.data['Responses'].each_pair do |table_name,details|
      details['Items'].each do |hash_data|
        attributes = values_from_response_hash(hash_data)
        yield(table_name, attributes)
      end
    end

    options[:request_items] = convert_unprocessed_keys(response)

  end while options[:request_items]

  nil

end

#each_attributesObject

Yields only attribute hashes. This removes the outer hash that normally provides the :table_name and :attributes keys. This is useful when your batch get requested items from a single table.



168
169
170
171
172
# File 'lib/aws/dynamo_db/batch_get.rb', line 168

def each_attributes
  each do |table_name, attributes|
    yield(attributes)
  end
end

#items(attributes, *items) ⇒ Object

Specify a list of Item objects to batch fetch attributes for. The table name is retrieved from the items objects, this means the items do not need to belong to the same table.



135
136
137
138
139
# File 'lib/aws/dynamo_db/batch_get.rb', line 135

def items attributes, *items
  [items].flatten.each do |item|
    self.table(item.table, attributes, [item])
  end
end

#table(table, attributes, items, options = {}) ⇒ nil

Add a list of items to fetch in this batch.

Options Hash (options):

  • :consistent_read (Boolean) — default: false

    When true, items are read from this table with consistent reads. When false, reads are eventually consistent.



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/aws/dynamo_db/batch_get.rb', line 72

def table table, attributes, items, options = {}

  table = table.is_a?(Table) ? table.name : table.to_s

  attributes = attributes == :all ? nil : [attributes].flatten

  keys = items.collect do |item|
    case item
    when Item then item_key_hash(item)
    when Array
      {
        :hash_key_element => format_attribute_value(item[0]),
        :range_key_element => format_attribute_value(item[1]),
      }
    else
      { :hash_key_element => format_attribute_value(item) }
    end
  end

  ## ensure we don't receive 2 different lists of attributes for
  ## the same table

  if
    @request_items.has_key?(table) and
    @request_items[table][:attributes_to_get] != attributes
  then
    msg = "When batch getting attributes, you may only provide " +
      "1 list of attributes per table, but the `#{table}` table " +
      "has received reqeusts for 2 different sets of attributes"
    raise ArgumentError, msg
  end

  ## merge attributes and items with the request items

  @request_items[table] ||= { :keys => [] }
  @request_items[table][:attributes_to_get] = attributes if attributes
  @request_items[table][:keys] += keys
  @request_items[table].merge!(options)

  nil

end