Module: Dynamini::Querying

Included in:
Base
Defined in:
lib/dynamini/querying.rb

Constant Summary collapse

OPTIONAL_QUERY_PARAMS =
[:limit, :scan_index_forward]

Instance Method Summary collapse

Instance Method Details

#exists?(hash_value, range_value = nil) ⇒ Boolean

Returns:

  • (Boolean)


24
25
26
27
28
29
# File 'lib/dynamini/querying.rb', line 24

def exists?(hash_value, range_value = nil)
  fail 'Range key cannot be blank.' if range_key && range_value.nil?

  r = client.get_item(table_name: table_name, key: create_key_hash(hash_value, range_value))
  r.item.present?
end

#find(hash_value, range_value = nil) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
# File 'lib/dynamini/querying.rb', line 5

def find(hash_value, range_value = nil)
  fail 'Range key cannot be blank.' if range_key && range_value.nil?
  response = client.get_item(table_name: table_name, key: create_key_hash(hash_value, range_value))

  unless response.item
    error_msg = "Couldn't find #{self} with '#{hash_key}'=#{hash_value}"
    error_msg += " and '#{range_key}'=#{range_value}" if range_value
    raise Dynamini::RecordNotFound, error_msg
  end

  new(response.item.symbolize_keys, false)
end

#find_or_new(hash_value, range_value = nil) ⇒ Object



31
32
33
34
35
36
37
38
39
40
# File 'lib/dynamini/querying.rb', line 31

def find_or_new(hash_value, range_value = nil)
  validate_query_values(hash_value, range_value)

  r = client.get_item(table_name: table_name, key: create_key_hash(hash_value, range_value))
  if r.item
    new(r.item.symbolize_keys, false)
  else
    range_key ? new(hash_key => hash_value, range_key => range_value) : new(hash_key => hash_value)
  end
end

#find_or_nil(hash_value, range_value = nil) ⇒ Object



18
19
20
21
22
# File 'lib/dynamini/querying.rb', line 18

def find_or_nil(hash_value, range_value = nil)
  find(hash_value, range_value)
rescue Dynamini::RecordNotFound
  nil
end

#query(args = {}) ⇒ Object



42
43
44
45
46
47
48
49
50
51
# File 'lib/dynamini/querying.rb', line 42

def query(args = {})
  fail ArgumentError, 'You must provide a :hash_key.' unless args[:hash_key]

  response = dynamo_query(args)
  objects = []
  response.items.each do |item|
    objects << new(item.symbolize_keys, false)
  end
  objects
end