def query(options = {}, &block)
options = options.merge(:query => true)
raise ArgumentError, "a hash key value is required" unless
options[:hash_value]
options[:hash_key_value] =
format_attribute_value(options.delete(:hash_value))
range = options.delete(:range_value)
range_op = nil
value_list = []
if range and range.kind_of?(Range)
value_list = [format_attribute_value(range.begin),
format_attribute_value(range.end)]
range_op = "BETWEEN"
elsif range
value_list = [format_attribute_value(range)]
range_op = "EQ"
end
RANGE_KEY_OPTIONS.each do |name, op|
if value = options.delete(name)
raise(ArgumentError,
"only one range key condition is supported") if range_op
range_op = op
value_list = [format_attribute_value(value)]
end
end
options[:range_key_condition] = {
:attribute_value_list => value_list,
:comparison_operator => range_op
} if range_op
if select = options.delete(:select)
options[:item_data] = true
options[:attributes_to_get] = select.map do |att|
att.to_s
end unless select == :all
end
if block
each(options, &block)
else
enumerator(options)
end
end