active_record_extended 2.0.3 → 3.1.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.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +140 -77
  3. data/lib/active_record_extended/arel/nodes.rb +1 -1
  4. data/lib/active_record_extended/arel/{sql_literal.rb → sql_literal_patch.rb} +2 -2
  5. data/lib/active_record_extended/arel/visitors/postgresql_decorator.rb +16 -12
  6. data/lib/active_record_extended/arel.rb +1 -1
  7. data/lib/active_record_extended/patch/array_handler_patch.rb +22 -0
  8. data/lib/active_record_extended/patch/relation_patch.rb +82 -0
  9. data/lib/active_record_extended/patch/where_clause_patch.rb +13 -0
  10. data/lib/active_record_extended/query_methods/any_of.rb +1 -1
  11. data/lib/active_record_extended/query_methods/either.rb +5 -7
  12. data/lib/active_record_extended/query_methods/{select.rb → foster_select.rb} +4 -4
  13. data/lib/active_record_extended/query_methods/json.rb +2 -2
  14. data/lib/active_record_extended/query_methods/unionize.rb +5 -5
  15. data/lib/active_record_extended/query_methods/where_chain.rb +96 -90
  16. data/lib/active_record_extended/query_methods/window.rb +3 -3
  17. data/lib/active_record_extended/query_methods/with_cte.rb +61 -4
  18. data/lib/active_record_extended/utilities/order_by.rb +1 -1
  19. data/lib/active_record_extended/utilities/support.rb +1 -1
  20. data/lib/active_record_extended/version.rb +1 -1
  21. data/lib/active_record_extended.rb +55 -4
  22. metadata +20 -83
  23. data/lib/active_record_extended/active_record/relation_patch.rb +0 -50
  24. data/lib/active_record_extended/active_record.rb +0 -25
  25. data/lib/active_record_extended/patch/5_1/where_clause.rb +0 -11
  26. data/lib/active_record_extended/patch/5_2/where_clause.rb +0 -11
  27. data/lib/active_record_extended/predicate_builder/array_handler_decorator.rb +0 -20
  28. data/spec/active_record_extended_spec.rb +0 -7
  29. data/spec/query_methods/any_of_spec.rb +0 -131
  30. data/spec/query_methods/array_query_spec.rb +0 -64
  31. data/spec/query_methods/either_spec.rb +0 -70
  32. data/spec/query_methods/hash_query_spec.rb +0 -45
  33. data/spec/query_methods/inet_query_spec.rb +0 -112
  34. data/spec/query_methods/json_spec.rb +0 -157
  35. data/spec/query_methods/select_spec.rb +0 -115
  36. data/spec/query_methods/unionize_spec.rb +0 -165
  37. data/spec/query_methods/window_spec.rb +0 -51
  38. data/spec/query_methods/with_cte_spec.rb +0 -50
  39. data/spec/spec_helper.rb +0 -28
  40. data/spec/sql_inspections/any_of_sql_spec.rb +0 -41
  41. data/spec/sql_inspections/arel/aggregate_function_name_spec.rb +0 -41
  42. data/spec/sql_inspections/arel/array_spec.rb +0 -63
  43. data/spec/sql_inspections/arel/inet_spec.rb +0 -66
  44. data/spec/sql_inspections/contains_sql_queries_spec.rb +0 -47
  45. data/spec/sql_inspections/either_sql_spec.rb +0 -71
  46. data/spec/sql_inspections/json_sql_spec.rb +0 -82
  47. data/spec/sql_inspections/unionize_sql_spec.rb +0 -124
  48. data/spec/sql_inspections/window_sql_spec.rb +0 -98
  49. data/spec/sql_inspections/with_cte_sql_spec.rb +0 -95
  50. data/spec/support/database_cleaner.rb +0 -15
  51. data/spec/support/models.rb +0 -80
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_record_extended
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.3
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - George Protacio-Karaszi
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2021-06-25 00:00:00.000000000 Z
13
+ date: 2022-12-01 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activerecord
@@ -18,34 +18,20 @@ dependencies:
18
18
  requirements:
19
19
  - - ">="
20
20
  - !ruby/object:Gem::Version
