Class: Brentano::Query

Inherits:
Object
  • Object
show all
Defined in:
lib/brentano/query.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(relation) ⇒ Query

Returns a new instance of Query.



47
48
49
# File 'lib/brentano/query.rb', line 47

def initialize(relation)
  @relation = relation
end

Instance Attribute Details

#absolute_limitObject



43
44
45
# File 'lib/brentano/query.rb', line 43

def absolute_limit
  @absolute_limit ||= Brentano.absolute_limit
end

#allowed_methodsObject



35
36
37
# File 'lib/brentano/query.rb', line 35

def allowed_methods
  @allowed_methods ||= Brentano.allowed_methods.dup
end

#allowed_scopesObject



39
40
41
# File 'lib/brentano/query.rb', line 39

def allowed_scopes 
  @allowed_scopes ||= Brentano.allowed_scopes.dup
end

Class Method Details

.finish(relation, options) {|obj| ... } ⇒ Object

Yields:

  • (obj)


11
12
13
14
15
# File 'lib/brentano/query.rb', line 11

def self.finish(relation, options)
  obj = self.new relation
  yield obj if block_given?
  obj.apply options
end

Instance Method Details

#apply(options) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/brentano/query.rb', line 17

def apply(options)
  supplied_scopes = Array.wrap(options[:scopes] || options[:scope])
  supplied_scopes << "by_#{options[:by]}" if options[:by].present?
  supplied_scopes.map!(&:to_sym)
  scopes = allowed_scopes & supplied_scopes
  scoped_relation = scopes.inject(@relation) { |r, s| r.send(s) }
  if absolute_limit.present?
    options[:limit] ||= absolute_limit
    options[:limit] = [ options[:limit].to_i, absolute_limit ].min
  end
  options[:offset] &&= options[:offset].to_i
  options[:limit] &&= options[:limit].to_i
  allowed_methods.inject(scoped_relation) do |r, m|
    r = r.send(m, options[m]) if options[m].present?
    r
  end
end