dbee-active_record 2.0.4 → 2.2.0
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/.rubocop.yml +14 -13
- data/.ruby-version +1 -1
- data/.travis.yml +4 -10
- data/CHANGELOG.md +24 -0
- data/Guardfile +2 -1
- data/README.md +1 -1
- data/dbee-active_record.gemspec +21 -8
- data/exe/.gitkeep +0 -0
- data/lib/dbee/providers/active_record_provider.rb +3 -3
- data/lib/dbee/providers/active_record_provider/expression_builder.rb +96 -55
- data/lib/dbee/providers/active_record_provider/maker.rb +37 -0
- data/lib/dbee/providers/active_record_provider/{expression_builder/constraint_maker.rb → makers/constraint.rb} +12 -12
- data/lib/dbee/providers/active_record_provider/{expression_builder/order_maker.rb → makers/order.rb} +9 -9
- data/lib/dbee/providers/active_record_provider/makers/select.rb +81 -0
- data/lib/dbee/providers/active_record_provider/makers/where.rb +111 -0
- data/lib/dbee/providers/active_record_provider/version.rb +1 -1
- data/spec/db_helper.rb +134 -14
- data/spec/dbee/providers/active_record_provider/expression_builder_spec.rb +90 -0
- data/spec/dbee/providers/active_record_provider/makers/where_spec.rb +260 -0
- data/spec/dbee/providers/active_record_provider_spec.rb +112 -14
- data/spec/fixtures/active_record_snapshots/five_table_query.yaml +1 -0
- data/spec/fixtures/active_record_snapshots/multiple_same_table_query_with_static_constraints.yaml +1 -0
- data/spec/fixtures/active_record_snapshots/one_table_empty_query.yaml +11 -0
- data/spec/fixtures/active_record_snapshots/one_table_query.yaml +1 -0
- data/spec/fixtures/active_record_snapshots/one_table_query_with_ascending_sort.yaml +1 -0
- data/spec/fixtures/active_record_snapshots/one_table_query_with_descending_sort.yaml +1 -0
- data/spec/fixtures/active_record_snapshots/one_table_query_with_filters.yaml +9 -8
- data/spec/fixtures/active_record_snapshots/one_table_query_with_limit.yaml +1 -0
- data/spec/fixtures/active_record_snapshots/one_table_query_with_multiple_sorts.yaml +1 -0
- data/spec/fixtures/active_record_snapshots/partitioner_example_1_query.yaml +1 -0
- data/spec/fixtures/active_record_snapshots/partitioner_example_2_query.yaml +1 -0
- data/spec/fixtures/active_record_snapshots/reverse_polymorphic_query.yaml +1 -0
- data/spec/fixtures/active_record_snapshots/two_table_query.yaml +1 -0
- data/spec/fixtures/active_record_snapshots/two_table_query_with_aggregation.yaml +72 -0
- data/spec/fixtures/active_record_snapshots/two_table_query_with_pivoting.yaml +89 -0
- data/spec/fixtures/models.yaml +112 -84
- data/spec/spec_helper.rb +13 -2
- metadata +96 -28
- data/lib/dbee/providers/active_record_provider/expression_builder/select_maker.rb +0 -33
- data/lib/dbee/providers/active_record_provider/expression_builder/where_maker.rb +0 -68
data/spec/spec_helper.rb
CHANGED
|
@@ -7,8 +7,15 @@
|
|
|
7
7
|
# LICENSE file in the root directory of this source tree.
|
|
8
8
|
#
|
|
9
9
|
|
|
10
|
-
require 'yaml'
|
|
11
10
|
require 'pry'
|
|
11
|
+
require 'super_diff/rspec'
|
|
12
|
+
require 'yaml'
|
|
13
|
+
|
|
14
|
+
RSpec.configure do |config|
|
|
15
|
+
# Allow for disabling auto focus mode in certain environments like CI to
|
|
16
|
+
# prevent false positives when only a subset of the suite passes.
|
|
17
|
+
config.filter_run_when_matching :focus unless ENV['DISABLE_RSPEC_FOCUS'] == 'true'
|
|
18
|
+
end
|
|
12
19
|
|
|
13
20
|
unless ENV['DISABLE_SIMPLECOV'] == 'true'
|
|
14
21
|
require 'simplecov'
|
|
@@ -35,7 +42,7 @@ def fixture(*filename)
|
|
|
35
42
|
end
|
|
36
43
|
|
|
37
44
|
def yaml_fixture_files(*directory)
|
|
38
|
-
Dir[File.join('spec', 'fixtures', *directory, '*.yaml')].map do |filename|
|
|
45
|
+
Dir[File.join('spec', 'fixtures', *directory, '**', '*.yaml')].map do |filename|
|
|
39
46
|
[
|
|
40
47
|
filename,
|
|
41
48
|
yaml_file_read(filename)
|
|
@@ -50,3 +57,7 @@ end
|
|
|
50
57
|
def file_read(*filename)
|
|
51
58
|
File.open(File.join(*filename), 'r:bom|utf-8').read
|
|
52
59
|
end
|
|
60
|
+
|
|
61
|
+
def models
|
|
62
|
+
yaml_fixture('models.yaml')
|
|
63
|
+
end
|
metadata
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dbee-active_record
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.0
|
|
4
|
+
version: 2.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Matthew Ruggio
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
- Craig Kattner
|
|
9
|
+
autorequire:
|
|
10
|
+
bindir: exe
|
|
10
11
|
cert_chain: []
|
|
11
|
-
date:
|
|
12
|
+
date: 2021-03-11 00:00:00.000000000 Z
|
|
12
13
|
dependencies:
|
|
13
14
|
- !ruby/object:Gem::Dependency
|
|
14
15
|
name: activerecord
|
|
@@ -36,20 +37,14 @@ dependencies:
|
|
|
36
37
|
requirements:
|
|
37
38
|
- - "~>"
|
|
38
39
|
- !ruby/object:Gem::Version
|
|
39
|
-
version: '
|
|
40
|
-
- - ">="
|
|
41
|
-
- !ruby/object:Gem::Version
|
|
42
|
-
version: 2.0.3
|
|
40
|
+
version: '3'
|
|
43
41
|
type: :runtime
|
|
44
42
|
prerelease: false
|
|
45
43
|
version_requirements: !ruby/object:Gem::Requirement
|
|
46
44
|
requirements:
|
|
47
45
|
- - "~>"
|
|
48
46
|
- !ruby/object:Gem::Version
|
|
49
|
-
version: '
|
|
50
|
-
- - ">="
|
|
51
|
-
- !ruby/object:Gem::Version
|
|
52
|
-
version: 2.0.3
|
|
47
|
+
version: '3'
|
|
53
48
|
- !ruby/object:Gem::Dependency
|
|
54
49
|
name: guard-rspec
|
|
55
50
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -92,6 +87,20 @@ dependencies:
|
|
|
92
87
|
- - "~>"
|
|
93
88
|
- !ruby/object:Gem::Version
|
|
94
89
|
version: '0'
|
|
90
|
+
- !ruby/object:Gem::Dependency
|
|
91
|
+
name: pry-byebug
|
|
92
|
+
requirement: !ruby/object:Gem::Requirement
|
|
93
|
+
requirements:
|
|
94
|
+
- - ">="
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: '0'
|
|
97
|
+
type: :development
|
|
98
|
+
prerelease: false
|
|
99
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
100
|
+
requirements:
|
|
101
|
+
- - ">="
|
|
102
|
+
- !ruby/object:Gem::Version
|
|
103
|
+
version: '0'
|
|
95
104
|
- !ruby/object:Gem::Dependency
|
|
96
105
|
name: rake
|
|
97
106
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -126,42 +135,70 @@ dependencies:
|
|
|
126
135
|
requirements:
|
|
127
136
|
- - "~>"
|
|
128
137
|
- !ruby/object:Gem::Version
|
|
129
|
-
version:
|
|
138
|
+
version: '1'
|
|
130
139
|
type: :development
|
|
131
140
|
prerelease: false
|
|
132
141
|
version_requirements: !ruby/object:Gem::Requirement
|
|
133
142
|
requirements:
|
|
134
143
|
- - "~>"
|
|
135
144
|
- !ruby/object:Gem::Version
|
|
136
|
-
version:
|
|
145
|
+
version: '1'
|
|
146
|
+
- !ruby/object:Gem::Dependency
|
|
147
|
+
name: rubocop-rake
|
|
148
|
+
requirement: !ruby/object:Gem::Requirement
|
|
149
|
+
requirements:
|
|
150
|
+
- - ">="
|
|
151
|
+
- !ruby/object:Gem::Version
|
|
152
|
+
version: '0'
|
|
153
|
+
type: :development
|
|
154
|
+
prerelease: false
|
|
155
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
156
|
+
requirements:
|
|
157
|
+
- - ">="
|
|
158
|
+
- !ruby/object:Gem::Version
|
|
159
|
+
version: '0'
|
|
160
|
+
- !ruby/object:Gem::Dependency
|
|
161
|
+
name: rubocop-rspec
|
|
162
|
+
requirement: !ruby/object:Gem::Requirement
|
|
163
|
+
requirements:
|
|
164
|
+
- - ">="
|
|
165
|
+
- !ruby/object:Gem::Version
|
|
166
|
+
version: '0'
|
|
167
|
+
type: :development
|
|
168
|
+
prerelease: false
|
|
169
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
170
|
+
requirements:
|
|
171
|
+
- - ">="
|
|
172
|
+
- !ruby/object:Gem::Version
|
|
173
|
+
version: '0'
|
|
137
174
|
- !ruby/object:Gem::Dependency
|
|
138
175
|
name: simplecov
|
|
139
176
|
requirement: !ruby/object:Gem::Requirement
|
|
140
177
|
requirements:
|
|
141
178
|
- - "~>"
|
|
142
179
|
- !ruby/object:Gem::Version
|
|
143
|
-
version: 0.
|
|
180
|
+
version: 0.19.0
|
|
144
181
|
type: :development
|
|
145
182
|
prerelease: false
|
|
146
183
|
version_requirements: !ruby/object:Gem::Requirement
|
|
147
184
|
requirements:
|
|
148
185
|
- - "~>"
|
|
149
186
|
- !ruby/object:Gem::Version
|
|
150
|
-
version: 0.
|
|
187
|
+
version: 0.19.0
|
|
151
188
|
- !ruby/object:Gem::Dependency
|
|
152
189
|
name: simplecov-console
|
|
153
190
|
requirement: !ruby/object:Gem::Requirement
|
|
154
191
|
requirements:
|
|
155
192
|
- - "~>"
|
|
156
193
|
- !ruby/object:Gem::Version
|
|
157
|
-
version: 0.
|
|
194
|
+
version: 0.7.0
|
|
158
195
|
type: :development
|
|
159
196
|
prerelease: false
|
|
160
197
|
version_requirements: !ruby/object:Gem::Requirement
|
|
161
198
|
requirements:
|
|
162
199
|
- - "~>"
|
|
163
200
|
- !ruby/object:Gem::Version
|
|
164
|
-
version: 0.
|
|
201
|
+
version: 0.7.0
|
|
165
202
|
- !ruby/object:Gem::Dependency
|
|
166
203
|
name: sqlite3
|
|
167
204
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -176,12 +213,26 @@ dependencies:
|
|
|
176
213
|
- - "~>"
|
|
177
214
|
- !ruby/object:Gem::Version
|
|
178
215
|
version: '1'
|
|
216
|
+
- !ruby/object:Gem::Dependency
|
|
217
|
+
name: super_diff
|
|
218
|
+
requirement: !ruby/object:Gem::Requirement
|
|
219
|
+
requirements:
|
|
220
|
+
- - "~>"
|
|
221
|
+
- !ruby/object:Gem::Version
|
|
222
|
+
version: '0.6'
|
|
223
|
+
type: :development
|
|
224
|
+
prerelease: false
|
|
225
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
226
|
+
requirements:
|
|
227
|
+
- - "~>"
|
|
228
|
+
- !ruby/object:Gem::Version
|
|
229
|
+
version: '0.6'
|
|
179
230
|
description: " By default Dbee ships with no underlying SQL generator. This library
|
|
180
231
|
will plug in ActiveRecord into Dbee and Dbee will use it for SQL generation.\n"
|
|
181
232
|
email:
|
|
182
233
|
- mruggio@bluemarblepayroll.com
|
|
183
|
-
|
|
184
|
-
|
|
234
|
+
- ckattner@bluemarblepayroll.com
|
|
235
|
+
executables: []
|
|
185
236
|
extensions: []
|
|
186
237
|
extra_rdoc_files: []
|
|
187
238
|
files:
|
|
@@ -199,20 +250,25 @@ files:
|
|
|
199
250
|
- Rakefile
|
|
200
251
|
- bin/console
|
|
201
252
|
- dbee-active_record.gemspec
|
|
253
|
+
- exe/.gitkeep
|
|
202
254
|
- lib/dbee/providers/active_record_provider.rb
|
|
203
255
|
- lib/dbee/providers/active_record_provider/expression_builder.rb
|
|
204
|
-
- lib/dbee/providers/active_record_provider/
|
|
205
|
-
- lib/dbee/providers/active_record_provider/
|
|
206
|
-
- lib/dbee/providers/active_record_provider/
|
|
207
|
-
- lib/dbee/providers/active_record_provider/
|
|
256
|
+
- lib/dbee/providers/active_record_provider/maker.rb
|
|
257
|
+
- lib/dbee/providers/active_record_provider/makers/constraint.rb
|
|
258
|
+
- lib/dbee/providers/active_record_provider/makers/order.rb
|
|
259
|
+
- lib/dbee/providers/active_record_provider/makers/select.rb
|
|
260
|
+
- lib/dbee/providers/active_record_provider/makers/where.rb
|
|
208
261
|
- lib/dbee/providers/active_record_provider/obfuscated_alias_maker.rb
|
|
209
262
|
- lib/dbee/providers/active_record_provider/safe_alias_maker.rb
|
|
210
263
|
- lib/dbee/providers/active_record_provider/version.rb
|
|
211
264
|
- spec/config/database.yaml.ci
|
|
212
265
|
- spec/db_helper.rb
|
|
266
|
+
- spec/dbee/providers/active_record_provider/expression_builder_spec.rb
|
|
267
|
+
- spec/dbee/providers/active_record_provider/makers/where_spec.rb
|
|
213
268
|
- spec/dbee/providers/active_record_provider_spec.rb
|
|
214
269
|
- spec/fixtures/active_record_snapshots/five_table_query.yaml
|
|
215
270
|
- spec/fixtures/active_record_snapshots/multiple_same_table_query_with_static_constraints.yaml
|
|
271
|
+
- spec/fixtures/active_record_snapshots/one_table_empty_query.yaml
|
|
216
272
|
- spec/fixtures/active_record_snapshots/one_table_query.yaml
|
|
217
273
|
- spec/fixtures/active_record_snapshots/one_table_query_with_ascending_sort.yaml
|
|
218
274
|
- spec/fixtures/active_record_snapshots/one_table_query_with_descending_sort.yaml
|
|
@@ -223,13 +279,20 @@ files:
|
|
|
223
279
|
- spec/fixtures/active_record_snapshots/partitioner_example_2_query.yaml
|
|
224
280
|
- spec/fixtures/active_record_snapshots/reverse_polymorphic_query.yaml
|
|
225
281
|
- spec/fixtures/active_record_snapshots/two_table_query.yaml
|
|
282
|
+
- spec/fixtures/active_record_snapshots/two_table_query_with_aggregation.yaml
|
|
283
|
+
- spec/fixtures/active_record_snapshots/two_table_query_with_pivoting.yaml
|
|
226
284
|
- spec/fixtures/models.yaml
|
|
227
285
|
- spec/spec_helper.rb
|
|
228
286
|
homepage: https://github.com/bluemarblepayroll/dbee-active_record
|
|
229
287
|
licenses:
|
|
230
288
|
- MIT
|
|
231
|
-
metadata:
|
|
232
|
-
|
|
289
|
+
metadata:
|
|
290
|
+
bug_tracker_uri: https://github.com/bluemarblepayroll/dbee-active_record/issues
|
|
291
|
+
changelog_uri: https://github.com/bluemarblepayroll/dbee-active_record/blob/master/CHANGELOG.md
|
|
292
|
+
documentation_uri: https://www.rubydoc.info/gems/dbee-active_record
|
|
293
|
+
homepage_uri: https://github.com/bluemarblepayroll/dbee-active_record
|
|
294
|
+
source_code_uri: https://github.com/bluemarblepayroll/dbee-active_record
|
|
295
|
+
post_install_message:
|
|
233
296
|
rdoc_options: []
|
|
234
297
|
require_paths:
|
|
235
298
|
- lib
|
|
@@ -237,7 +300,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
237
300
|
requirements:
|
|
238
301
|
- - ">="
|
|
239
302
|
- !ruby/object:Gem::Version
|
|
240
|
-
version: 2.
|
|
303
|
+
version: '2.5'
|
|
241
304
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
242
305
|
requirements:
|
|
243
306
|
- - ">="
|
|
@@ -245,15 +308,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
245
308
|
version: '0'
|
|
246
309
|
requirements: []
|
|
247
310
|
rubygems_version: 3.0.3
|
|
248
|
-
signing_key:
|
|
311
|
+
signing_key:
|
|
249
312
|
specification_version: 4
|
|
250
313
|
summary: Plugs in ActiveRecord so Dbee can use Arel for SQL generation.
|
|
251
314
|
test_files:
|
|
252
315
|
- spec/config/database.yaml.ci
|
|
253
316
|
- spec/db_helper.rb
|
|
317
|
+
- spec/dbee/providers/active_record_provider/expression_builder_spec.rb
|
|
318
|
+
- spec/dbee/providers/active_record_provider/makers/where_spec.rb
|
|
254
319
|
- spec/dbee/providers/active_record_provider_spec.rb
|
|
255
320
|
- spec/fixtures/active_record_snapshots/five_table_query.yaml
|
|
256
321
|
- spec/fixtures/active_record_snapshots/multiple_same_table_query_with_static_constraints.yaml
|
|
322
|
+
- spec/fixtures/active_record_snapshots/one_table_empty_query.yaml
|
|
257
323
|
- spec/fixtures/active_record_snapshots/one_table_query.yaml
|
|
258
324
|
- spec/fixtures/active_record_snapshots/one_table_query_with_ascending_sort.yaml
|
|
259
325
|
- spec/fixtures/active_record_snapshots/one_table_query_with_descending_sort.yaml
|
|
@@ -264,5 +330,7 @@ test_files:
|
|
|
264
330
|
- spec/fixtures/active_record_snapshots/partitioner_example_2_query.yaml
|
|
265
331
|
- spec/fixtures/active_record_snapshots/reverse_polymorphic_query.yaml
|
|
266
332
|
- spec/fixtures/active_record_snapshots/two_table_query.yaml
|
|
333
|
+
- spec/fixtures/active_record_snapshots/two_table_query_with_aggregation.yaml
|
|
334
|
+
- spec/fixtures/active_record_snapshots/two_table_query_with_pivoting.yaml
|
|
267
335
|
- spec/fixtures/models.yaml
|
|
268
336
|
- spec/spec_helper.rb
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
#
|
|
4
|
-
# Copyright (c) 2019-present, Blue Marble Payroll, LLC
|
|
5
|
-
#
|
|
6
|
-
# This source code is licensed under the MIT license found in the
|
|
7
|
-
# LICENSE file in the root directory of this source tree.
|
|
8
|
-
#
|
|
9
|
-
|
|
10
|
-
module Dbee
|
|
11
|
-
module Providers
|
|
12
|
-
class ActiveRecordProvider
|
|
13
|
-
class ExpressionBuilder
|
|
14
|
-
# Derives Arel#project predicates.
|
|
15
|
-
class SelectMaker
|
|
16
|
-
include Singleton
|
|
17
|
-
|
|
18
|
-
def make(column, arel_column, alias_maker)
|
|
19
|
-
column_alias = quote(alias_maker.make(column.display))
|
|
20
|
-
|
|
21
|
-
arel_column.as(column_alias)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
private
|
|
25
|
-
|
|
26
|
-
def quote(value)
|
|
27
|
-
ActiveRecord::Base.connection.quote(value)
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
#
|
|
4
|
-
# Copyright (c) 2019-present, Blue Marble Payroll, LLC
|
|
5
|
-
#
|
|
6
|
-
# This source code is licensed under the MIT license found in the
|
|
7
|
-
# LICENSE file in the root directory of this source tree.
|
|
8
|
-
#
|
|
9
|
-
|
|
10
|
-
module Dbee
|
|
11
|
-
module Providers
|
|
12
|
-
class ActiveRecordProvider
|
|
13
|
-
class ExpressionBuilder
|
|
14
|
-
# Derives Arel#where predicates.
|
|
15
|
-
class WhereMaker
|
|
16
|
-
include Singleton
|
|
17
|
-
|
|
18
|
-
FILTER_EVALUATORS = {
|
|
19
|
-
Query::Filters::Contains => ->(column, val) { column.matches("%#{val}%") },
|
|
20
|
-
Query::Filters::Equals => ->(column, val) { column.eq(val) },
|
|
21
|
-
Query::Filters::GreaterThan => ->(column, val) { column.gt(val) },
|
|
22
|
-
Query::Filters::GreaterThanOrEqualTo => ->(column, val) { column.gteq(val) },
|
|
23
|
-
Query::Filters::LessThan => ->(column, val) { column.lt(val) },
|
|
24
|
-
Query::Filters::LessThanOrEqualTo => ->(column, val) { column.lteq(val) },
|
|
25
|
-
Query::Filters::NotContain => ->(column, val) { column.does_not_match("%#{val}%") },
|
|
26
|
-
Query::Filters::NotEquals => ->(column, val) { column.not_eq(val) },
|
|
27
|
-
Query::Filters::NotStartWith => ->(column, val) { column.does_not_match("#{val}%") },
|
|
28
|
-
Query::Filters::StartsWith => ->(column, val) { column.matches("#{val}%") }
|
|
29
|
-
}.freeze
|
|
30
|
-
|
|
31
|
-
private_constant :FILTER_EVALUATORS
|
|
32
|
-
|
|
33
|
-
def make(filter, arel_column)
|
|
34
|
-
values = normalize(filter.value)
|
|
35
|
-
|
|
36
|
-
if filter.is_a?(Query::Filters::Equals) && values.length > 1
|
|
37
|
-
arel_column.in(values)
|
|
38
|
-
elsif filter.is_a?(Query::Filters::NotEquals) && values.length > 1
|
|
39
|
-
arel_column.not_in(values)
|
|
40
|
-
else
|
|
41
|
-
use_or(filter, arel_column)
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
private
|
|
46
|
-
|
|
47
|
-
def normalize(value)
|
|
48
|
-
value ? Array(value).flatten : [nil]
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def use_or(filter, arel_column)
|
|
52
|
-
predicates = normalize(filter.value).map do |coerced_value|
|
|
53
|
-
method = FILTER_EVALUATORS[filter.class]
|
|
54
|
-
|
|
55
|
-
raise ArgumentError, "cannot compile filter: #{filter}" unless method
|
|
56
|
-
|
|
57
|
-
method.call(arel_column, coerced_value)
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
predicates.inject(predicates.shift) do |memo, predicate|
|
|
61
|
-
memo.or(predicate)
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|