21
- version: '5.1'
21
+ version: '5.2'
22
22
  - - "<"
23
23
  - !ruby/object:Gem::Version
24
- version: '6.2'
24
+ version: 7.1.0
25
25
  type: :runtime
26
26
  prerelease: false
27
27
  version_requirements: !ruby/object:Gem::Requirement
28
28
  requirements:
29
29
  - - ">="
30
30
  - !ruby/object:Gem::Version
31
- version: '5.1'
31
+ version: '5.2'
32
32
  - - "<"
33
33
  - !ruby/object:Gem::Version
34
- version: '6.2'
35
- - !ruby/object:Gem::Dependency
36
- name: ar_outer_joins
37
- requirement: !ruby/object:Gem::Requirement
38
- requirements:
39
- - - "~>"
40
- - !ruby/object:Gem::Version
41
- version: '0.2'
42
- type: :runtime
43
- prerelease: false
44
- version_requirements: !ruby/object:Gem::Requirement
45
- requirements:
46
- - - "~>"
47
- - !ruby/object:Gem::Version
48
- version: '0.2'
34
+ version: 7.1.0
49
35
  - !ruby/object:Gem::Dependency
50
36
  name: pg
51
37
  requirement: !ruby/object:Gem::Requirement
@@ -66,7 +52,7 @@ dependencies:
66
52
  requirements:
67
53
  - - ">="
68
54
  - !ruby/object:Gem::Version
69
- version: '1.16'
55
+ version: '2.2'
70
56
  - - "<"
71
57
  - !ruby/object:Gem::Version
72
58
  version: '3.0'
@@ -76,7 +62,7 @@ dependencies:
76
62
  requirements:
77
63
  - - ">="
78
64
  - !ruby/object:Gem::Version
79
- version: '1.16'
65
+ version: '2.2'
80
66
  - - "<"
81
67
  - !ruby/object:Gem::Version
82
68
  version: '3.0'
@@ -86,14 +72,14 @@ dependencies:
86
72
  requirements:
87
73
  - - "~>"
88
74
  - !ruby/object:Gem::Version
89
- version: '1.6'
75
+ version: '2.0'
90
76
  type: :development
91
77
  prerelease: false
92
78
  version_requirements: !ruby/object:Gem::Requirement
93
79
  requirements:
94
80
  - - "~>"
95
81
  - !ruby/object:Gem::Version
96
- version: '1.6'
82
+ version: '2.0'
97
83
  - !ruby/object:Gem::Dependency
98
84
  name: rake
99
85
  requirement: !ruby/object:Gem::Requirement
@@ -147,22 +133,20 @@ extra_rdoc_files: []
147
133
  files:
148
134
  - README.md
149
135
  - lib/active_record_extended.rb
150
- - lib/active_record_extended/active_record.rb
151
- - lib/active_record_extended/active_record/relation_patch.rb
152
136
  - lib/active_record_extended/arel.rb
153
137
  - lib/active_record_extended/arel/aggregate_function_name.rb
154
138
  - lib/active_record_extended/arel/nodes.rb
155
139
  - lib/active_record_extended/arel/predications.rb
156
- - lib/active_record_extended/arel/sql_literal.rb
140
+ - lib/active_record_extended/arel/sql_literal_patch.rb
157
141
  - lib/active_record_extended/arel/visitors/postgresql_decorator.rb
158
- - lib/active_record_extended/patch/5_1/where_clause.rb
159
- - lib/active_record_extended/patch/5_2/where_clause.rb
160
- - lib/active_record_extended/predicate_builder/array_handler_decorator.rb
142
+ - lib/active_record_extended/patch/array_handler_patch.rb
143
+ - lib/active_record_extended/patch/relation_patch.rb
144
+ - lib/active_record_extended/patch/where_clause_patch.rb
161
145
  - lib/active_record_extended/query_methods/any_of.rb
162
146
  - lib/active_record_extended/query_methods/either.rb
147
+ - lib/active_record_extended/query_methods/foster_select.rb
163
148
  - lib/active_record_extended/query_methods/inet.rb
164
149
  - lib/active_record_extended/query_methods/json.rb
165
- - lib/active_record_extended/query_methods/select.rb
166
150
  - lib/active_record_extended/query_methods/unionize.rb
