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 || self.class.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.



51
52
53
# File 'lib/patterns/query.rb', line 51

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
42
43
44
45
46
# File 'lib/patterns/query.rb', line 39

def self.queries(subject)
  self.base_relation =
    if subject.is_a?(ActiveRecord::Relation)
      subject
    elsif subject < ActiveRecord::Base
      subject.all
    end
end

Instance Method Details

#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