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
- #exists?(hash_value, range_value = nil) ⇒ Boolean
- #find(hash_value, range_value = nil) ⇒ Object
- #find_or_new(hash_value, range_value = nil) ⇒ Object
- #find_or_nil(hash_value, range_value = nil) ⇒ Object
- #query(args = {}) ⇒ Object
Instance Method Details
#exists?(hash_value, range_value = nil) ⇒ 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 |