Module: AWS::Record::FinderMethods
- Included in:
- Base
- Defined in:
- lib/aws/record/finder_methods.rb
Instance Method Summary collapse
-
#all(options = {}) ⇒ Scope
Returns an enumerable scope object represents all records.
-
#count(options = {}) ⇒ Object
(also: #size)
Counts records in SimpleDB.
-
#domain(name) ⇒ Scope
Returns a chainable scope object that restricts further scopes to a particular domain.
-
#find(*args) ⇒ Object
Finds records in SimpleDB and returns them as objects of the current class.
-
#find_by_id(id, options = {}) ⇒ Record::Base
(also: #[])
Returns the record, as a sub-class of Record::Base.
-
#first(options = {}) ⇒ Object?
Returns the first record found for the current class.
-
#limit(limit) ⇒ Object
The maximum number of records to return.
-
#order(attribute, direction = :asc) ⇒ Object
Defines the order in which records are returned when performing a find.
-
#where(*args) ⇒ Object
Limits which records are retried from SimpleDB when performing a find.
Instance Method Details
#all(options = {}) ⇒ Scope
Returns an enumerable scope object represents all records.
Book.all.each do |book|
# ...
end
This method is equivalent to find(:all), and therefore you can also pass aditional options. See #find for more information on what options you can pass.
Book.all(:where => { :author' => 'me' }).each do |my_book|
# ...
end
121 122 123 |
# File 'lib/aws/record/finder_methods.rb', line 121 def all = {} _new_scope.find(:all, ) end |
#count(options = {}) ⇒ Object Also known as: size
Counts records in SimpleDB.
With no arguments, counts all records:
People.count
Accepts query options to count a subset of records:
People.count(:where => { :boss => true })
You can also count records on a scope object:
People.find(:all).where(:boss => true).count
See #find and Scope#count for more details.
147 148 149 |
# File 'lib/aws/record/finder_methods.rb', line 147 def count( = {}) _new_scope.count() end |
#domain(name) ⇒ Scope
Returns a chainable scope object that restricts further scopes to a particular domain
Book.domain('shard_3').all.each do |book|
# ...
end
102 103 104 |
# File 'lib/aws/record/finder_methods.rb', line 102 def domain name _new_scope.domain(name) end |
#find(id) ⇒ Object #find(mode, options = {}) ⇒ Object
Finds records in SimpleDB and returns them as objects of the current class.
Finding :all
returns an enumerable scope object
People.find(:all, :order => [:age, :desc], :limit => 10).each do |person|
puts person.name
end
Finding :first
returns a single record (or nil)
boss = People.find(:first, :where => { :boss => true })
Find accepts a hash of find modifiers (:where
, :order
and :limit
). You can also choose to omit these modifiers and chain them on the scope object returned. In the following example only one request is made to SimpleDB (when #each is called)
people = People.find(:all)
johns = people.where(:name => 'John Doe')
johns.order(:age, :desc).limit(10).each do |suspects|
# ...
end
See also #where, #order and #limit for more information and options.
89 90 91 |
# File 'lib/aws/record/finder_methods.rb', line 89 def find *args _new_scope.find(*args) end |
#find_by_id(id, options = {}) ⇒ Record::Base Also known as: []
Returns the record, as a sub-class of Record::Base
30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/aws/record/finder_methods.rb', line 30 def find_by_id id, = {} domain = sdb_domain([:domain]) data = domain.items[id].data.attributes raise RecordNotFound, "no data found for id: #{id}" if data.empty? obj = self.new(:domain => domain) obj.send(:hydrate, id, data) obj end |
#first(options = {}) ⇒ Object?
Returns the first record found for the current class. If there are no records in the current classes domain, then nil is returned.
155 156 157 |
# File 'lib/aws/record/finder_methods.rb', line 155 def first = {} _new_scope.first() end |
#limit(limit) ⇒ Object
The maximum number of records to return. By default, all records matching the where conditions will be returned from a find.
People.limit(10).each {|person| ... }
Limit can be chained with other scope modifiers:
People.where(:age => 40).limit(10).each {|person| ... }
224 225 226 |
# File 'lib/aws/record/finder_methods.rb', line 224 def limit limit _new_scope.limit(limit) end |
#order(attribute, direction = :asc) ⇒ Object
Defines the order in which records are returned when performing a find. SimpleDB only allows sorting by one attribute per request.
# oldest to youngest
People.order(:age, :desc).each {|person| ... }
You can chain order with the other scope modifiers:
Pepole.order(:age, :desc).limit(10).each {|person| ... }
211 212 213 |
# File 'lib/aws/record/finder_methods.rb', line 211 def order *args _new_scope.order(*args) end |
#where(conditions_hash) ⇒ Object #where(sql_fragment[, quote_params, ...]) ⇒ Object
Limits which records are retried from SimpleDB when performing a find.
Simple string condition
Car.where('color = "red" or color = "blue"').each {|car| ... }
String with placeholders for quoting params
Car.where('color = ?', 'red')
Car.where('color = ? OR style = ?', 'red', 'compact')
# produces a condition using in, like: WHERE color IN ('red', 'blue')
Car.where('color IN ?', ['red','blue'])
Hash arguments
# WHERE age = '40' AND gender = 'male'
People.where(:age => 40, :gender => 'male').each {|person| ... }
# WHERE name IN ('John', 'Jane')
People.where(:name => ['John', 'Jane']).each{|person| ... }
Chaining where with other scope modifiers
# 10 most expensive red cars
Car.where(:color => 'red').order(:price, :desc).limit(10)
193 194 195 |
# File 'lib/aws/record/finder_methods.rb', line 193 def where *args _new_scope.where(*args) end |