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)


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

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
17
# File 'lib/dynamini/querying.rb', line 5

def find(hash_value, range_value = nil)
  fail ArgumentError, 'Hash key cannot be nil or empty.' if (hash_value.nil? || hash_value.blank?)
  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



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

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



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

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

#query(args = {}) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/dynamini/querying.rb', line 43

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

  if (args[:start] || args[:end]) && !current_index_range_key(args)
    fail ArgumentError, 'You cannot query using start/end without using an index with a range key.'
  end

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