Module: Opium::Model::Scopable::ClassMethods

Defined in:
lib/opium/model/scopable.rb

Instance Method Summary collapse

Instance Method Details

#blank_criteriaObject



48
49
50
# File 'lib/opium/model/scopable.rb', line 48

def blank_criteria
  Criteria.new( self.model_name )
end

#criteriaObject



10
11
12
# File 'lib/opium/model/scopable.rb', line 10

def criteria
  @_unscoped ? blank_criteria : default_scope
end

#default_scope(criteria = nil, &block) ⇒ Object



27
28
29
30
31
# File 'lib/opium/model/scopable.rb', line 27

def default_scope( criteria = nil, &block )
  @default_scope = block || criteria if block_given? || criteria
  s = @default_scope || blank_criteria
  s.is_a?( Proc ) ? unscoped { s.call } : s
end

#scope(scope_name, criteria = nil, &block) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/opium/model/scopable.rb', line 14

def scope( scope_name, criteria = nil, &block )
  class_eval do
    method_body = if block_given? || criteria.is_a?(Proc)
      block || criteria
    elsif criteria.nil?
      raise ArgumentError, "Criteria cannot be nil if no block is provided."
    else
      -> { criteria }
    end
    define_singleton_method( scope_name, method_body )
  end
end

#scopedObject



33
34
35
# File 'lib/opium/model/scopable.rb', line 33

def scoped
  
end

#unscopedObject



37
38
39
40
41
42
43
44
45
46
# File 'lib/opium/model/scopable.rb', line 37

def unscoped
  if block_given?
    @_unscoped = true
    yield
  else
    blank_criteria
  end
ensure
  @_unscoped = false
end

#with_scope(criteria) ⇒ Object



52
53
54
# File 'lib/opium/model/scopable.rb', line 52

def with_scope( criteria )
  
end