query_helper 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/query_helper.rb +15 -6
- data/lib/query_helper/associations.rb +4 -0
- data/lib/query_helper/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1988f3c68a54af6511be4ef536fa27df2080fdfa5495b8f5532ad729fdf0f029
|
4
|
+
data.tar.gz: c7783fc5b7a275e4a78b9c5ca37be49c85b3e6113c9f657e72ce16101a12f364
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f247dc18f26acd1937c1d963beb6a6e10bb9a96b4bdec974a9831279cacb65e3d12cc3f42cb01ab97135fc164d0e263349793ccfb51784ab72700a3b6d890abf
|
7
|
+
data.tar.gz: 4573625d4a526036fae518209836ad7be1aec3b49914cfad3e457182aeab810597903b260e74422b8563f2ed04a4623a9c11907aa791014abb5ffefe5dc41037
|
data/Gemfile.lock
CHANGED
data/lib/query_helper.rb
CHANGED
@@ -13,7 +13,7 @@ require "query_helper/invalid_query_error"
|
|
13
13
|
|
14
14
|
class QueryHelper
|
15
15
|
|
16
|
-
attr_accessor :model, :query, :bind_variables, :sql_filter, :sql_sort, :page, :per_page, :single_record, :associations, :as_json_options, :executed_query, :api_payload
|
16
|
+
attr_accessor :model, :query, :bind_variables, :sql_filter, :sql_sort, :page, :per_page, :single_record, :associations, :as_json_options, :executed_query, :api_payload, :preload
|
17
17
|
|
18
18
|
def initialize(
|
19
19
|
model: nil, # the model to run the query against
|
@@ -27,7 +27,8 @@ class QueryHelper
|
|
27
27
|
associations: [], # a list of activerecord associations you'd like included in the payload
|
28
28
|
as_json_options: nil, # a list of as_json options you'd like run before returning the payload
|
29
29
|
custom_mappings: {}, # custom keyword => sql_expression mappings
|
30
|
-
api_payload: false # Return the paginated payload or simply return the result array
|
30
|
+
api_payload: false, # Return the paginated payload or simply return the result array
|
31
|
+
preload: [] # preload activerecord associations - used instead of `associations` when you don't want them included in the payload
|
31
32
|
)
|
32
33
|
@model = model
|
33
34
|
@query = query
|
@@ -41,6 +42,7 @@ class QueryHelper
|
|
41
42
|
@as_json_options = as_json_options
|
42
43
|
@custom_mappings = custom_mappings
|
43
44
|
@api_payload = api_payload
|
45
|
+
@preload = preload
|
44
46
|
|
45
47
|
if @page && @per_page
|
46
48
|
# Determine limit and offset
|
@@ -60,7 +62,8 @@ class QueryHelper
|
|
60
62
|
associations: [],
|
61
63
|
as_json_options: nil,
|
62
64
|
single_record: nil,
|
63
|
-
custom_mappings: nil
|
65
|
+
custom_mappings: nil,
|
66
|
+
preload: []
|
64
67
|
)
|
65
68
|
@model = model if model
|
66
69
|
@query = query if query
|
@@ -70,6 +73,7 @@ class QueryHelper
|
|
70
73
|
@single_record = single_record if single_record
|
71
74
|
@as_json_options = as_json_options if as_json_options
|
72
75
|
@custom_mappings = custom_mappings if custom_mappings
|
76
|
+
@preload = preload if preload
|
73
77
|
end
|
74
78
|
|
75
79
|
def add_filter(operator_code:, criterion:, comparate:)
|
@@ -106,6 +110,7 @@ class QueryHelper
|
|
106
110
|
@results = @results.first if @single_record # Return a single result if requested
|
107
111
|
|
108
112
|
determine_count()
|
113
|
+
preload_associations()
|
109
114
|
load_associations()
|
110
115
|
clean_results()
|
111
116
|
end
|
@@ -116,8 +121,6 @@ class QueryHelper
|
|
116
121
|
return @results
|
117
122
|
end
|
118
123
|
|
119
|
-
|
120
|
-
|
121
124
|
private
|
122
125
|
|
123
126
|
def paginated_results
|
@@ -151,6 +154,13 @@ class QueryHelper
|
|
151
154
|
)
|
152
155
|
end
|
153
156
|
|
157
|
+
def preload_associations
|
158
|
+
Associations.preload_associations(
|
159
|
+
payload: @results,
|
160
|
+
preload: @preload
|
161
|
+
)
|
162
|
+
end
|
163
|
+
|
154
164
|
def clean_results
|
155
165
|
@results.map!{ |r| r.except("_query_full_count") } if @page && @per_page
|
156
166
|
end
|
@@ -185,5 +195,4 @@ class QueryHelper
|
|
185
195
|
model: @model
|
186
196
|
)
|
187
197
|
end
|
188
|
-
|
189
198
|
end
|
@@ -12,6 +12,10 @@ class QueryHelper
|
|
12
12
|
payload.as_json(as_json_options)
|
13
13
|
end
|
14
14
|
|
15
|
+
def self.preload_associations(payload:, preload: [])
|
16
|
+
ActiveRecord::Associations::Preloader.new.preload(payload, preload)
|
17
|
+
end
|
18
|
+
|
15
19
|
def self.json_associations(associations)
|
16
20
|
associations ||= []
|
17
21
|
associations = associations.is_a?(Array) ? associations : [associations]
|
data/lib/query_helper/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: query_helper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Evan McDaniel
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-08-
|
11
|
+
date: 2019-08-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|