Module: DataMapper::Model::Scope
- Included in:
- DataMapper::Model
- Defined in:
- lib/dm-core/model/scope.rb
Overview
Module with query scoping functionality.
Scopes are implemented using simple array based stack that is thread local. Default scope can be set on a per repository basis.
Scopes are merged as new queries are nested. It is also possible to get exclusive scope access using with_exclusive_scope
Instance Method Summary collapse
- #current_scope ⇒ Object private
- #default_scope(repository_name = default_repository_name) ⇒ Object private
-
#query ⇒ Object
private
Returns query on top of scope stack.
Instance Method Details
#current_scope ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
34 35 36 |
# File 'lib/dm-core/model/scope.rb', line 34 def current_scope scope_stack.last || default_scope(repository.name) end |
#default_scope(repository_name = default_repository_name) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/dm-core/model/scope.rb', line 14 def default_scope(repository_name = default_repository_name) @default_scope ||= {} default_repository_name = self.default_repository_name @default_scope[repository_name] ||= if repository_name == default_repository_name {} else default_scope(default_repository_name).dup end end |
#query ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns query on top of scope stack
29 30 31 |
# File 'lib/dm-core/model/scope.rb', line 29 def query repository.new_query(self, current_scope).freeze end |