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, opts = {}) ⇒ Builder
Returns a new instance of Builder.
10
11
12
13
14
15
16
17
18
19
20
|
# File 'lib/json_api_client/query/builder.rb', line 10
def initialize(klass, opts = {})
@klass = klass
@primary_key = opts.fetch( :primary_key, nil )
@pagination_params = opts.fetch( :pagination_params, {} )
@path_params = opts.fetch( :path_params, {} )
@additional_params = opts.fetch( :additional_params, {} )
@filters = opts.fetch( :filters, {} )
@includes = opts.fetch( :includes, [] )
@orders = opts.fetch( :orders, [] )
@fields = opts.fetch( :fields, [] )
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_name, *args, &block) ⇒ Object
108
109
110
|
# File 'lib/json_api_client/query/builder.rb', line 108
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.
7
8
9
|
# File 'lib/json_api_client/query/builder.rb', line 7
def klass
@klass
end
|
Instance Method Details
#==(other) ⇒ Object
Also known as:
eql?
119
120
121
122
123
|
# File 'lib/json_api_client/query/builder.rb', line 119
def ==(other)
return false unless other.is_a?(self.class)
hash == other.hash
end
|
#build(attrs = {}) ⇒ Object
69
70
71
|
# File 'lib/json_api_client/query/builder.rb', line 69
def build(attrs = {})
klass.new @path_params.merge(attrs.with_indifferent_access)
end
|
#create(attrs = {}) ⇒ Object
73
74
75
|
# File 'lib/json_api_client/query/builder.rb', line 73
def create(attrs = {})
klass.create @path_params.merge(attrs.with_indifferent_access)
end
|
#find(args = {}) ⇒ Object
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
# File 'lib/json_api_client/query/builder.rb', line 93
def find(args = {})
if klass.raise_on_blank_find_param && args.blank?
raise Errors::NotFound, 'blank .find param'
end
case args
when Hash
scope = where(args)
else
scope = _new_scope( primary_key: args )
end
scope._fetch
end
|
#first ⇒ Object
61
62
63
|
# File 'lib/json_api_client/query/builder.rb', line 61
def first
paginate(page: 1, per_page: 1).to_a.first
end
|
#hash ⇒ Object
112
113
114
115
116
117
|
# File 'lib/json_api_client/query/builder.rb', line 112
def hash
[
klass,
params
].hash
end
|
#includes(*tables) ⇒ Object
34
35
36
|
# File 'lib/json_api_client/query/builder.rb', line 34
def includes(*tables)
_new_scope( includes: parse_related_links(*tables) )
end
|
#last ⇒ Object
65
66
67
|
# File 'lib/json_api_client/query/builder.rb', line 65
def last
paginate(page: 1, per_page: 1).pages.last.to_a.last
end
|
#order(*args) ⇒ Object
30
31
32
|
# File 'lib/json_api_client/query/builder.rb', line 30
def order(*args)
_new_scope( orders: parse_orders(*args) )
end
|
#page(number) ⇒ Object
49
50
51
|
# File 'lib/json_api_client/query/builder.rb', line 49
def page(number)
_new_scope( pagination_params: { klass.paginator.page_param => number || 1 } )
end
|
#paginate(conditions = {}) ⇒ Object
42
43
44
45
46
47
|
# File 'lib/json_api_client/query/builder.rb', line 42
def paginate(conditions = {})
scope = _new_scope
scope = scope.page(conditions[:page]) if conditions[:page]
scope = scope.per(conditions[:per_page]) if conditions[:per_page]
scope
end
|
#params ⇒ Object
77
78
79
80
81
82
83
84
85
86
|
# File 'lib/json_api_client/query/builder.rb', line 77
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
53
54
55
|
# File 'lib/json_api_client/query/builder.rb', line 53
def per(size)
_new_scope( pagination_params: { klass.paginator.per_page_param => size } )
end
|
#select(*fields) ⇒ Object
38
39
40
|
# File 'lib/json_api_client/query/builder.rb', line 38
def select(*fields)
_new_scope( fields: parse_fields(*fields) )
end
|
#to_a ⇒ Object
Also known as:
all
88
89
90
|
# File 'lib/json_api_client/query/builder.rb', line 88
def to_a
@to_a ||= _fetch
end
|
#where(conditions = {}) ⇒ Object
22
23
24
25
26
27
28
|
# File 'lib/json_api_client/query/builder.rb', line 22
def where(conditions = {})
path_conditions = conditions.slice(*klass.prefix_params)
unpathed_conditions = conditions.except(*klass.prefix_params)
_new_scope( path_params: path_conditions, filters: unpathed_conditions )
end
|
#with_params(more_params) ⇒ Object
57
58
59
|
# File 'lib/json_api_client/query/builder.rb', line 57
def with_params(more_params)
_new_scope( additional_params: more_params )
end
|