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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +41 -0
- data/README.md +83 -2
- data/ext/arel/nodes/ascending.rb +2 -0
- data/ext/arel/nodes/descending.rb +2 -0
- data/ext/arel/order_predications.rb +2 -0
- data/lib/active_record/query_methods.rb +33 -31
- data/lib/arel/array_predications.rb +2 -0
- data/lib/arel/attributes/cast.rb +2 -0
- data/lib/arel/attributes/key.rb +2 -0
- data/lib/arel/extensions/version.rb +3 -1
- data/lib/arel/extensions.rb +2 -0
- data/lib/arel/gis_predications.rb +2 -0
- data/lib/arel/json_predications.rb +2 -0
- data/lib/arel/nodes/binary_value.rb +2 -0
- data/lib/arel/nodes/contained_by.rb +2 -0
- data/lib/arel/nodes/excludes.rb +2 -0
- data/lib/arel/nodes/geometry.rb +2 -0
- data/lib/arel/nodes/has_any_key.rb +2 -0
- data/lib/arel/nodes/has_key.rb +2 -0
- data/lib/arel/nodes/has_keys.rb +2 -0
- data/lib/arel/nodes/hex_encoded_binary_value.rb +2 -0
- data/lib/arel/nodes/intersects.rb +2 -0
- data/lib/arel/nodes/random.rb +2 -0
- data/lib/arel/nodes/relation.rb +2 -0
- data/lib/arel/nodes/ts_match.rb +2 -0
- data/lib/arel/nodes/ts_query.rb +2 -0
- data/lib/arel/nodes/ts_rank.rb +2 -0
- data/lib/arel/nodes/ts_rank_cd.rb +2 -0
- data/lib/arel/nodes/ts_vector.rb +2 -0
- data/lib/arel/nodes/within.rb +2 -0
- data/lib/arel/ts_predications.rb +2 -0
- data/lib/arel/visitors/postgresql_extensions.rb +2 -0
- data/lib/arel/visitors/sunstone_extensions.rb +2 -0
- data/lib/arel/visitors/to_sql_extensions.rb +2 -0
- metadata +15 -45
- data/.github/workflows/ci.yml +0 -212
- data/.gitignore +0 -3
- data/Gemfile +0 -5
- data/Rakefile +0 -14
- data/arel-extensions.gemspec +0 -29
- data/test/binary_value_test.rb +0 -23
- data/test/database.rb +0 -51
- data/test/gis_test.rb +0 -23
- data/test/order_test.rb +0 -83
- data/test/sunstone_test.rb +0 -149
- data/test/test_helper.rb +0 -210
- data/test/ts_test.rb +0 -151
data/.github/workflows/ci.yml
DELETED
|
@@ -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
data/Gemfile
DELETED
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
|
data/arel-extensions.gemspec
DELETED
|
@@ -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
|
data/test/binary_value_test.rb
DELETED
|
@@ -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
|
data/test/sunstone_test.rb
DELETED
|
@@ -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
|