arel-extensions 8.0.2 → 9.0.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 (48) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +41 -0
  3. data/README.md +83 -2
  4. data/ext/arel/nodes/ascending.rb +2 -0
  5. data/ext/arel/nodes/descending.rb +2 -0
  6. data/ext/arel/order_predications.rb +2 -0
  7. data/lib/active_record/query_methods.rb +33 -31
  8. data/lib/arel/array_predications.rb +2 -0
  9. data/lib/arel/attributes/cast.rb +2 -0
  10. data/lib/arel/attributes/key.rb +2 -0
  11. data/lib/arel/extensions/version.rb +3 -1
  12. data/lib/arel/extensions.rb +2 -0
  13. data/lib/arel/gis_predications.rb +2 -0
  14. data/lib/arel/json_predications.rb +2 -0
  15. data/lib/arel/nodes/binary_value.rb +2 -0
  16. data/lib/arel/nodes/contained_by.rb +2 -0
  17. data/lib/arel/nodes/excludes.rb +2 -0
  18. data/lib/arel/nodes/geometry.rb +2 -0
  19. data/lib/arel/nodes/has_any_key.rb +2 -0
  20. data/lib/arel/nodes/has_key.rb +2 -0
  21. data/lib/arel/nodes/has_keys.rb +2 -0
  22. data/lib/arel/nodes/hex_encoded_binary_value.rb +2 -0
  23. data/lib/arel/nodes/intersects.rb +2 -0
  24. data/lib/arel/nodes/random.rb +2 -0
  25. data/lib/arel/nodes/relation.rb +2 -0
  26. data/lib/arel/nodes/ts_match.rb +2 -0
  27. data/lib/arel/nodes/ts_query.rb +2 -0
  28. data/lib/arel/nodes/ts_rank.rb +2 -0
  29. data/lib/arel/nodes/ts_rank_cd.rb +2 -0
  30. data/lib/arel/nodes/ts_vector.rb +2 -0
  31. data/lib/arel/nodes/within.rb +2 -0
  32. data/lib/arel/ts_predications.rb +2 -0
  33. data/lib/arel/visitors/postgresql_extensions.rb +2 -0
  34. data/lib/arel/visitors/sunstone_extensions.rb +2 -0
  35. data/lib/arel/visitors/to_sql_extensions.rb +2 -0
  36. metadata +15 -45
  37. data/.github/workflows/ci.yml +0 -212
  38. data/.gitignore +0 -3
  39. data/Gemfile +0 -5
  40. data/Rakefile +0 -14
  41. data/arel-extensions.gemspec +0 -29
  42. data/test/binary_value_test.rb +0 -23
  43. data/test/database.rb +0 -51
  44. data/test/gis_test.rb +0 -23
  45. data/test/order_test.rb +0 -83
  46. data/test/sunstone_test.rb +0 -149
  47. data/test/test_helper.rb +0 -210
  48. data/test/ts_test.rb +0 -151
