Module: Dynamoid::Finders::ClassMethods
- Defined in:
- lib/dynamoid/finders.rb
Instance Method Summary (collapse)
-
- (Dynamoid::Document) find(*ids)
Find one or many objects, specified by one id or an array of ids.
-
- (Object) find_all(ids, options = {})
Return objects found by the given array of ids, either hash keys, or hash/range key combinations using BatchGet.
-
- (Array) find_all_by_composite_key(hash_key, options = {})
Find all objects by hash and range keys.
-
- (Object) find_by_composite_key(hash_key, range_key, options = {})
Find one object directly by hash and range keys.
-
- (Dynamoid::Document) find_by_id(id, options = {})
Find one object directly by id.
-
- (Dynamoid::Document/Array) method_missing(method, *args)
Find using exciting method_missing finders attributes.
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
- (Dynamoid::Document/Array) method_missing(method, *args)
Find using exciting method_missing finders attributes. Uses criteria chains under the hood to accomplish this neatness.
113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/dynamoid/finders.rb', line 113 def method_missing(method, *args) if method =~ /find/ finder = method.to_s.split('_by_').first attributes = method.to_s.split('_by_').last.split('_and_') chain = Dynamoid::Criteria::Chain.new(self) chain.query = Hash.new.tap {|h| attributes.each_with_index {|attr, index| h[attr.to_sym] = args[index]}} if finder =~ /all/ return chain.all else return chain.first end else super end end |
Instance Method Details
- (Dynamoid::Document) find(*ids)
Find one or many objects, specified by one id or an array of ids.
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/dynamoid/finders.rb', line 18 def find(*ids) = if ids.last.is_a? Hash ids.slice!(-1) else {} end ids = Array(ids.flatten.uniq) if ids.count == 1 self.find_by_id(ids.first, ) else find_all(ids) end end |
- (Object) find_all(ids, options = {})
Return objects found by the given array of ids, either hash keys, or hash/range key combinations using BatchGet. Returns empty array if no results found.
46 47 48 49 |
# File 'lib/dynamoid/finders.rb', line 46 def find_all(ids, = {}) items = Dynamoid::Adapter.read(self.table_name, ids, ) items ? items[self.table_name].map{|i| from_database(i)} : [] end |
- (Array) find_all_by_composite_key(hash_key, options = {})
Find all objects by hash and range keys.
96 97 98 99 100 |
# File 'lib/dynamoid/finders.rb', line 96 def find_all_by_composite_key(hash_key, = {}) Dynamoid::Adapter.query(self.table_name, .merge({hash_value: hash_key})).collect do |item| from_database(item) end end |
- (Object) find_by_composite_key(hash_key, range_key, options = {})
Find one object directly by hash and range keys
71 72 73 |
# File 'lib/dynamoid/finders.rb', line 71 def find_by_composite_key(hash_key, range_key, = {}) find_by_id(hash_key, .merge({:range_key => range_key})) end |
- (Dynamoid::Document) find_by_id(id, options = {})
Find one object directly by id.
58 59 60 61 62 63 64 |
# File 'lib/dynamoid/finders.rb', line 58 def find_by_id(id, = {}) if item = Dynamoid::Adapter.read(self.table_name, id, ) from_database(item) else nil end end |