167
151
  - lib/active_record_extended/query_methods/where_chain.rb
168
152
  - lib/active_record_extended/query_methods/window.rb
@@ -170,34 +154,11 @@ files:
170
154
  - lib/active_record_extended/utilities/order_by.rb
171
155
  - lib/active_record_extended/utilities/support.rb
172
156
  - lib/active_record_extended/version.rb
173
- - spec/active_record_extended_spec.rb
174
- - spec/query_methods/any_of_spec.rb
175
- - spec/query_methods/array_query_spec.rb
176
- - spec/query_methods/either_spec.rb
177
- - spec/query_methods/hash_query_spec.rb
178
- - spec/query_methods/inet_query_spec.rb
179
- - spec/query_methods/json_spec.rb
180
- - spec/query_methods/select_spec.rb
181
- - spec/query_methods/unionize_spec.rb
182
- - spec/query_methods/window_spec.rb
183
- - spec/query_methods/with_cte_spec.rb
184
- - spec/spec_helper.rb
185
- - spec/sql_inspections/any_of_sql_spec.rb
186
- - spec/sql_inspections/arel/aggregate_function_name_spec.rb
187
- - spec/sql_inspections/arel/array_spec.rb
188
- - spec/sql_inspections/arel/inet_spec.rb
189
- - spec/sql_inspections/contains_sql_queries_spec.rb
190
- - spec/sql_inspections/either_sql_spec.rb
191
- - spec/sql_inspections/json_sql_spec.rb
192
- - spec/sql_inspections/unionize_sql_spec.rb
193
- - spec/sql_inspections/window_sql_spec.rb
194
- - spec/sql_inspections/with_cte_sql_spec.rb
195
- - spec/support/database_cleaner.rb
196
- - spec/support/models.rb
197
157
  homepage: https://github.com/georgekaraszi/ActiveRecordExtended
198
158
  licenses:
199
159
  - MIT
200
- metadata: {}
160
+ metadata:
161
+ rubygems_mfa_required: 'true'
201
162
  post_install_message:
202
163
  rdoc_options: []
203
164
  require_paths:
@@ -206,39 +167,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
206
167
  requirements:
207
168
  - - ">="
208
169
  - !ruby/object:Gem::Version
209
- version: '2.4'
170
+ version: '2.5'
210
171
  required_rubygems_version: !ruby/object:Gem::Requirement
211
172
  requirements:
212
173
  - - ">="
213
174
  - !ruby/object:Gem::Version
214
175
  version: '0'
215
176
  requirements: []
216
- rubygems_version: 3.0.6
177
+ rubygems_version: 3.3.19
217
178
  signing_key:
218
179
  specification_version: 4
219
180
  summary: Adds extended functionality to Activerecord Postgres implementation
