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