class Patterns::Query
Constants
- RelationRequired
Attributes
base_relation[RW]
options[R]
relation[R]
Public Class Methods
call(*args)
click to toggle source
# File lib/patterns/query.rb, line 24 def self.call(*args) new(*args).call end
new(*args)
click to toggle source
# 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
queries(subject)
click to toggle source
# File lib/patterns/query.rb, line 39 def self.queries(subject) self.base_relation = subject end
Public Instance Methods
base_relation()
click to toggle source
# 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
call()
click to toggle source
# 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
Private Instance Methods
query()
click to toggle source
# File lib/patterns/query.rb, line 61 def query raise( NotImplementedError, "You need to implement #query method which returns ActiveRecord::Relation object" ) end