220
- test_files:
221
- - spec/active_record_extended_spec.rb
222
- - spec/query_methods/any_of_spec.rb
223
- - spec/query_methods/array_query_spec.rb
224
- - spec/query_methods/either_spec.rb
225
- - spec/query_methods/hash_query_spec.rb
226
- - spec/query_methods/inet_query_spec.rb
227
- - spec/query_methods/json_spec.rb
228
- - spec/query_methods/select_spec.rb
229
- - spec/query_methods/unionize_spec.rb
230
- - spec/query_methods/window_spec.rb
231
- - spec/query_methods/with_cte_spec.rb
232
- - spec/spec_helper.rb
233
- - spec/sql_inspections/any_of_sql_spec.rb
234
- - spec/sql_inspections/arel/aggregate_function_name_spec.rb
235
- - spec/sql_inspections/arel/array_spec.rb
236
- - spec/sql_inspections/arel/inet_spec.rb
237
- - spec/sql_inspections/contains_sql_queries_spec.rb
238
- - spec/sql_inspections/either_sql_spec.rb
239
- - spec/sql_inspections/json_sql_spec.rb
240
- - spec/sql_inspections/unionize_sql_spec.rb
241
- - spec/sql_inspections/window_sql_spec.rb
242
- - spec/sql_inspections/with_cte_sql_spec.rb
243
- - spec/support/database_cleaner.rb
244
- - spec/support/models.rb
181
+ test_files: []
@@ -1,50 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "active_record_extended/query_methods/window"
4
- require "active_record_extended/query_methods/unionize"
5
- require "active_record_extended/query_methods/json"
6
-
7
- module ActiveRecordExtended
8
- module RelationPatch
9
- module QueryDelegation
10
- delegate :with, :define_window, :select_window, :foster_select, to: :all
11
- delegate(*::ActiveRecordExtended::QueryMethods::Unionize::UNIONIZE_METHODS, to: :all)
12
- delegate(*::ActiveRecordExtended::QueryMethods::Json::JSON_QUERY_METHODS, to: :all)
13
- end
14
-
15
- module Merger
16
- def normal_values
17
- super + [:union, :define_window]
18
- end
19
-
20
- def merge
21
- merge_ctes!
22
- super
23
- end
24
-
25
- def merge_ctes!
26
- return unless other.with_values?
27
-
28
- if other.recursive_value? && !relation.recursive_value?
29
- relation.with!(:chain).recursive(other.cte)
30
- else
31
- relation.with!(other.cte)
32
- end
33
- end
34
- end
35
-
36
- module ArelBuildPatch
37
- def build_arel(*aliases)
38
- super.tap do |arel|
39
- build_windows(arel) if window_values?
40
- build_unions(arel) if union_values?
41
- build_with(arel) if with_values?
42
- end
43
- end
44
- end
45
- end
46
- end
47
-
48
- ActiveRecord::Relation.prepend(ActiveRecordExtended::RelationPatch::ArelBuildPatch)
49
- ActiveRecord::Relation::Merger.prepend(ActiveRecordExtended::RelationPatch::Merger)
50
- ActiveRecord::Querying.prepend(ActiveRecordExtended::RelationPatch::QueryDelegation)
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "active_record"
4
- require "active_record/relation"
5
- require "active_record/relation/merger"
6
- require "active_record/relation/query_methods"
7
-
8
- require "active_record_extended/predicate_builder/array_handler_decorator"
9
-
10
- require "active_record_extended/active_record/relation_patch"
11
-
12
- require "active_record_extended/query_methods/where_chain"
13
- require "active_record_extended/query_methods/with_cte"
14
- require "active_record_extended/query_methods/unionize"
15
- require "active_record_extended/query_methods/any_of"
16
- require "active_record_extended/query_methods/either"
17
- require "active_record_extended/query_methods/inet"
18
- require "active_record_extended/query_methods/json"
19
- require "active_record_extended/query_methods/select"
20
-
21
- if Gem::Requirement.new("~> 5.1.0").satisfied_by?(ActiveRecord.gem_version)
22
- require "active_record_extended/patch/5_1/where_clause"
23
- else
24
- require "active_record_extended/patch/5_2/where_clause"
25
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ActiveRecordExtended
4
- module WhereClause
5
- def modified_predicates(&block)
6
- ::ActiveRecord::Relation::WhereClause.new(predicates.map(&block), binds)
7
- end
8
- end
9
- end
10
-
11
- ActiveRecord::Relation::WhereClause.prepend(ActiveRecordExtended::WhereClause)
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ActiveRecordExtended
4
- module WhereClause
5
- def modified_predicates(&block)
6
- ::ActiveRecord::Relation::WhereClause.new(predicates.map(&block))
7
- end
8
- end
9
- end
10
-
11
- ActiveRecord::Relation::WhereClause.prepend(ActiveRecordExtended::WhereClause)
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "active_record/relation/predicate_builder"
4
- require "active_record/relation/predicate_builder/array_handler"
5
-
6
- module ActiveRecordExtended
7
- module ArrayHandlerDecorator
8
- def call(attribute, value)
9
- cache = ActiveRecord::Base.connection.schema_cache
10
- if cache.data_source_exists?(attribute.relation.name)
11
- column = cache.columns(attribute.relation.name).detect { |col| col.name.to_s == attribute.name.to_s }
12
- return attribute.eq(value) if column.try(:array)
13
- end
14
-
15
- super(attribute, value)
16
- end
17
- end
18
- end
19
-
20
- ActiveRecord::PredicateBuilder::ArrayHandler.prepend(ActiveRecordExtended::ArrayHandlerDecorator)
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe ActiveRecordExtended do
4
- it "has a version number" do
5
- expect(ActiveRecordExtended::VERSION).not_to be nil
6
- end
7
- end
@@ -1,131 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "spec_helper"
4
-
5
- RSpec.describe "Active Record Any / None of Methods" do
6
- let!(:one) { User.create!(personal_id: 1) }
7
- let!(:two) { User.create!(personal_id: 2) }
8
- let!(:three) { User.create!(personal_id: 3) }
9
-
10
- let!(:tag_one) { Tag.create!(user_id: one.id) }
11
- let!(:tag_two) { Tag.create!(user_id: two.id) }
12
- let!(:tag_three) { Tag.create!(user_id: three.id) }
13
-
14
- describe "where.any_of/1" do
15
- it "Should return queries that match any of the outlined queries" do
16
- query = User.where.any_of({ personal_id: 1 }, { personal_id: 2 })
17
- expect(query).to include(one, two)
18
- expect(query).to_not include(three)
19
- end
20
-
21
- it "Should accept where query predicates" do
22
- personal_one = User.where(personal_id: 1)
23
- personal_two = User.where(personal_id: 2)
24
- query = User.where.any_of(personal_one, personal_two)
25
-
26
- expect(query).to include(one, two)
27
- expect(query).to_not include(three)
28
- end
29
-
30
- it "Should accept query strings" do
31
- personal_one = User.where(personal_id: 1)
32
-
33
- query = User.where.any_of(personal_one, "personal_id > 2")
34
- expect(query).to include(one, three)
35
- expect(query).to_not include(two)
36
-
37
- query = User.where.any_of(["personal_id >= ?", 2])
38
- expect(query).to include(two, three)
39
- expect(query).to_not include(one)
40
- end
41
-
42
- context "Relationship queries" do
43
- it "Finds records that are queried from two or more has_many associations" do
44
- user_one_tag = Tag.create!(user_id: one.id)
45
- user_two_tag = Tag.create!(user_id: two.id)
46
- query = Tag.where.any_of(one.hm_tags, two.hm_tags)
47
-
48
- expect(query).to include(tag_one, tag_two, user_one_tag, user_two_tag)
49
- expect(query).to_not include(tag_three)
50
- end
51
-
52
- it "Finds records that are dynamically joined" do
53
- user_one_tag = Tag.where(users: { id: one.id }).includes(:user).references(:user)
54
- user_two_tag = Tag.where(users: { id: two.id }).joins(:user)
55
- query = Tag.where.any_of(user_one_tag, user_two_tag)
56
-
57
- expect(query).to include(tag_one, tag_two)
58
- expect(query).to_not include(tag_three)
59
- end
60
-
61
- it "Return matched records of a joined table on the parent level" do
62
- query = Tag.joins(:user).where.any_of(
63
- { users: { personal_id: 1 } },
64
- { users: { personal_id: 3 } }
65
- )
66
-
67
- expect(query).to include(tag_one, tag_three)
68
- expect(query).to_not include(tag_two)
69
- end
70
- end
71
- end
72
-
73
- describe "where.none_of/1" do
74
- it "Should return queries that match none of the outlined queries" do
75
- query = User.where.none_of({ personal_id: 1 }, { personal_id: 2 })
76
- expect(query).to include(three)
77
- expect(query).to_not include(one, two)
78
- end
79
-
80
- it "Should accept where query predicates" do
81
- personal_one = User.where(personal_id: 1)
82
- personal_two = User.where(personal_id: 2)
83
- query = User.where.none_of(personal_one, personal_two)
84
-
85
- expect(query).to include(three)
86
- expect(query).to_not include(one, two)
87
- end
88
-
89
- it "Should accept query strings" do
90
- personal_one = User.where(personal_id: 1)
91
-
92
- query = User.where.none_of(personal_one, "personal_id > 2")
93
- expect(query).to include(two)
94
- expect(query).to_not include(one, three)
95
-
96
- query = User.where.none_of(["personal_id >= ?", 2])
97
- expect(query).to include(one)
98
- expect(query).to_not include(two, three)
99
- end
100
-
101
- context "Relationship queries" do
102
- it "Finds records that are queried from two or more has_many associations" do
103
- user_one_tag = Tag.create!(user_id: one.id)
104
- user_two_tag = Tag.create!(user_id: two.id)
105
- query = Tag.where.none_of(one.hm_tags, two.hm_tags)
106
-
107
- expect(query).to include(tag_three)
108
- expect(query).to_not include(tag_one, tag_two, user_one_tag, user_two_tag)
109
- end
110
-
111
- it "Finds records that are dynamically joined" do
112
- user_one_tag = Tag.where(users: { id: one.id }).includes(:user).references(:user)
113
- user_two_tag = Tag.where(users: { id: two.id }).joins(:user)
114
- query = Tag.where.none_of(user_one_tag, user_two_tag)
115
-
116
- expect(query).to include(tag_three)
117
- expect(query).to_not include(tag_one, tag_two)
118
- end
119
-
120
- it "Return matched records of a joined table on the parent level" do
121
- query = Tag.joins(:user).where.none_of(
122
- { users: { personal_id: 1 } },
123
- { users: { personal_id: 3 } }
124
- )
125
-
126
- expect(query).to include(tag_two)
127
- expect(query).to_not include(tag_one, tag_three)
128
- end
129
- end
130
- end
131
- end
@@ -1,64 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "spec_helper"
4
-
5
- RSpec.describe "Active Record Array Query Methods" do
6
- let!(:one) { User.create!(tags: [1, 2, 3], personal_id: 33) }
7
- let!(:two) { User.create!(tags: [3, 1, 5], personal_id: 88) }
8
- let!(:three) { User.create!(tags: [2, 8, 20], personal_id: 33) }
9
-
10
- describe "#overlap" do
11
- it "Should return matched records" do
12
- query = User.where.overlap(tags: [1])
13
- expect(query).to include(one, two)
14
- expect(query).to_not include(three)
15
-
16
- query = User.where.overlap(tags: [2, 3])
17
- expect(query).to include(one, two, three)
18
- end
19
- end
20
-
21
- describe "#contains" do
22
- it "returns records that contain elements in an array" do
23
- query = User.where.contains(tags: [1, 3])
24
- expect(query).to include(one, two)
25
- expect(query).to_not include(three)
26
-
27
- query = User.where.contains(tags: [8, 2])
28
- expect(query).to include(three)
29
- expect(query).to_not include(one, two)
30
- end
31
- end
32
-
33
- describe "#any" do
34
- it "should return any records that match" do
35
- query = User.where.any(tags: 3)
36
- expect(query).to include(one, two)
37
- expect(query).to_not include(three)
38
- end
39
-
40
- it "allows chaining" do
41
- query = User.where.any(tags: 3).where(personal_id: 33)
42
- expect(query).to include(one)
43
- expect(query).to_not include(two, three)
44
- end
45
- end
46
-
47
- describe "#all" do
48
- let!(:contains_all) { User.create!(tags: [1], personal_id: 1) }
49
- let!(:contains_all_two) { User.create!(tags: [1], personal_id: 2) }
50
- let!(:contains_some) { User.create!(tags: [1, 2], personal_id: 2) }
51
-
52
- it "should return any records that match" do
53
- query = User.where.all(tags: 1)
54
- expect(query).to include(contains_all, contains_all_two)
55
- expect(query).to_not include(contains_some)
56
- end
57
-
58
- it "allows chaining" do
59
- query = User.where.all(tags: 1).where(personal_id: 1)
60
- expect(query).to include(contains_all)
61
- expect(query).to_not include(contains_all_two, contains_some)
62
- end
63
- end
64
- end
@@ -1,70 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "spec_helper"
4
-
5
- RSpec.describe "Active Record Either Methods" do
6
- let!(:one) { User.create! }
7
- let!(:two) { User.create! }
8
- let!(:three) { User.create! }
9
- let!(:profile_l) { ProfileL.create!(user_id: one.id, likes: 100) }
10
- let!(:profile_r) { ProfileR.create!(user_id: two.id, dislikes: 50) }
11
-
12
- describe ".either_join/2" do
13
- it "Should only only return records that belong to profile L or profile R" do
14
- query = User.either_join(:profile_l, :profile_r)
15
- expect(query).to include(one, two)
16
- expect(query).to_not include(three)
17
- end
18
-
19
- context "Alias .either_joins/2" do
20
- it "Should only only return records that belong to profile L or profile R" do
21
- query = User.either_joins(:profile_l, :profile_r)
22
- expect(query).to include(one, two)
23
- expect(query).to_not include(three)
24
- end
25
- end
26
-
27
- context "Through association .either_joins/2" do
28
- let!(:four) { User.create! }
29
- let!(:group) { Group.create!(users: [four]) }
30
-
31
- it "Should only only return records that belong to profile L or has group" do
32
- query = User.either_joins(:profile_l, :groups)
33
- expect(query).to include(one, four)
34
- expect(query).to_not include(three, two)
35
- end
36
- end
37
- end
38
-
39
- describe ".either_order/2" do
40
- it "Should not exclude anyone who does not have a relationship" do
41
- query = User.either_order(:asc, profile_l: :likes, profile_r: :dislikes)
42
- expect(query.count).to eq(3)
43
- expect(query[0]).to eq(two)
44
- expect(query[1]).to eq(one)
45
- expect(query[2]).to eq(three)
46
- end
47
-
48
- it "Should order users based on their likes and dislikes in ascended order" do
49
- query = User.either_order(:asc, profile_l: :likes, profile_r: :dislikes).where(id: [one.id, two.id])
50
- expect(query.count).to eq(2)
51
- expect(query.first).to eq(two)
52
- expect(query.last).to eq(one)
53
- end
54
-
55
- it "Should order users based on their likes and dislikes in descending order" do
56
- query = User.either_order(:desc, profile_l: :likes, profile_r: :dislikes).where(id: [one.id, two.id])
57
- expect(query.first).to eq(one)
58
- expect(query.last).to eq(two)
59
- end
60
-
61
- context "Alias .either_order/2" do
62
- it "Should order users based on their likes and dislikes in ascended order" do
63
- query = User.either_orders(:asc, profile_l: :likes, profile_r: :dislikes).where(id: [one.id, two.id])
64
- expect(query.count).to eq(2)
65
- expect(query.first).to eq(two)
66
- expect(query.last).to eq(one)
67
- end
68
- end
69
- end
70
- end
@@ -1,45 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "spec_helper"
4
-
5
- RSpec.describe "Active Record Hash Related Query Methods" do
6
- let!(:one) { User.create!(data: { nickname: "george" }, jsonb_data: { payment: "zip" }) }
7
- let!(:two) { User.create!(data: { nickname: "dan" }, jsonb_data: { payment: "zipper" }) }
8
- let!(:three) { User.create!(data: { nickname: "georgey" }) }
9
-
10
- describe "#contains" do
11
- context "HStore Column Type" do
12
- it "returns records that contain hash elements in joined tables" do
13
- tag_one = Tag.create!(user_id: one.id)
14
- tag_two = Tag.create!(user_id: two.id)
15
-
16
- query = Tag.joins(:user).where.contains(users: { data: { nickname: "george" } })
17
- expect(query).to include(tag_one)
18
- expect(query).to_not include(tag_two)
19
- end
20
-
21
- it "returns records that contain hash value" do
22
- query = User.where.contains(data: { nickname: "george" })
23
- expect(query).to include(one)
24
- expect(query).to_not include(two, three)
25
- end
26
- end
27
-
28
- context "JSONB Column Type" do
29
- it "returns records that contains a json hashed value" do
30
- query = User.where.contains(jsonb_data: { payment: "zip" })
31
- expect(query).to include(one)
32
- expect(query).to_not include(two, three)
33
- end
34
-
35
- it "returns records that contain jsonb elements in joined tables" do
36
- tag_one = Tag.create!(user_id: one.id)
37
- tag_two = Tag.create!(user_id: two.id)
38
-
39
- query = Tag.joins(:user).where.contains(users: { jsonb_data: { payment: "zip" } })
40
- expect(query).to include(tag_one)
41
- expect(query).to_not include(tag_two)
42
- end
43
- end
44
- end
45
- end