Class: JsonApiClient::Query::Builder
- Inherits:
-
Object
- Object
- JsonApiClient::Query::Builder
show all
- Defined in:
- lib/json_api_client/query/builder.rb
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(klass) ⇒ Builder
Returns a new instance of Builder.
8
9
10
11
12
13
14
15
16
17
18
|
# File 'lib/json_api_client/query/builder.rb', line 8
def initialize(klass)
@klass = klass
@primary_key = nil
@pagination_params = {}
@path_params = {}
@additional_params = {}
@filters = {}
@includes = []
@orders = []
@fields = []
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_name, *args, &block) ⇒ Object
103
104
105
|
# File 'lib/json_api_client/query/builder.rb', line 103
def method_missing(method_name, *args, &block)
to_a.send(method_name, *args, &block)
end
|
Instance Attribute Details
#klass ⇒ Object
Returns the value of attribute klass.
5
6
7
|
# File 'lib/json_api_client/query/builder.rb', line 5
def klass
@klass
end
|
Instance Method Details
#build ⇒ Object
72
73
74
|
# File 'lib/json_api_client/query/builder.rb', line 72
def build
klass.new(params)
end
|
#find(args = {}) ⇒ Object
92
93
94
95
96
97
98
99
100
101
|
# File 'lib/json_api_client/query/builder.rb', line 92
def find(args = {})
case args
when Hash
where(args)
else
@primary_key = args
end
klass.requestor.get(params)
end
|
#first ⇒ Object
68
69
70
|
# File 'lib/json_api_client/query/builder.rb', line 68
def first
paginate(page: 1, per_page: 1).to_a.first
end
|
#includes(*tables) ⇒ Object
32
33
34
35
|
# File 'lib/json_api_client/query/builder.rb', line 32
def includes(*tables)
@includes += parse_related_links(*tables)
self
end
|
#order(*args) ⇒ Object
27
28
29
30
|
# File 'lib/json_api_client/query/builder.rb', line 27
def order(*args)
@orders += parse_orders(*args)
self
end
|
#page(number) ⇒ Object
53
54
55
56
|
# File 'lib/json_api_client/query/builder.rb', line 53
def page(number)
@pagination_params[:number] = number
self
end
|
#paginate(conditions = {}) ⇒ Object
46
47
48
49
50
51
|
# File 'lib/json_api_client/query/builder.rb', line 46
def paginate(conditions = {})
scope = self
scope = scope.page(conditions[:page]) if conditions[:page]
scope = scope.per(conditions[:per_page]) if conditions[:per_page]
scope
end
|
#params ⇒ Object
76
77
78
79
80
81
82
83
84
85
|
# File 'lib/json_api_client/query/builder.rb', line 76
def params
filter_params
.merge()
.merge(includes_params)
.merge(order_params)
.merge(select_params)
.merge(primary_key_params)
.merge(path_params)
.merge(additional_params)
end
|
#per(size) ⇒ Object
58
59
60
61
|
# File 'lib/json_api_client/query/builder.rb', line 58
def per(size)
@pagination_params[:size] = size
self
end
|
#select(*fields) ⇒ Object
37
38
39
40
41
42
43
44
|
# File 'lib/json_api_client/query/builder.rb', line 37
def select(*fields)
fields = Array(fields).flatten
fields = fields.map { |i| i.to_s.split(",") }.flatten
@fields += fields.map(&:strip)
self
end
|
#to_a ⇒ Object
Also known as:
all
87
88
89
|
# File 'lib/json_api_client/query/builder.rb', line 87
def to_a
@to_a ||= find
end
|
#where(conditions = {}) ⇒ Object
20
21
22
23
24
25
|
# File 'lib/json_api_client/query/builder.rb', line 20
def where(conditions = {})
@path_params.merge!(conditions.slice(*klass.prefix_params))
@filters.merge!(conditions.except(*klass.prefix_params))
self
end
|
#with_params(more_params) ⇒ Object
63
64
65
66
|
# File 'lib/json_api_client/query/builder.rb', line 63
def with_params(more_params)
@additional_params.merge!(more_params)
self
end
|