Module: MongoMapper::Plugins::Scopes::ClassMethods

Defined in:
lib/mongo_mapper/plugins/scopes.rb

Instance Method Summary collapse

Instance Method Details

#active_scopesObject



25
26
27
# File 'lib/mongo_mapper/plugins/scopes.rb', line 25

def active_scopes
  @active_scopes ||= []
end

#default_scope(*args, &block) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
# File 'lib/mongo_mapper/plugins/scopes.rb', line 49

def default_scope(*args, &block)
  if block_given?
    default_scopes << instance_exec(&block)
  end

  if args.any?
    default_scopes << args
  end

  default_scopes
end

#default_scopesObject



29
30
31
32
33
34
35
# File 'lib/mongo_mapper/plugins/scopes.rb', line 29

def default_scopes
  @default_scopes ||= begin
    superclass.respond_to?(:default_scopes) ?
      superclass.default_scopes.dup :
      []
  end
end

#query(options = {}) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
# File 'lib/mongo_mapper/plugins/scopes.rb', line 37

def query(options = {})
  res = super(options)

  all_anonymous_scopes.each do |scope|
    unscoped do
      res = process_scope(res, scope)
    end
  end

  res
end

#scope(name, scope = {}) ⇒ Object



12
13
14
15
16
17
18
19
# File 'lib/mongo_mapper/plugins/scopes.rb', line 12

def scope(name, scope={})
  # Assign to _scopes instead of using []= to avoid mixing subclass scopes
  self._scopes = scopes.merge(name => scope)

  singleton_class.send :define_method, name do |*args|
    process_scope(self, scopes[name], *args)
  end
end

#scopesObject



21
22
23
# File 'lib/mongo_mapper/plugins/scopes.rb', line 21

def scopes
  self._scopes ||= {}
end

#unscopedObject



68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/mongo_mapper/plugins/scopes.rb', line 68

def unscoped
  old_default_scopes = default_scopes.dup
  old_active_scopes = active_scopes.dup

  @default_scopes = []
  @active_scopes = []

  yield
ensure
  @default_scopes = old_default_scopes
  @active_scopes = old_active_scopes
end

#with_scope(query = {}) ⇒ Object



61
62
63
64
65
66
# File 'lib/mongo_mapper/plugins/scopes.rb', line 61

def with_scope(query = {})
  active_scopes.push(query)
  yield
ensure
  active_scopes.pop
end