Sha256: 6434b172adfd794809b92b498cfacd002e249a5d36ca8afe442edf429b9a46f2

Contents?: true

Size: 1.51 KB

Versions: 17

Compression:

Stored size: 1.51 KB

Contents

module DataMapper
  module Scope
    Model.append_extensions self

    # @api private
    def default_scope(repository_name = nil)
      repository_name = self.default_repository_name if repository_name == :default || repository_name.nil?
      @default_scope ||= {}
      @default_scope[repository_name] ||= {}
    end

    # @api private
    def query
      scope_stack.last
    end

    protected

    # @api semipublic
    def with_scope(query)
      # merge the current scope with the passed in query
      with_exclusive_scope(self.query ? self.query.merge(query) : query) {|*block_args| yield(*block_args) }
    end

    # @api semipublic
    def with_exclusive_scope(query)
      query = DataMapper::Query.new(repository, self, query) if query.kind_of?(Hash)

      scope_stack << query

      begin
        return yield(query)
      ensure
        scope_stack.pop
      end
    end

    private

    # @api private
    def merge_with_default_scope(query)
      DataMapper::Query.new(query.repository, query.model, default_scope_for_query(query)).update(query)
    end

    # @api private
    def scope_stack
      scope_stack_for = Thread.current[:dm_scope_stack] ||= {}
      scope_stack_for[self] ||= []
    end

    # @api private
    def default_scope_for_query(query)
      repository_name = query.repository.name
      default_repository_name = query.model.default_repository_name
      self.default_scope(default_repository_name).merge(self.default_scope(repository_name))
    end
  end # module Scope
end # module DataMapper

Version data entries

17 entries across 17 versions & 5 rubygems

Version Path
datamapper-dm-core-0.9.11 lib/dm-core/scope.rb
rpbertp13-dm-core-0.9.11.1 lib/dm-core/scope.rb
rpbertp13-dm-core-0.9.11.2 lib/dm-core/scope.rb
sam-dm-core-0.9.10 lib/dm-core/scope.rb
sam-dm-core-0.9.11 lib/dm-core/scope.rb
sam-dm-core-0.9.7 lib/dm-core/scope.rb
sam-dm-core-0.9.8 lib/dm-core/scope.rb
sam-dm-core-0.9.9 lib/dm-core/scope.rb
dm-core-0.9.11 lib/dm-core/scope.rb
dm-core-0.9.10 lib/dm-core/scope.rb
dm-core-0.9.7 lib/dm-core/scope.rb
dm-core-0.9.6 lib/dm-core/scope.rb
dm-core-0.9.8 lib/dm-core/scope.rb
dm-core-0.9.9 lib/dm-core/scope.rb
mack-data_mapper-0.8.2 lib/gems/dm-core-0.9.7/lib/dm-core/scope.rb
mack-data_mapper-0.8.3.1 lib/gems/dm-core-0.9.9/lib/dm-core/scope.rb
mack-data_mapper-0.8.3 lib/gems/dm-core-0.9.9/lib/dm-core/scope.rb