Method: Dynamini::TestClient#query

Defined in:
lib/dynamini/test_client.rb

#query(args = {}) ⇒ Object



117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# File 'lib/dynamini/test_client.rb', line 117

def query(args = {})
  # Possible key condition structures:
  # "foo = val"
  # "foo = val AND bar <= val2"
  # "foo = val AND bar >= val2"
  # "foo = val AND bar BETWEEN val2 AND val3"

  attr_placeholders = args[:expression_attribute_values].merge(args[:expression_attribute_names])
  attr_placeholders.each { |symbol, value| args[:key_condition_expression].gsub!(symbol, value.to_s) }

  tokens = args[:key_condition_expression].split(/\s+/)

  hash_key_name, range_key_name = determine_hash_and_range(args)

  inspect_for_correct_keys?(tokens, hash_key_name, range_key_name)

  args[:index_name] ?  secondary_index_query(args, tokens) : range_key_query(args, tokens)

end