Class: Axel::Querier

Inherits:
Object
  • Object
show all
Defined in:
app/models/axel/querier.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(klass) ⇒ Querier

Returns a new instance of Querier.



37
38
39
40
41
42
43
44
# File 'app/models/axel/querier.rb', line 37

def initialize(klass)
  self.klass = klass
  self.records = []
  self.extra_paths = []
  self.loaded = false
  self.where_values = {}.with_indifferent_access
  self.request_option_values = {}.with_indifferent_access
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

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



156
157
158
159
160
161
162
163
164
# File 'app/models/axel/querier.rb', line 156

def method_missing(method, *args, &block)
  if Array.method_defined?(method)
    to_a.public_send(method, *args, &block)
  elsif klass.routes.has_key? method
    klass.public_send method, *args
  else
    super
  end
end

Instance Attribute Details

#klassObject

Returns the value of attribute klass.



17
18
19
# File 'app/models/axel/querier.rb', line 17

def klass
  @klass
end

#loadedObject Also known as: loaded?

Returns the value of attribute loaded.



18
19
20
# File 'app/models/axel/querier.rb', line 18

def loaded
  @loaded
end

#pagedObject

Returns the value of attribute paged.



13
14
15
# File 'app/models/axel/querier.rb', line 13

def paged
  @paged
end

Class Method Details

.query_methodsObject



23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'app/models/axel/querier.rb', line 23

def self.query_methods
  [
    :all,
    :none,
    :where,
    :uri,
    :to_a,
    :at_path,
    :request_options,
    :without_default_path,
    :paged
  ]
end

Instance Method Details

#at_path(*paths) ⇒ Object



52
53
54
55
56
57
# File 'app/models/axel/querier.rb', line 52

def at_path(*paths)
  return self if paths.blank?
  query = clone
  query.extra_paths += paths
  query
end

#inspectObject



104
105
106
# File 'app/models/axel/querier.rb', line 104

def inspect
  to_a.inspect
end

#noneObject



82
83
84
85
86
87
# File 'app/models/axel/querier.rb', line 82

def none
  query = clone
  query.loaded!
  query.records = []
  query
end

#paged?Object

Returns the value of attribute paged.



21
22
23
# File 'app/models/axel/querier.rb', line 21

def paged
  @paged
end

#reloadObject



95
96
97
98
# File 'app/models/axel/querier.rb', line 95

def reload
  reset
  self
end

#request_options(params = {}) ⇒ Object Also known as: all



74
75
76
77
78
79
# File 'app/models/axel/querier.rb', line 74

def request_options(params = {})
  return self if params.blank? || !params.is_a?(Hash)
  query = clone
  query.request_option_values.deep_merge! params
  query
end

#respond_to?(method, include_private = false) ⇒ Boolean

Returns:

  • (Boolean)


152
153
154
# File 'app/models/axel/querier.rb', line 152

def respond_to?(method, include_private = false)
  super || Array.public_method_defined?(method) || klass.routes.has_key?(method)
end

#to_aObject



100
101
102
# File 'app/models/axel/querier.rb', line 100

def to_a
  Array(loaded? ? records : self.records = run_requests)
end

#uri(base_url) ⇒ Object



60
61
62
63
64
65
# File 'app/models/axel/querier.rb', line 60

def uri(base_url)
  return self if base_url.blank?
  query = clone
  query.manual_uri = base_url.to_s
  query
end

#where(params = {}) ⇒ Object



67
68
69
70
71
72
# File 'app/models/axel/querier.rb', line 67

def where(params = {})
  return self if params.blank? || !params.is_a?(Hash)
  query = clone
  query.request_option_values.deep_merge! params: params
  query
end

#without_default_pathObject



89
90
91
92
93
# File 'app/models/axel/querier.rb', line 89

def without_default_path
  query = clone
  query.manual_uri = klass.site
  query
end