class AWS::Record::HashModel::Scope

The primary interface for finding records with {AWS::Record::HashModel}.

Getting a Scope Object

You should normally never need to construct a Scope object directly. Scope objects are returned from the AWS::Record::HashModel finder methods # (e.g. shard and limit).

books = Book.limit(100)
books.class #=> AWS::Record::HashModel::Scope

Scopes are also returned from methods defined with the scope method.

class Book < AWS::Record::HashModel
   scope :sampling, limit(10)
end

Book.sampling #=> returns a scope that limits to 10

Chaining Scopes

Scope objects represent a request, but do not actualy make a request until required. This allows you to chain requests

# no request made by the following 2 statements
books = Book.shard('books-1') # what table to search
books = books.limit(10) # how many records to fetch

books.each do |book|
  # yields up to 10 books from the table 'books-1'
end

The following methods returns a scope that can be chained.

Terminating Scopes

To terminate a scope you can enumerate it or call first.

# terminate a scope by enumerating
Book.limit(10).each {|book| ... }

# terminate a scope by getting the first record
Book.shard('books-1').first

Private Instance Methods

_each_object() { |obj| ... } click to toggle source
# File lib/aws/record/hash_model/scope.rb, line 68
def _each_object &block
  
  items = _item_collection
  
  items.select(:limit => @options[:limit]).each do |item_data|
    obj = base_class.new(:shard => _shard)
    obj.send(:hydrate, item_data.attributes['id'], item_data.attributes)
    yield(obj)
  end
  
end
_handle_options(options) click to toggle source
# File lib/aws/record/hash_model/scope.rb, line 92
def _handle_options options
  scope = self
  options.each_pair do |method, args|
    scope = scope.send(method, *args)
  end
  scope
end
_item_collection() click to toggle source
# File lib/aws/record/hash_model/scope.rb, line 101
def _item_collection
  base_class.dynamo_db_table(_shard).items
end
_merge_scope(scope) click to toggle source
# File lib/aws/record/hash_model/scope.rb, line 81
def _merge_scope scope
  merged = self
  scope.instance_variable_get('@options').each_pair do |opt_name,opt_value|
    unless [nil, []].include?(opt_value)
      merged = merged.send(opt_name, *opt_value)
    end
  end
  merged
end