lib/dyna_model/query.rb in dyna_model-0.0.1 vs lib/dyna_model/query.rb in dyna_model-0.0.2
- old
+ new
@@ -28,21 +28,29 @@
self.read_range(hash_value, (options || {}).merge(range: { self.range_key[:attribute_name].to_sym.eq => range_value_or_options})).first
end
end
def read_multiple(keys, options={})
+ options[:format] = (options[:format] && options[:format] == :array) ? :array : :hash
results_map = {}
- results = self.dynamo_db_table.batch_get_item(keys, options)
- results[:responses][self.dynamo_db_table_name(options[:shard_name])].each do |result|
- attrs = Response.strip_attr_types(result)
- obj = self.obj_from_attrs(attrs, options)
- if self.dynamo_db_table.range_keys.present? && primary_range_key = self.dynamo_db_table.range_keys.find{|rk| rk[:primary_range_key] }
- (results_map[attrs[self.dynamo_db_table.hash_key[:attribute_name]]] ||= {})[attrs[primary_range_key[:attribute_name]]] = obj
- else
- results_map[attrs[self.dynamo_db_table.hash_key[:attribute_name]]] = obj
+ results_arr = []
+ if keys.present?
+ results = self.dynamo_db_table.batch_get_item(keys, options)
+ results[:responses][self.dynamo_db_table_name(options[:shard_name])].each do |result|
+ attrs = Response.strip_attr_types(result)
+ obj = self.obj_from_attrs(attrs, options)
+ if options[:format] == :array
+ results_arr << obj
+ else
+ if self.dynamo_db_table.range_keys.present? && primary_range_key = self.dynamo_db_table.range_keys.find{|rk| rk[:primary_range_key] }
+ (results_map[attrs[self.dynamo_db_table.hash_key[:attribute_name]]] ||= {})[attrs[primary_range_key[:attribute_name]]] = obj
+ else
+ results_map[attrs[self.dynamo_db_table.hash_key[:attribute_name]]] = obj
+ end
+ end
end
end
- results_map
+ options[:format] == :array ? results_arr : results_map
end
# Read results up to the limit
# read_range("1", :range => { :varname.gte => "2"}, :limit => 10)
# Loop results in given batch size until limit is hit or no more results