Class: Patterns::Query

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

Constant Summary collapse

RelationRequired =
Class.new(StandardError)

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ Query

Returns a new instance of Query.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/patterns/query.rb', line 7

def initialize(*args)
  @options = args.extract_options!
  @relation = args.first || base_relation

  if relation.nil?
    raise(
      RelationRequired,
      "Queries require a base relation defined. Use .queries method to define relation."
    )
  elsif !relation.is_a?(ActiveRecord::Relation)
    raise(
      RelationRequired,
      "Queries accept only ActiveRecord::Relation as input"
    )
  end
end

Class Attribute Details

.base_relationObject

Returns the value of attribute base_relation.



56
57
58
# File 'lib/patterns/query.rb', line 56

def base_relation
  @base_relation
end

Class Method Details

.call(*args) ⇒ Object



24
25
26
# File 'lib/patterns/query.rb', line 24

def self.call(*args)
  new(*args).call
end

.queries(subject) ⇒ Object



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

def self.queries(subject)
  self.base_relation = subject
end

Instance Method Details

#base_relationObject



43
44
45
46
47
48
49
50
51
# File 'lib/patterns/query.rb', line 43

def base_relation
  return nil if self.class.base_relation.nil?

  if self.class.base_relation.is_a?(ActiveRecord::Relation)
    self.class.base_relation
  elsif self.class.base_relation < ActiveRecord::Base
    self.class.base_relation.all
  end
end

#callObject



28
29
30
31
32
33
34
35
36
37
# File 'lib/patterns/query.rb', line 28

def call
  query.tap do |relation|
    unless relation.is_a?(ActiveRecord::Relation)
      raise(
        RelationRequired,
        "#query method should return object of ActiveRecord::Relation class"
      )
    end
  end
end