@@ -1,212 +0,0 @@
1
- name: CI
2
-
3
- on: [push, pull_request]
4
-
5
- jobs:
6
- sunstone:
7
- name: Arel::Extensions Test
8
- runs-on: ubuntu-22.04
9
- strategy:
10
- fail-fast: false
11
- matrix:
12
- rails: ['7.1.5.1', '7.2.2.1', '8.0.1']
13
- ruby-version: ['3.1', '3.2', '3.3', '3.4']
14
- postgres-version: ['17']
15
- exclude:
16
- - rails: '8.0.1'
17
- ruby-version: '3.1'
18
-
19
- steps:
20
- - name: Install Postgresql
21
- run: |
22
- sudo apt-get -y --purge remove $(sudo apt list --installed | grep postgresql | awk '{print $1}')
23
- sudo apt-get install curl ca-certificates gnupg
24
- curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
25
- sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
26
- sudo apt-get update
27
- sudo apt-get -y install libgeos-dev
28
- sudo apt-get -y install postgresql-${{ matrix.postgres-version }}-postgis-3
29
- sudo systemctl start postgresql@${{ matrix.postgres-version }}-main.service
30
- sudo systemctl status postgresql@${{ matrix.postgres-version }}-main.service
31
- sudo pg_lsclusters
32
- sudo -u postgres createuser runner --superuser
33
- sudo -u postgres psql -c "ALTER USER runner WITH PASSWORD 'runner';"
34
-
35
- - uses: actions/checkout@v4
36
-
37
- - uses: ruby/setup-ruby@v1
38
- with:
39
- ruby-version: ${{ matrix.ruby-version }}
40
- bundler-cache: false # runs 'bundle install' and caches installed gems automatically
41
-
42
- - name: Fix activerecord-postgis-adapter
43
- if: ${{ matrix.rails == '8.0.1' }}
44
- run: |
45
- echo "gem 'activerecord-postgis-adapter', github: 'rgeo/activerecord-postgis-adapter', branch: 'rails8'" >> Gemfile
46
-
47
- - run: |
48
- sed -i -e "s/gem.add_dependency 'activerecord', '>= [[:digit:]]\+.[[:digit:]]\+.[[:digit:]]\+'/gem.add_dependency 'activerecord', '${{ matrix.rails }}'/" arel-extensions.gemspec
49
- rm -f Gemfile.lock
50
- bundle
51
-
52
- - name: Test Geos
53
- run: |
54
- bundle exec ruby -e "require 'rgeo'; puts RGeo::Geos.capi_supported?; puts RGeo::Geos::CAPIGeometryMethods"
55
-
56
- - run: bundle exec rake test --trace
57
-
58
- ar-postgresql:
59
- name: ActiveRecord PostgresQL Test
60
- runs-on: ubuntu-22.04
61
-
62
- strategy:
63
- fail-fast: false
64
- matrix:
65
- rails: ['7.1.5.1', '7.2.2.1', '8.0.1']
66
- ruby-version: ['3.3']
67
- postgres-version: ['17']
68
-
69
- steps:
70
- - name: Install Postgresql
71
- run: |
72
- sudo apt-get -y --purge remove $(sudo apt list --installed | grep postgresql | awk '{print $1}')
73
- sudo apt-get install curl ca-certificates gnupg
74
- curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
75
- sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
76
- sudo apt-get update
77
- sudo apt-get -y install postgresql-${{ matrix.postgres-version }}-postgis-3
78
- sudo systemctl start postgresql@${{ matrix.postgres-version }}-main.service
79
- sudo systemctl status postgresql@${{ matrix.postgres-version }}-main.service
80
- sudo pg_lsclusters
81
- sudo -u postgres createuser runner --superuser
82
- sudo -u postgres psql -c "ALTER USER runner WITH PASSWORD 'runner';"
83
-
84
- - uses: actions/checkout@v4
85
-
86
- - uses: ruby/setup-ruby@v1
87
- with:
88
- ruby-version: ${{ matrix.ruby-version }}
89
- bundler-cache: false # runs 'bundle install' and caches installed gems automatically
90
-
91
- - name: Download Rails
92
- run: |
93
- git clone --branch v${{ matrix.rails }} https://github.com/rails/rails.git ~/rails
94
- pushd ~/rails
95
- cat /home/runner/work/_temp/*.sh
96
- sed -i "s/Gem.ruby, '-w'/Gem.ruby, '-w0'/" ~/rails/activerecord/Rakefile
97
- sed -i "s/t.warning = true/t.warning = false/g" ~/rails/activerecord/Rakefile
98
- sed -i "/require \"active_record\"/a \$LOAD_PATH.unshift\(File.expand_path\(ENV['GITHUB_WORKSPACE']\)\)\nrequire 'arel/extensions'" ~/rails/activerecord/test/cases/helper.rb
99
- rm ~/rails/Gemfile.lock
100
- sed -i "/# Active Record./a gem 'arel-extensions', require: 'arel/extensions', path: File.expand_path\(ENV['GITHUB_WORKSPACE']\)" ~/rails/Gemfile
101
- echo "gem 'ostruct'" >> ~/rails/Gemfile
102
- sed -i "s/# frozen_string_literal: true/# frozen_string_literal: true\nrequire 'ostruct'/" ~/rails/activerecord/test/cases/encryption/configurable_test.rb
103
- cat ~/rails/Gemfile
104
- bundle update --jobs=3 --retry=3
105
-
106
- - name: Fix Weird Test Cases
107
- run: |
108
- sed -i 's|} - \[:|} - \[:distinct_on, :uniq_on, :|' ~/rails/activerecord/test/cases/relation/delegation_test.rb
109
-
110
- - run: |
111
- pushd ~/rails/activerecord
112
- bundle exec rake db:postgresql:rebuild postgresql:test --trace
113
- bundle exec rake db:postgresql:rebuild postgresql:isolated_test --trace
114
-
115
- ar-sqlite:
116
- name: ActiveRecord SQLite Test
117
- runs-on: ubuntu-22.04
118
-
119
- strategy:
120
- fail-fast: false
121
- matrix:
122
- rails: ['7.1.5.1', '7.2.2.1', '8.0.1']
123
- ruby-version: ['3.3']
124
- postgres-version: ['17']
125
-
126
- steps:
127
- - uses: actions/checkout@v4
128
-
129
- - uses: ruby/setup-ruby@v1
130
- with:
131
- ruby-version: ${{ matrix.ruby-version }}
132
- bundler-cache: false # runs 'bundle install' and caches installed gems automatically
133
-
134
- - name: Download Rails
135
- run: |
136
- git clone --branch v${{ matrix.rails }} https://github.com/rails/rails.git ~/rails
137
- pushd ~/rails
138
- cat /home/runner/work/_temp/*.sh
139
- sed -i "s/Gem.ruby, '-w'/Gem.ruby, '-w0'/" ~/rails/activerecord/Rakefile
140
- sed -i "s/t.warning = true/t.warning = false/g" ~/rails/activerecord/Rakefile
141
- sed -i "/require \"active_record\"/a \$LOAD_PATH.unshift\(File.expand_path\(ENV['GITHUB_WORKSPACE']\)\)\nrequire 'arel/extensions'" ~/rails/activerecord/test/cases/helper.rb
142
- rm ~/rails/Gemfile.lock
143
- sed -i "/# Active Record./a gem 'arel-extensions', require: 'arel/extensions', path: File.expand_path\(ENV['GITHUB_WORKSPACE']\)" ~/rails/Gemfile
144
- echo "gem 'ostruct'" >> ~/rails/Gemfile
145
- sed -i "s/# frozen_string_literal: true/# frozen_string_literal: true\nrequire 'ostruct'/" ~/rails/activerecord/test/cases/encryption/configurable_test.rb
146
- cat ~/rails/Gemfile
147
- bundle update --jobs=3 --retry=3
148
-
149
- - name: Fix Weird Test Cases
150
- run: |
151
- sed -i 's|} - \[:|} - \[:distinct_on, :uniq_on, :|' ~/rails/activerecord/test/cases/relation/delegation_test.rb
152
-
153
- - name: Fix Weird Test Cases
154
- run: |
155
- cat ~/rails/activerecord/test/cases/relation/delegation_test.rb
156
-
157
- - run: |
158
- pushd ~/rails/activerecord
159
- bundle exec rake sqlite3:test --trace
160
- rm test/db/*.sqlite3 test/fixtures/*.sqlite3
161
- bundle exec rake sqlite3:isolated_test --trace
162
- rm test/db/*.sqlite3 test/fixtures/*.sqlite3
163
- bundle exec rake sqlite3_mem:test --trace
164
-
165
- ar-mysql:
166
- name: ActiveRecord MySQL Test
167
- runs-on: ubuntu-22.04
168
-
169
- strategy:
170
- fail-fast: false
171
- matrix:
172
- rails: ['7.1.5.1', '7.2.2.1', '8.0.1']
173
- ruby-version: ['3.3']
174
- postgres-version: ['17']
175
-
176
- steps:
177
- - name: Install MySQL
178
- run: |
179
- sudo /etc/init.d/mysql start
180
- mysql -uroot -proot -e "CREATE USER 'rails'@'%';"
181
- mysql -uroot -proot -e "GRANT ALL PRIVILEGES ON *.* TO 'rails'@'%' WITH GRANT OPTION;"
182
-
183
- - uses: actions/checkout@v4
184
-
185
- - uses: ruby/setup-ruby@v1
186
- with:
187
- ruby-version: ${{ matrix.ruby-version }}
188
- bundler-cache: false # runs 'bundle install' and caches installed gems automatically
189
-
190
- - name: Download Rails
191
- run: |
192
- git clone --branch v${{ matrix.rails }} https://github.com/rails/rails.git ~/rails
193
- pushd ~/rails
194
- cat /home/runner/work/_temp/*.sh
195
- sed -i "s/Gem.ruby, '-w'/Gem.ruby, '-w0'/" ~/rails/activerecord/Rakefile
196
- sed -i "s/t.warning = true/t.warning = false/g" ~/rails/activerecord/Rakefile
197
- sed -i "/require \"active_record\"/a \$LOAD_PATH.unshift\(File.expand_path\(ENV['GITHUB_WORKSPACE']\)\)\nrequire 'arel/extensions'" ~/rails/activerecord/test/cases/helper.rb
198
- rm ~/rails/Gemfile.lock
199
- sed -i "/# Active Record./a gem 'arel-extensions', require: 'arel/extensions', path: File.expand_path\(ENV['GITHUB_WORKSPACE']\)" ~/rails/Gemfile
200
- echo "gem 'ostruct'" >> ~/rails/Gemfile
201
- sed -i "s/# frozen_string_literal: true/# frozen_string_literal: true\nrequire 'ostruct'/" ~/rails/activerecord/test/cases/encryption/configurable_test.rb
202
- cat ~/rails/Gemfile
203
- bundle update --jobs=3 --retry=3
204
-
205
- - name: Fix Weird Test Cases
206
- run: |
207
- sed -i 's|} - \[:|} - \[:distinct_on, :uniq_on, :|' ~/rails/activerecord/test/cases/relation/delegation_test.rb
208
-
209
- - run: |
210
- pushd ~/rails/activerecord
211
- bundle exec rake db:mysql:rebuild mysql2:test --trace
212
- bundle exec rake db:mysql:rebuild mysql2:isolated_test --trace
data/.gitignore DELETED
@@ -1,3 +0,0 @@
1
- .DS_Store
2
- *.gem
3
- Gemfile.lock
data/Gemfile DELETED
@@ -1,5 +0,0 @@
1
- source "https://rubygems.org"
2
- git_source(:github) { |repo| "https://github.com/#{repo}.git" }
3
-
4
- # Specify your gem's dependencies in sunstone.gemspec
5
- gemspec
data/Rakefile DELETED
@@ -1,14 +0,0 @@
1
- require 'bundler/setup'
2
- require "bundler/gem_tasks"
3
- Bundler.require(:development)
4
-
5
- require 'fileutils'
6
- require "rake/testtask"
7
-
8
- # Test Task
9
- Rake::TestTask.new do |t|
10
- t.libs << 'lib' << 'test'
11
- t.test_files = FileList[ARGV[1] ? ARGV[1] : 'test/**/*_test.rb']
12
- # t.warning = true
13
- # t.verbose = true
14
- end
@@ -1,29 +0,0 @@
1
- require File.expand_path("../lib/arel/extensions/version", __FILE__)
2
-
3
- Gem::Specification.new do |gem|
4
- gem.name = 'arel-extensions'
5
- gem.version = Arel::Extensions::VERSION
6
- gem.authors = ["Jon Bracy"]
7
- gem.email = ["jonbracy@gmail.com"]
8
- gem.summary = %q{Adds support for missing SQL operators and functions to Arel}
9
- gem.homepage = 'https://github.com/malomalo/arel-extensions'
10
- gem.licenses = ['MIT']
11
-
12
- gem.files = `git ls-files`.split("\n")
13
- gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
14
- gem.require_paths = ["lib"]
15
-
16
- gem.add_dependency 'activerecord', '>= 7.0.0', '< 9.0'
17
-
18
- gem.add_development_dependency "bundler"
19
- gem.add_development_dependency "debug"
20
- gem.add_development_dependency "rake"
21
- gem.add_development_dependency 'minitest'
22
- gem.add_development_dependency 'minitest-reporters'
23
- gem.add_development_dependency "sunstone", '>= 7.0.0'
24
- gem.add_development_dependency "webmock"
25
- gem.add_development_dependency 'pg'
26
- gem.add_development_dependency 'rgeo'
27
- gem.add_development_dependency "activerecord-postgis-adapter", '>= 8.0'
28
-
29
- end
@@ -1,23 +0,0 @@
1
- require 'test_helper'
2
-
3
- class BinaryValueTest < ActiveSupport::TestCase
4
-
5
- test 'binary value' do
6
- query = Property.where( Arel::Nodes::BinaryValue.new("\x01\x01\x00\x00\x00\xC0K\x9B\x84\xD0.<@\b\x96\xA2n\x84%&@") )
7
-
8
- assert_equal(<<~SQL.gsub(/( +|\n)/, ' ').strip, query.to_sql)
9
- SELECT "properties".* FROM "properties"
10
- WHERE '\\x0101000000c04b9b84d02e3c400896a26e84252640'
11
- SQL
12
- end
13
-
14
- test 'hex encoded binary value' do
15
- query = Property.where( Arel::Nodes::HexEncodedBinaryValue.new("0101000000c04b9b84d02e3c400896a26e84252640") )
16
-
17
- assert_equal(<<~SQL.gsub(/( +|\n)/, ' ').strip, query.to_sql)
18
- SELECT "properties".* FROM "properties"
19
- WHERE '\\x0101000000c04b9b84d02e3c400896a26e84252640'
20
- SQL
21
- end
22
-
23
- end
data/test/database.rb DELETED
@@ -1,51 +0,0 @@
1
- ActiveRecord::Base.establish_connection({
2
- adapter: "postgis",
3
- database: "arel-extensions-test",
4
- encoding: "utf8"
5
- })
6
-
7
- db_config = ActiveRecord::Base.connection_db_config
8
- task = ActiveRecord::Tasks::PostgreSQLDatabaseTasks.new(db_config)
9
- task.drop
10
- task.create
11
-
12
- ActiveRecord::Migration.suppress_messages do
13
- ActiveRecord::Schema.define do
14
- enable_extension "postgis"
15
-
16
- create_table "addresses", force: :cascade do |t|
17
- t.integer "name"
18
- t.integer "property_id"
19
- t.geometry "location", limit: {:type=>"Point", :srid=>"4326"}
20
- end
21
-
22
- create_table "properties", force: :cascade do |t|
23
- t.string "name", limit: 255
24
- t.tsvector 'vector_col'
25
- t.jsonb 'metadata'
26
- end
27
-
28
- end
29
- end
30
-
31
- class Address < ActiveRecord::Base
32
- belongs_to :property
33
- end
34
-
35
- class Property < ActiveRecord::Base
36
- has_many :addresses
37
- end
38
-
39
- class SunstoneRecord < ActiveRecord::Base
40
- self.abstract_class = true
41
- end
42
-
43
- class SunstoneAddress < SunstoneRecord
44
- belongs_to :property, class_name: 'SunstoneProperty'
45
- end
46
-
47
- class SunstoneProperty < SunstoneRecord
48
- has_many :addresses, class_name: 'SunstoneAddress'
49
- end
50
-
51
- SunstoneRecord.establish_connection(adapter: 'sunstone', url: 'http://example.com')
data/test/gis_test.rb DELETED
@@ -1,23 +0,0 @@
1
- require 'test_helper'
2
-
3
- class GISTest < ActiveSupport::TestCase
4
-
5
- test 'intersects' do
6
- query = Address.arel_table['location'].intersects('POINT (28.182869232095754 11.073276002261096)')
7
-
8
- assert_equal(<<~SQL.gsub(/( +|\n)/, ' ').strip, query.to_sql)
9
- ST_Intersects("addresses"."location", '0101000000c04b9b84d02e3c400896a26e84252640')
10
- SQL
11
- end
12
-
13
- test 'within' do
14
- query = Address.arel_table['location'].within('POINT (28.182869232095754 11.073276002261096)')
15
-
16
- assert_equal(<<~SQL.gsub(/( +|\n)/, ' ').strip, query.to_sql)
17
- ST_Within("addresses"."location", '0101000000c04b9b84d02e3c400896a26e84252640')
18
- SQL
19
-
20
- result = Address.where(query).first
21
- end
22
-
23
- end
data/test/order_test.rb DELETED
@@ -1,83 +0,0 @@
1
- require 'test_helper'
2
-
3
- class OrderTest < ActiveSupport::TestCase
4
-
5
- test '::order(column.asc)' do
6
- assert_sql(<<~SQL, Property.order(Property.arel_table[:id].asc))
7
- SELECT "properties".* FROM "properties" ORDER BY "properties"."id" ASC
8
- SQL
9
- end
10
-
11
- test '::order(column1.asc, column2.asc)' do
12
- assert_sql(<<~SQL, Property.order(Property.arel_table[:id].asc, Property.arel_table[:name].asc))
13
- SELECT "properties".* FROM "properties" ORDER BY "properties"."id" ASC, "properties"."name" ASC
14
- SQL
15
- end
16
-
17
- test '::order(column.desc)' do
18
- assert_sql(<<~SQL, Property.order(Property.arel_table[:id].desc))
19
- SELECT "properties".* FROM "properties" ORDER BY "properties"."id" DESC
20
- SQL
21
- end
22
-
23
- test '::order(column.asc(:nulls_first))' do
24
- assert_sql(<<~SQL, Property.order(Property.arel_table[:id].asc(:nulls_first)))
25
- SELECT "properties".* FROM "properties" ORDER BY "properties"."id" ASC NULLS FIRST
26
- SQL
27
- end
28
-
29
- test '::order(column.asc(:nulls_last))' do
30
- assert_sql(<<~SQL, Property.order(Property.arel_table[:id].asc(:nulls_last)))
31
- SELECT "properties".* FROM "properties" ORDER BY "properties"."id" ASC NULLS LAST
32
- SQL
33
- end
34
-
35
- test '::order(column.desc(:nulls_first))' do
36
- assert_sql(<<~SQL, Property.order(Property.arel_table[:id].desc(:nulls_first)))
37
- SELECT "properties".* FROM "properties" ORDER BY "properties"."id" DESC NULLS FIRST
38
- SQL
39
- end
40
-
41
- test '::order(column.desc(:nulls_last))' do
42
- assert_sql(<<~SQL, Property.order(Property.arel_table[:id].desc(:nulls_last)))
43
- SELECT "properties".* FROM "properties" ORDER BY "properties"."id" DESC NULLS LAST
44
- SQL
45
- end
46
-
47
- # Test reversing orders
48
- test '::order(column.asc.reverse)' do
49
- assert_sql(<<~SQL, Property.order(Property.arel_table[:id].asc.reverse))
50
- SELECT "properties".* FROM "properties" ORDER BY "properties"."id" DESC
51
- SQL
52
- end
53
-
54
- test '::order(column.desc.reverse)' do
55
- assert_sql(<<~SQL, Property.order(Property.arel_table[:id].desc.reverse))
56
- SELECT "properties".* FROM "properties" ORDER BY "properties"."id" ASC
57
- SQL
58
- end
59
-
60
- test '::order(column.asc(:nulls_first).reverse)' do
61
- assert_sql(<<~SQL, Property.order(Property.arel_table[:id].asc(:nulls_first).reverse))
62
- SELECT "properties".* FROM "properties" ORDER BY "properties"."id" DESC NULLS LAST
63
- SQL
64
- end
65
-
66
- test '::order(column.asc(:nulls_last).reverse)' do
67
- assert_sql(<<~SQL, Property.order(Property.arel_table[:id].asc(:nulls_last).reverse))
68
- SELECT "properties".* FROM "properties" ORDER BY "properties"."id" DESC NULLS FIRST
69
- SQL
70
- end
71
-
72
- test '::order(column.desc(:nulls_first).reverse)' do
73
- assert_sql(<<~SQL, Property.order(Property.arel_table[:id].desc(:nulls_first).reverse))
74
- SELECT "properties".* FROM "properties" ORDER BY "properties"."id" ASC NULLS LAST
75
- SQL
76
- end
77
-
78
- test '::order(column.desc(:nulls_last).reverse)' do
79
- assert_sql(<<~SQL, Property.order(Property.arel_table[:id].desc(:nulls_last).reverse))
80
- SELECT "properties".* FROM "properties" ORDER BY "properties"."id" ASC NULLS FIRST
81
- SQL
82
- end
83
- end
@@ -1,149 +0,0 @@
1
- require 'test_helper'
2
-
3
- class SunstoneTest < ActiveSupport::TestCase
4
-
5
- # schema do
6
- # create_table "properties", force: :cascade do |t|
7
- # t.jsonb 'metadata'
8
- # end
9
- # end
10
-
11
- # class Property < ActiveRecord::Base
12
- # end
13
-
14
- # test "::filter json_column: STRING throws an error" do
15
- # assert_raises(ActiveRecord::UnkownFilterError) do
16
- # Property.filter(metadata: 'string').load
17
- # end
18
- # end
19
-
20
- # test "::filter json_column: {eq: JSON_HASH}" do
21
- # query = Property.where(metadata: {eq: {json: 'string'}})
22
- # assert_equal(<<-SQL.strip.gsub(/\s+/, ' '), query.to_sql.strip)
23
- # SELECT "properties".*
24
- # FROM "properties"
25
- # WHERE "properties"."metadata" = '{\"json\":\"string\"}'
26
- # SQL
27
- # end
28
-
29
- test "::filter json_column: {contains: JSON_HASH}" do
30
- query = SunstoneProperty.where(SunstoneProperty.arel_table['metadata'].contains({json: 'string'}))
31
- assert_sar(query, 'GET', '/sunstone_properties', {
32
- where: {metadata: {contains: { json: 'string' }}}
33
- })
34
-
35
- # query = Property.where(metadata: {contains: {json: 'string'}})
36
- # assert_equal(<<-SQL.strip.gsub(/\s+/, ' '), query.to_sql.strip)
37
- # SELECT "properties".*
38
- # FROM "properties"
39
- # WHERE "properties"."metadata" @> '{\"json\":\"string\"}'
40
- # SQL
41
- end
42
-
43
- # test "::filter json_column: {contained_by: JSON_HASH}" do
44
- # query = Property.filter(metadata: {contained_by: {json: 'string'}})
45
- # assert_equal(<<-SQL.strip.gsub(/\s+/, ' '), query.to_sql.strip)
46
- # SELECT "properties".*
47
- # FROM "properties"
48
- # WHERE "properties"."metadata" <@ '{\"json\":\"string\"}'
49
- # SQL
50
- # end
51
-
52
- # test "::filter json_column: {has_key: STRING}" do
53
- # query = Property.filter(metadata: {has_key: 'string'})
54
- # assert_equal(<<-SQL.strip.gsub(/\s+/, ' '), query.to_sql.strip)
55
- # SELECT "properties".*
56
- # FROM "properties"
57
- # WHERE "properties"."metadata" ? 'string'
58
- # SQL
59
- # end
60
-
61
- # test "::filter json_column.subkey: {eq: JSON_HASH}" do
62
- # query = Property.filter("metadata.subkey" => {eq: 'string'})
63
- # assert_equal(<<-SQL.strip.gsub(/\s+/, ' '), query.to_sql.strip)
64
- # SELECT "properties".*
65
- # FROM "properties"
66
- # WHERE "properties"."metadata"#>'{subkey}' = 'string'
67
- # SQL
68
- # end
69
-
70
- # test "::filter json_column: BOOLEAN" do
71
- # query = Property.filter(metadata: true)
72
- # assert_equal(<<-SQL.strip.gsub(/\s+/, ' '), query.to_sql.strip)
73
- # SELECT "properties".*
74
- # FROM "properties"
75
- # WHERE "properties"."metadata" IS NOT NULL
76
- # SQL
77
-
78
- # query = Property.filter(metadata: "true")
79
- # assert_equal(<<-SQL.strip.gsub(/\s+/, ' '), query.to_sql.strip)
80
- # SELECT "properties".*
81
- # FROM "properties"
82
- # WHERE "properties"."metadata" IS NOT NULL
83
- # SQL
84
-
85
- # query = Property.filter(metadata: false)
86
- # assert_equal(<<-SQL.strip.gsub(/\s+/, ' '), query.to_sql.strip)
87
- # SELECT "properties".*
88
- # FROM "properties"
89
- # WHERE "properties"."metadata" IS NULL
90
- # SQL
91
-
92
- # query = Property.filter(metadata: "false")
93
- # assert_equal(<<-SQL.strip.gsub(/\s+/, ' '), query.to_sql.strip)
94
- # SELECT "properties".*
95
- # FROM "properties"
96
- # WHERE "properties"."metadata" IS NULL
97
- # SQL
98
- # end
99
-
100
- test '::order(column.asc)' do
101
- query = SunstoneProperty.order(SunstoneProperty.arel_table[:id].asc)
102
- assert_sar(query, 'GET', '/sunstone_properties', {
103
- order: [{ id: :asc }]
104
- })
105
- end
106
-
107
- test '::order(column1.asc, column2.asc)' do
108
- query = SunstoneProperty.order(SunstoneProperty.arel_table[:id].asc, SunstoneProperty.arel_table[:name].asc)
109
- assert_sar(query, 'GET', '/sunstone_properties', {
110
- order: [{ id: :asc }, { name: :asc }]
111
- })
112
- end
113
-
114
- test '::order(column.desc)' do
115
- query = SunstoneProperty.order(SunstoneProperty.arel_table[:id].desc)
116
- assert_sar(query, 'GET', '/sunstone_properties', {
117
- order: [{ id: :desc }]
118
- })
119
- end
120
-
121
- test '::order(column.asc(:nulls_first))' do
122
- query = SunstoneProperty.order(SunstoneProperty.arel_table[:id].asc(:nulls_first))
123
- assert_sar(query, 'GET', '/sunstone_properties', {
124
- order: [{ id: { asc: :nulls_first } }]
125
- })
126
- end
127
-
128
- test '::order(column.asc(:nulls_last))' do
129
- query = SunstoneProperty.order(SunstoneProperty.arel_table[:id].asc(:nulls_last))
130
- assert_sar(query, 'GET', '/sunstone_properties', {
131
- order: [{ id: { asc: :nulls_last } }]
132
- })
133
- end
134
-
135
- test '::order(column.desc(:nulls_first))' do
136
- query = SunstoneProperty.order(SunstoneProperty.arel_table[:id].desc(:nulls_first))
137
- assert_sar(query, 'GET', '/sunstone_properties', {
138
- order: [{ id: { desc: :nulls_first } }]
139
- })
140
- end
141
-
142
- test '::order(column.desc(:nulls_last))' do
143
- query = SunstoneProperty.order(SunstoneProperty.arel_table[:id].desc(:nulls_last))
144
- assert_sar(query, 'GET', '/sunstone_properties', {
145
- order: [{ id: { desc: :nulls_last } }]
146
- })
147
- end
148
-
149
- end