Module: Dynamoid::Finders::ClassMethods
- Defined in:
- lib/dynamoid/finders.rb
Instance Method Summary collapse
-
#find(*ids) ⇒ Dynamoid::Document
Find one or many objects, specified by one id or an array of ids.
-
#find_by_id(id, options = {}) ⇒ Dynamoid::Document
Find one object directly by id.
-
#method_missing(method, *args) ⇒ Dynamoid::Document/Array
Find using exciting method_missing finders attributes.
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args) ⇒ Dynamoid::Document/Array
Find using exciting method_missing finders attributes. Uses criteria chains under the hood to accomplish this neatness.
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/dynamoid/finders.rb', line 63 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
#find(*ids) ⇒ Dynamoid::Document
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 33 |
# 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 items = Dynamoid::Adapter.read(self.table_name, ids, ) items[self.table_name].collect{|i| self.build(i).tap { |o| o.new_record = false } } end end |
#find_by_id(id, options = {}) ⇒ Dynamoid::Document
Find one object directly by id.
42 43 44 45 46 47 48 49 50 |
# File 'lib/dynamoid/finders.rb', line 42 def find_by_id(id, = {}) if item = Dynamoid::Adapter.read(self.table_name, id, ) obj = self.new(item) obj.new_record = false return obj else return nil end end |