arel-extensions 8.1.0 → 9.0.1

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.
@@ -1,267 +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-24.04
9
- strategy:
10
- fail-fast: false
11
- matrix:
12
- rails-version:
13
- - 7.1.6
14
- - 7.2.3
15
- - 8.0.4
16
- - 8.1.1
17
- ruby-version:
18
- - 3.3
19
- - 3.4
20
- - 4.0.0-preview2
21
- postgres-version:
22
- - 17
23
-
24
- steps:
25
- - name: Install Postgresql
26
- run: |
27
- sudo apt-get -y --purge remove $(sudo apt list --installed | grep postgresql | awk '{print $1}')
28
- sudo apt-get install curl ca-certificates gnupg
29
- curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
30
- sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
31
- sudo apt-get update
32
- sudo apt-get -y install libgeos-dev
33
- sudo apt-get -y install postgresql-${{ matrix.postgres-version }}-postgis-3
34
- sudo systemctl start postgresql@${{ matrix.postgres-version }}-main.service
35
- sudo systemctl status postgresql@${{ matrix.postgres-version }}-main.service
36
- sudo pg_lsclusters
37
- sudo -u postgres createuser runner --superuser
38
- sudo -u postgres psql -c "ALTER USER runner WITH PASSWORD 'runner';"
39
-
40
- - uses: actions/checkout@v4
41
-
42
- - uses: ruby/setup-ruby@v1
43
- with:
44
- ruby-version: ${{ matrix.ruby-version }}
45
- bundler-cache: false # runs 'bundle install' and caches installed gems automatically
46
-
47
- - run: |
48
- sed -i -e "s/gem.add_dependency 'activerecord', '>= [[:digit:]]\+.[[:digit:]]\+.[[:digit:]]\+'/gem.add_dependency 'activerecord', '${{ matrix.rails-version }}'/" arel-extensions.gemspec
49
- rm -f Gemfile.lock
50
- bundle install --jobs=3 --retry=3
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-24.04
61
-
62
- strategy:
63
- fail-fast: false
64
- matrix:
65
- rails-version:
66
- - 7.2.3
67
- - 8.0.4
68
- - 8.1.1
69
- ruby-version:
70
- - 3.4
71
- postgres-version:
72
- - 17
73
- include:
74
- - rails-version: '7.1.6'
75
- ruby-version: '3.3'
76
- postgres-version: '17'
77
-
78
- steps:
79
- - name: Install Postgresql
80
- run: |
81
- sudo apt-get -y --purge remove $(sudo apt list --installed | grep postgresql | awk '{print $1}')
82
- sudo apt-get install curl ca-certificates gnupg
83
- curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
84
- sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
85
- sudo apt-get update
86
- sudo apt-get -y install postgresql-${{ matrix.postgres-version }}-postgis-3
87
- sudo systemctl start postgresql@${{ matrix.postgres-version }}-main.service
88
- sudo systemctl status postgresql@${{ matrix.postgres-version }}-main.service
89
- sudo pg_lsclusters
90
- sudo -u postgres createuser runner --superuser
91
- sudo -u postgres psql -c "ALTER USER runner WITH PASSWORD 'runner';"
92
-
93
- - uses: actions/checkout@v4
94
-
95
- - uses: ruby/setup-ruby@v1
96
- with:
97
- ruby-version: ${{ matrix.ruby-version }}
98
- bundler-cache: false # runs 'bundle install' and caches installed gems automatically
99
-
100
- - name: Download Rails
101
- run: |
102
- git clone --branch v${{ matrix.rails-version }} https://github.com/rails/rails.git ~/rails
103
- pushd ~/rails
104
- cat /home/runner/work/_temp/*.sh
105
- sed -i "s/Gem.ruby, '-w'/Gem.ruby, '-w0'/" ~/rails/activerecord/Rakefile
106
- sed -i "s/t.warning = true/t.warning = false/g" ~/rails/activerecord/Rakefile
107
- sed -i "/require \"active_record\"/a \$LOAD_PATH.unshift\(File.expand_path\(ENV['GITHUB_WORKSPACE']\)\)\nrequire 'arel/extensions'" ~/rails/activerecord/test/cases/helper.rb
108
- rm ~/rails/Gemfile.lock
109
- sed -i "/# Active Record./a gem 'arel-extensions', require: 'arel/extensions', path: File.expand_path\(ENV['GITHUB_WORKSPACE']\)" ~/rails/Gemfile
110
- echo "gem 'ostruct'" >> ~/rails/Gemfile
111
- sed -i "s/# frozen_string_literal: true/# frozen_string_literal: true\nrequire 'ostruct'/" ~/rails/activerecord/test/cases/encryption/configurable_test.rb
112
- cat ~/rails/Gemfile
113
-
114
- - name: This can eventually be removed
115
- run: |
116
- sed -i 's/gem "minitest"$/gem "minitest"\ngem "minitest-mock", require: "minitest\/mock"/' ~/rails/Gemfile
117
- sed -i 's/module ActiveRecord$/module Rails\nend\nmodule ActiveRecord/' ~/rails/activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb || true
118
- sed -i 's/t.options = "--profile" if ENV\["CI"\]//g' ~/rails/activerecord/Rakefile
119
-
120
- - name: Fix Weird Test Cases
121
- run: |
122
- sed -i 's|} - \[:|} - \[:distinct_on, :uniq_on, :|' ~/rails/activerecord/test/cases/relation/delegation_test.rb
123
-
124
- - name: Bundle
125
- run: |
126
- pushd ~/rails
127
- bundle update --jobs=3 --retry=3
128
- popd
129
-
130
- - run: |
131
- pushd ~/rails/activerecord
132
- bundle exec rake db:postgresql:rebuild postgresql:test --trace
133
- bundle exec rake db:postgresql:rebuild postgresql:isolated_test --trace
134
-
135
- ar-sqlite:
136
- name: ActiveRecord SQLite Test
137
- runs-on: ubuntu-24.04
138
-
139
- strategy:
140
- fail-fast: false
141
- matrix:
142
- rails-version:
143
- - 7.2.3
144
- - 8.0.4
145
- - 8.1.1
146
- ruby-version:
147
- - 3.4
148
- include:
149
- - rails-version: '7.1.6'
150
- ruby-version: '3.3'
151
-
152
- steps:
153
- - uses: actions/checkout@v4
154
-
155
- - uses: ruby/setup-ruby@v1
156
- with:
157
- ruby-version: ${{ matrix.ruby-version }}
158
- bundler-cache: false # runs 'bundle install' and caches installed gems automatically
159
-
160
- - name: Download Rails
161
- run: |
162
- git clone --branch v${{ matrix.rails-version }} https://github.com/rails/rails.git ~/rails
163
- pushd ~/rails
164
- cat /home/runner/work/_temp/*.sh
165
- sed -i "s/Gem.ruby, '-w'/Gem.ruby, '-w0'/" ~/rails/activerecord/Rakefile
166
- sed -i "s/t.warning = true/t.warning = false/g" ~/rails/activerecord/Rakefile
167
- sed -i "/require \"active_record\"/a \$LOAD_PATH.unshift\(File.expand_path\(ENV['GITHUB_WORKSPACE']\)\)\nrequire 'arel/extensions'" ~/rails/activerecord/test/cases/helper.rb
168
- rm ~/rails/Gemfile.lock
169
- sed -i "/# Active Record./a gem 'arel-extensions', require: 'arel/extensions', path: File.expand_path\(ENV['GITHUB_WORKSPACE']\)" ~/rails/Gemfile
170
- echo "gem 'ostruct'" >> ~/rails/Gemfile
171
- sed -i "s/# frozen_string_literal: true/# frozen_string_literal: true\nrequire 'ostruct'/" ~/rails/activerecord/test/cases/encryption/configurable_test.rb
172
- cat ~/rails/Gemfile
173
-
174
- - name: This can eventually be removed
175
- run: |
176
- sed -i 's/gem "minitest"$/gem "minitest"\ngem "minitest-mock", require: "minitest\/mock"/' ~/rails/Gemfile
177
- cat ~/rails/Gemfile
178
- sed -i 's/module ActiveRecord$/module Rails\nend\nmodule ActiveRecord/' ~/rails/activerecord/test/cases/adapters/sqlite3/dbconsole_test.rb
179
- cat ~/rails/activerecord/test/cases/adapters/sqlite3/dbconsole_test.rb
180
- sed -i 's/t.options = "--profile" if ENV\["CI"\]//g' ~/rails/activerecord/Rakefile
181
- cat ~/rails/activerecord/Rakefile
182
-
183
- - name: Fix Weird Test Cases
184
- run: |
185
- sed -i 's|} - \[:|} - \[:distinct_on, :uniq_on, :|' ~/rails/activerecord/test/cases/relation/delegation_test.rb
186
-
187
- - name: Bundle
188
- run: |
189
- pushd ~/rails
190
- bundle update --jobs=3 --retry=3
191
- popd
192
-
193
- - run: |
194
- pushd ~/rails/activerecord
195
- bundle exec rake sqlite3:test --trace
196
- rm test/db/*.sqlite3 test/fixtures/*.sqlite3
197
- bundle exec rake sqlite3:isolated_test --trace
198
- rm test/db/*.sqlite3 test/fixtures/*.sqlite3
199
- bundle exec rake sqlite3_mem:test --trace
200
-
201
- ar-mysql:
202
- name: ActiveRecord MySQL Test
203
- runs-on: ubuntu-24.04
204
-
205
- strategy:
206
- fail-fast: false
207
- matrix:
208
- rails-version:
209
- - 7.2.3
210
- - 8.0.4
211
- - 8.1.1
212
- ruby-version:
213
- - 3.4
214
- include:
215
- - rails-version: '7.1.6'
216
- ruby-version: '3.3'
217
-
218
- steps:
219
- - name: Install MySQL
220
- run: |
221
- sudo /etc/init.d/mysql start
222
- mysql -uroot -proot -e "CREATE USER 'rails'@'%';"
223
- mysql -uroot -proot -e "GRANT ALL PRIVILEGES ON *.* TO 'rails'@'%' WITH GRANT OPTION;"
224
-
225
- - uses: actions/checkout@v4
226
-
227
- - uses: ruby/setup-ruby@v1
228
- with:
229
- ruby-version: ${{ matrix.ruby-version }}
230
- bundler-cache: false # runs 'bundle install' and caches installed gems automatically
231
-
232
- - name: Download Rails
233
- run: |
234
- git clone --branch v${{ matrix.rails-version }} https://github.com/rails/rails.git ~/rails
235
- pushd ~/rails
236
- cat /home/runner/work/_temp/*.sh
237
- sed -i "s/Gem.ruby, '-w'/Gem.ruby, '-w0'/" ~/rails/activerecord/Rakefile
238
- sed -i "s/t.warning = true/t.warning = false/g" ~/rails/activerecord/Rakefile
239
- sed -i "/require \"active_record\"/a \$LOAD_PATH.unshift\(File.expand_path\(ENV['GITHUB_WORKSPACE']\)\)\nrequire 'arel/extensions'" ~/rails/activerecord/test/cases/helper.rb
240
- rm ~/rails/Gemfile.lock
241
- sed -i "/# Active Record./a gem 'arel-extensions', require: 'arel/extensions', path: File.expand_path\(ENV['GITHUB_WORKSPACE']\)" ~/rails/Gemfile
242
- echo "gem 'ostruct'" >> ~/rails/Gemfile
243
- sed -i "s/# frozen_string_literal: true/# frozen_string_literal: true\nrequire 'ostruct'/" ~/rails/activerecord/test/cases/encryption/configurable_test.rb
244
- cat ~/rails/Gemfile
245
-
246
- - name: This can eventually be removed
247
- run: |
248
- sed -i 's/gem "minitest"$/gem "minitest"\ngem "minitest-mock", require: "minitest\/mock"/' ~/rails/Gemfile
249
- sed -i 's/class WarningsTest < ActiveRecord::AbstractMysqlTestCase$/module Rails\nend\nclass WarningsTest < ActiveRecord::AbstractMysqlTestCase/' ~/rails/activerecord/test/cases/adapters/abstract_mysql_adapter/warnings_test.rb || true
250
- sed -i 's/class Mysql2AdapterTest < ActiveRecord::Mysql2TestCase$/module Rails\nend\nclass Mysql2AdapterTest < ActiveRecord::Mysql2TestCase/' ~/rails/activerecord/test/cases/adapters/mysql2/mysql2_adapter_test.rb || true
251
- sed -i 's/t.options = "--profile" if ENV\["CI"\]//g' ~/rails/activerecord/Rakefile
252
- cat ~/rails/activerecord/Rakefile
253
-
254
- - name: Fix Weird Test Cases
255
- run: |
256
- sed -i 's|} - \[:|} - \[:distinct_on, :uniq_on, :|' ~/rails/activerecord/test/cases/relation/delegation_test.rb
257
-
258
- - name: Bundle
259
- run: |
260
- pushd ~/rails
261
- bundle update --jobs=3 --retry=3
262
- popd
263
-
264
- - run: |
265
- pushd ~/rails/activerecord
266
- bundle exec rake db:mysql:rebuild mysql2:test --trace
267
- 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