Class: AuxiliaryRails::Application::Query

Inherits:
Object
  • Object
show all
Extended by:
Dry::Core::ClassAttributes, Dry::Initializer
Defined in:
lib/auxiliary_rails/application/query.rb

Class Method Summary collapse

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_name, *args, &block) ⇒ Object



30
31
32
33
34
# File 'lib/auxiliary_rails/application/query.rb', line 30

def method_missing(method_name, *args, &block)
  super unless query.respond_to?(method_name)

  query.send(method_name, *args, &block)
end

Class Method Details

.call(*args) ⇒ Object



14
15
16
# File 'lib/auxiliary_rails/application/query.rb', line 14

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

Instance Method Details

#callObject



18
19
20
21
22
23
24
# File 'lib/auxiliary_rails/application/query.rb', line 18

def call
  ensure_proper_relation_types!

  perform

  query
end

#ensure_proper_relation_types!Object (private)

rubocop:disable Metrics/AbcSize, Style/GuardClause



43
44
45
46
47
48
49
50
51
52
53
# File 'lib/auxiliary_rails/application/query.rb', line 43

def ensure_proper_relation_types!
  if self.class.default_relation.nil?
    error!('Undefined `default_relation`')
  end
  if !queriable_object?(self.class.default_relation)
    error!('Invalid class of `default_relation`')
  end
  if !relation.nil? && !queriable_object?(relation)
    error!('Invalid class of `relation` option')
  end
end

#error!(message = nil) ⇒ Object (private)

rubocop:enable Metrics/AbcSize, Style/GuardClause

Raises:



56
57
58
59
# File 'lib/auxiliary_rails/application/query.rb', line 56

def error!(message = nil)
  raise error_class,
    "`#{self.class}` #{message || 'Query raised an error.'}"
end

#error_classObject (private)



61
62
63
# File 'lib/auxiliary_rails/application/query.rb', line 61

def error_class
  AuxiliaryRails::Application::Error
end

#performObject

Raises:

  • (NotImplementedError)


26
27
28
# File 'lib/auxiliary_rails/application/query.rb', line 26

def perform
  raise NotImplementedError
end

#queriable_object?(object) ⇒ Boolean (private)



65
66
67
# File 'lib/auxiliary_rails/application/query.rb', line 65

def queriable_object?(object)
  object.is_a?(ActiveRecord::Relation)
end

#query(scoped_query = nil) ⇒ Object (private)



69
70
71
72
73
74
75
# File 'lib/auxiliary_rails/application/query.rb', line 69

def query(scoped_query = nil)
  @query ||= (relation || self.class.default_relation)

  @query = scoped_query unless scoped_query.nil?

  @query
end

#respond_to_missing?(method_name, include_private = false) ⇒ Boolean



36
37
38
# File 'lib/auxiliary_rails/application/query.rb', line 36

def respond_to_missing?(method_name, include_private = false)
  query.respond_to?(method_name) || super
end