arel-extensions 6.0.0.6 → 6.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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +35 -11
- data/arel-extensions.gemspec +7 -4
- data/lib/arel/array_predications.rb +4 -14
- data/lib/arel/extensions.rb +0 -2
- data/lib/arel/extensions/version.rb +5 -0
- data/lib/arel/nodes/contained_by.rb +5 -2
- data/lib/arel/nodes/relation.rb +6 -2
- data/lib/arel/nodes/ts_rank_cd.rb +3 -2
- data/lib/arel/ts_predications.rb +3 -3
- data/lib/arel/visitors/postgresql_extensions.rb +5 -22
- data/lib/arel/visitors/sunstone_extensions.rb +22 -10
- data/test/database.rb +7 -9
- data/test/sunstone_test.rb +49 -1
- data/test/test_helper.rb +15 -11
- data/test/ts_test.rb +15 -0
- metadata +26 -14
- data/Gemfile.lock +0 -73
- data/lib/arel/nodes/contains.rb +0 -6
- data/lib/arel/nodes/overlaps.rb +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 576ed17dde483e58188e1f7124bf77f4a479486b31166af59b1779ce955cf022
|
4
|
+
data.tar.gz: a5253c48854f0b13604867cb36877b03ac6a3166724d11d25fa968b2f7654757
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ea0ba57874c4abfb39fb448c60d8fe6a3829ba4a59d220ba348ad30fb04bea583928c1df4735a71c97a3d1a46d79ad990449cd82d66df5d73a5d947ad169952
|
7
|
+
data.tar.gz: 1d970867a870fbb319bd4ccbb5bc9cd110fe3b889b539da3069abc72a68e899b09f02d3f650d2a3a30b6d5defd65f8fd1c7fcf7ee3208ddc9e8eaa8524eb18c9
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
dist:
|
1
|
+
dist: bionic
|
2
2
|
language: ruby
|
3
3
|
sudo: false
|
4
4
|
|
@@ -8,37 +8,61 @@ cache:
|
|
8
8
|
- /home/travis/.rvm/gems
|
9
9
|
|
10
10
|
rvm:
|
11
|
-
- 2.
|
12
|
-
-
|
11
|
+
- 2.7
|
12
|
+
- 3.0
|
13
13
|
|
14
14
|
env:
|
15
15
|
matrix:
|
16
|
-
- RAILS_VERSION=v6.
|
17
|
-
- RAILS_VERSION=v6.
|
18
|
-
- RAILS_VERSION=v6.
|
16
|
+
- RAILS_VERSION=v6.1.0 TASK='db:mysql:rebuild mysql2:test'
|
17
|
+
- RAILS_VERSION=v6.1.0 TASK='db:mysql:rebuild mysql2:isolated_test'
|
18
|
+
- RAILS_VERSION=v6.1.0 TASK='db:postgresql:rebuild postgresql:test'
|
19
|
+
- RAILS_VERSION=v6.1.0 TASK='db:postgresql:rebuild postgresql:isolated_test'
|
20
|
+
- RAILS_VERSION=v6.1.0 TASK='sqlite3:test'
|
21
|
+
- RAILS_VERSION=v6.1.0 TASK='sqlite3:isolated_test'
|
22
|
+
- RAILS_VERSION=v6.1.0 TASK='sqlite3_mem:test'
|
19
23
|
|
20
24
|
services:
|
21
25
|
- mysql
|
22
26
|
addons:
|
23
|
-
postgresql: "
|
27
|
+
postgresql: "13"
|
28
|
+
apt:
|
29
|
+
packages:
|
30
|
+
- postgresql-13
|
31
|
+
- postgresql-client-13
|
24
32
|
|
25
33
|
before_install:
|
34
|
+
- sudo sed -i 's/port = 5433/port = 5432/' /etc/postgresql/13/main/postgresql.conf
|
35
|
+
- sudo cp /etc/postgresql/{9.3,13}/main/pg_hba.conf
|
36
|
+
- sudo pg_ctlcluster 13 main restart
|
26
37
|
- unset BUNDLE_GEMFILE
|
27
38
|
- gem update --system
|
28
39
|
- gem update bundler
|
40
|
+
- gem install bundler --version 1.17.3
|
41
|
+
- mysql -e "create user rails@localhost;"
|
42
|
+
- mysql -e "grant all privileges on activerecord_unittest.* to rails@localhost;"
|
43
|
+
- mysql -e "grant all privileges on activerecord_unittest2.* to rails@localhost;"
|
44
|
+
- mysql -e "grant all privileges on inexistent_activerecord_unittest.* to rails@localhost;"
|
45
|
+
- mysql -e "create database activerecord_unittest default character set utf8mb4;"
|
46
|
+
- mysql -e "create database activerecord_unittest2 default character set utf8mb4;"
|
29
47
|
|
30
48
|
install:
|
31
|
-
- git clone https://github.com/rails/rails.git ~/build/rails
|
49
|
+
- git clone --branch $RAILS_VERSION https://github.com/rails/rails.git ~/build/rails
|
50
|
+
|
51
|
+
before_script:
|
52
|
+
- sed -i "s/t.warning = true/t.warning = false/g" Rakefile
|
32
53
|
- pushd ~/build/rails
|
33
|
-
- git
|
54
|
+
- git status
|
34
55
|
- sed -i "s/Gem.ruby, '-w'/Gem.ruby, '-w0'/" ~/build/rails/activerecord/Rakefile
|
35
56
|
- sed -i "s/t.warning = true/t.warning = false/g" ~/build/rails/activerecord/Rakefile
|
36
57
|
- sed -i "/require 'support\/connection'/a \$LOAD_PATH.unshift\(File.expand_path\('~\/build\/malomalo\/arel-extensions\/lib'\)\)\nrequire 'arel/extensions'" ~/build/rails/activerecord/test/cases/helper.rb
|
37
58
|
- "sed -i \"/group :db do/a gem 'arel-extensions', require: 'arel/extensions', path: File.expand_path\\('~\\/build\\/malomalo\\/arel-extensions'\\)\" ~/build/rails/Gemfile"
|
38
59
|
- sed -i "/rb-inotify/d" ~/build/rails/Gemfile
|
39
60
|
- cat ~/build/rails/Gemfile
|
40
|
-
-
|
61
|
+
- rm ~/build/rails/Gemfile.lock
|
62
|
+
- bundle update --jobs=3 --retry=3
|
41
63
|
- popd
|
64
|
+
- bundle install --jobs=3 --retry=3
|
42
65
|
|
43
66
|
script:
|
44
|
-
-
|
67
|
+
- bundle exec rake test
|
68
|
+
- cd ~/build/rails/activerecord && bundle exec rake $TASK
|
data/arel-extensions.gemspec
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
+
require File.expand_path("../lib/arel/extensions/version", __FILE__)
|
2
|
+
|
1
3
|
Gem::Specification.new do |gem|
|
2
4
|
gem.name = 'arel-extensions'
|
3
|
-
gem.version =
|
5
|
+
gem.version = Arel::Extensions::VERSION
|
4
6
|
gem.authors = ["Jon Bracy"]
|
5
7
|
gem.email = ["jonbracy@gmail.com"]
|
6
8
|
gem.summary = %q{Adds support for missing SQL operators and functions to Arel}
|
@@ -11,15 +13,16 @@ Gem::Specification.new do |gem|
|
|
11
13
|
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
12
14
|
gem.require_paths = ["lib"]
|
13
15
|
|
14
|
-
gem.add_dependency 'activerecord', '>= 6.
|
16
|
+
gem.add_dependency 'activerecord', '>= 6.1.0'
|
15
17
|
|
16
18
|
gem.add_development_dependency "bundler"
|
19
|
+
gem.add_development_dependency "byebug"
|
17
20
|
gem.add_development_dependency "rake"
|
18
21
|
gem.add_development_dependency 'minitest'
|
19
22
|
gem.add_development_dependency 'minitest-reporters'
|
20
|
-
gem.add_development_dependency "sunstone"
|
23
|
+
gem.add_development_dependency "sunstone", '>= 6.1.0'
|
21
24
|
gem.add_development_dependency "webmock"
|
22
25
|
gem.add_development_dependency 'pg'
|
23
26
|
gem.add_development_dependency 'rgeo'
|
24
|
-
|
27
|
+
|
25
28
|
end
|
@@ -1,24 +1,14 @@
|
|
1
1
|
module Arel
|
2
2
|
module ArrayPredications
|
3
|
-
|
4
|
-
# Used by both JSON and ARRAY so it doesn't try to cast to array
|
5
|
-
def contains(value)
|
6
|
-
Arel::Nodes::Contains.new(self, value)
|
7
|
-
end
|
8
|
-
|
3
|
+
|
9
4
|
# Used by both JSON and ARRAY so it doesn't try to cast to array
|
10
5
|
def contained_by(value)
|
11
6
|
Arel::Nodes::ContainedBy.new(self, value)
|
12
7
|
end
|
13
|
-
|
8
|
+
|
14
9
|
def excludes(value)
|
15
10
|
Arel::Nodes::Excludes.new(self, value)
|
16
11
|
end
|
17
|
-
|
18
|
-
def overlaps(*values)
|
19
|
-
values = values[0] if values.size == 1 && values[0].is_a?(Array)
|
20
|
-
Arel::Nodes::Overlaps.new(self, values)
|
21
|
-
end
|
22
|
-
|
12
|
+
|
23
13
|
end
|
24
|
-
end
|
14
|
+
end
|
data/lib/arel/extensions.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
require "arel"
|
2
2
|
require File.expand_path('../nodes/hex_encoded_binary', __FILE__)
|
3
3
|
|
4
|
-
require File.expand_path('../nodes/overlaps', __FILE__)
|
5
|
-
require File.expand_path('../nodes/contains', __FILE__)
|
6
4
|
require File.expand_path('../nodes/within', __FILE__)
|
7
5
|
require File.expand_path('../nodes/excludes', __FILE__)
|
8
6
|
require File.expand_path('../nodes/contained_by', __FILE__)
|
data/lib/arel/nodes/relation.rb
CHANGED
@@ -12,7 +12,7 @@ module Arel
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def able_to_type_cast?
|
15
|
-
|
15
|
+
relation.able_to_type_cast?
|
16
16
|
end
|
17
17
|
|
18
18
|
def table_name
|
@@ -25,7 +25,11 @@ module Arel
|
|
25
25
|
self.name == other.name &&
|
26
26
|
self.collection == other.collection
|
27
27
|
end
|
28
|
-
|
28
|
+
|
29
|
+
def type_cast_for_database(value)
|
30
|
+
relation.type_cast_for_database(value)
|
31
|
+
end
|
32
|
+
|
29
33
|
end
|
30
34
|
end
|
31
35
|
end
|
@@ -2,11 +2,12 @@ module Arel
|
|
2
2
|
module Nodes
|
3
3
|
class TSRankCD < Arel::Nodes::Node
|
4
4
|
|
5
|
-
attr_reader :tsvector, :tsquery
|
5
|
+
attr_reader :tsvector, :tsquery, :normalization
|
6
6
|
|
7
|
-
def initialize(tsvector, tsquery)
|
7
|
+
def initialize(tsvector, tsquery, normalization=nil)
|
8
8
|
@tsvector = tsvector
|
9
9
|
@tsquery = tsquery
|
10
|
+
@normalization = normalization
|
10
11
|
end
|
11
12
|
|
12
13
|
end
|
data/lib/arel/ts_predications.rb
CHANGED
@@ -2,11 +2,11 @@ module Arel
|
|
2
2
|
module TSPredications
|
3
3
|
|
4
4
|
def ts_query(expression, language=nil)
|
5
|
-
vector = Arel::Nodes::TSVector.new(self, language)
|
6
|
-
query = Arel::Nodes::TSQuery.new(expression, language)
|
5
|
+
vector = Arel::Nodes::TSVector.new(self, language: language)
|
6
|
+
query = Arel::Nodes::TSQuery.new(expression, language: language)
|
7
7
|
|
8
8
|
Arel::Nodes::TSMatch.new(vector, query)
|
9
9
|
end
|
10
10
|
|
11
11
|
end
|
12
|
-
end
|
12
|
+
end
|
@@ -28,36 +28,15 @@ module Arel
|
|
28
28
|
collector << "RANDOM()"
|
29
29
|
end
|
30
30
|
|
31
|
-
def visit_Arel_Nodes_Contains o, collector
|
32
|
-
visit o.left, collector
|
33
|
-
collector << ' @> '
|
34
|
-
collector << quote(o.left.type_cast_for_database(o.right))
|
35
|
-
collector
|
36
|
-
end
|
37
|
-
|
38
|
-
def visit_Arel_Nodes_ContainedBy o, collector
|
39
|
-
visit o.left, collector
|
40
|
-
collector << ' <@ '
|
41
|
-
collector << quote(o.left.type_cast_for_database(o.right))
|
42
|
-
collector
|
43
|
-
end
|
44
|
-
|
45
31
|
def visit_Arel_Nodes_Excludes o, collector
|
46
32
|
collector << 'NOT ('
|
47
33
|
visit o.left, collector
|
48
34
|
collector << ' @> '
|
49
|
-
|
35
|
+
visit o.right, collector
|
50
36
|
collector << ')'
|
51
37
|
collector
|
52
38
|
end
|
53
39
|
|
54
|
-
def visit_Arel_Nodes_Overlaps o, collector
|
55
|
-
visit o.left, collector
|
56
|
-
collector << ' && '
|
57
|
-
collector << quote(o.left.type_cast_for_database(o.right))
|
58
|
-
collector
|
59
|
-
end
|
60
|
-
|
61
40
|
def visit_Arel_Attributes_Key(o, collector, last_key = true)
|
62
41
|
if o.relation.is_a?(Arel::Attributes::Key)
|
63
42
|
visit_Arel_Attributes_Key(o.relation, collector, false)
|
@@ -153,6 +132,10 @@ module Arel
|
|
153
132
|
visit(o.tsvector, collector)
|
154
133
|
collector << ', '
|
155
134
|
visit(o.tsquery, collector)
|
135
|
+
if o.normalization
|
136
|
+
collector << ', '
|
137
|
+
visit(o.normalization, collector)
|
138
|
+
end
|
156
139
|
collector << ')'
|
157
140
|
collector
|
158
141
|
end
|
@@ -6,30 +6,42 @@ module Arel
|
|
6
6
|
def visit_Arel_Nodes_Ascending o, collector
|
7
7
|
hash = visit(o.expr, collector)
|
8
8
|
|
9
|
-
case o.nulls
|
9
|
+
value = case o.nulls
|
10
10
|
when :nulls_first
|
11
|
-
|
11
|
+
{asc: :nulls_first}
|
12
12
|
when :nulls_last
|
13
|
-
|
13
|
+
{asc: :nulls_last}
|
14
14
|
else
|
15
|
-
|
15
|
+
:asc
|
16
16
|
end
|
17
17
|
|
18
|
+
if hash.is_a?(Hash)
|
19
|
+
add_to_bottom_of_hash_or_array(hash, value)
|
20
|
+
else
|
21
|
+
hash = { hash => value }
|
22
|
+
end
|
23
|
+
|
18
24
|
hash
|
19
25
|
end
|
20
26
|
|
21
27
|
def visit_Arel_Nodes_Descending o, collector
|
22
28
|
hash = visit(o.expr, collector)
|
23
|
-
|
24
|
-
case o.nulls
|
29
|
+
|
30
|
+
value = case o.nulls
|
25
31
|
when :nulls_first
|
26
|
-
|
32
|
+
{desc: :nulls_first}
|
27
33
|
when :nulls_last
|
28
|
-
|
34
|
+
{desc: :nulls_last}
|
29
35
|
else
|
30
|
-
|
36
|
+
:desc
|
31
37
|
end
|
32
|
-
|
38
|
+
|
39
|
+
if hash.is_a?(Hash)
|
40
|
+
add_to_bottom_of_hash_or_array(hash, value)
|
41
|
+
else
|
42
|
+
hash = { hash => value }
|
43
|
+
end
|
44
|
+
|
33
45
|
hash
|
34
46
|
end
|
35
47
|
|
data/test/database.rb
CHANGED
@@ -1,16 +1,14 @@
|
|
1
|
-
task = ActiveRecord::Tasks::PostgreSQLDatabaseTasks.new({
|
2
|
-
'adapter' => 'postgresql',
|
3
|
-
'database' => "arel-extensions-test"
|
4
|
-
})
|
5
|
-
task.drop
|
6
|
-
task.create
|
7
|
-
|
8
1
|
ActiveRecord::Base.establish_connection({
|
9
2
|
adapter: "postgresql",
|
10
3
|
database: "arel-extensions-test",
|
11
4
|
encoding: "utf8"
|
12
5
|
})
|
13
6
|
|
7
|
+
db_config = ActiveRecord::Base.connection_db_config
|
8
|
+
task = ActiveRecord::Tasks::PostgreSQLDatabaseTasks.new(db_config)
|
9
|
+
task.drop
|
10
|
+
task.create
|
11
|
+
|
14
12
|
ActiveRecord::Migration.suppress_messages do
|
15
13
|
ActiveRecord::Schema.define do
|
16
14
|
|
@@ -18,7 +16,7 @@ ActiveRecord::Migration.suppress_messages do
|
|
18
16
|
t.integer "name"
|
19
17
|
t.integer "property_id"
|
20
18
|
end
|
21
|
-
|
19
|
+
|
22
20
|
create_table "properties", force: :cascade do |t|
|
23
21
|
t.string "name", limit: 255
|
24
22
|
t.tsvector 'vector_col'
|
@@ -48,4 +46,4 @@ class SunstoneProperty < SunstoneRecord
|
|
48
46
|
has_many :addresses, class_name: 'SunstoneAddress'
|
49
47
|
end
|
50
48
|
|
51
|
-
SunstoneRecord.establish_connection(adapter: 'sunstone',
|
49
|
+
SunstoneRecord.establish_connection(adapter: 'sunstone', endpoint: 'http://example.com')
|
data/test/sunstone_test.rb
CHANGED
@@ -27,7 +27,7 @@ class SunstoneTest < ActiveSupport::TestCase
|
|
27
27
|
# end
|
28
28
|
|
29
29
|
test "::filter json_column: {contains: JSON_HASH}" do
|
30
|
-
query = SunstoneProperty.where(SunstoneProperty.
|
30
|
+
query = SunstoneProperty.where(SunstoneProperty.arel_table['metadata'].contains({json: 'string'}))
|
31
31
|
assert_sar(query, 'GET', '/sunstone_properties', {
|
32
32
|
where: {metadata: {contains: { json: 'string' }}}
|
33
33
|
})
|
@@ -97,5 +97,53 @@ class SunstoneTest < ActiveSupport::TestCase
|
|
97
97
|
# SQL
|
98
98
|
# end
|
99
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
|
100
148
|
|
101
149
|
end
|
data/test/test_helper.rb
CHANGED
@@ -30,7 +30,7 @@ $debugging = false
|
|
30
30
|
# File 'lib/active_support/testing/declarative.rb', somewhere in rails....
|
31
31
|
class ActiveSupport::TestCase
|
32
32
|
include WebMock::API
|
33
|
-
|
33
|
+
|
34
34
|
# File 'lib/active_support/testing/declarative.rb'
|
35
35
|
def self.test(name, &block)
|
36
36
|
test_name = "test_#{name.gsub(/\s+/, '_')}".to_sym
|
@@ -44,7 +44,7 @@ class ActiveSupport::TestCase
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
47
|
-
|
47
|
+
|
48
48
|
def webmock(method, path, query=nil)
|
49
49
|
query = deep_transform_query(query) if query
|
50
50
|
|
@@ -56,7 +56,7 @@ class ActiveSupport::TestCase
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
end
|
59
|
-
|
59
|
+
|
60
60
|
def setup
|
61
61
|
sunstone_schema = {
|
62
62
|
addresses: {
|
@@ -74,7 +74,7 @@ class ActiveSupport::TestCase
|
|
74
74
|
}
|
75
75
|
}
|
76
76
|
}
|
77
|
-
|
77
|
+
|
78
78
|
req_stub = stub_request(:get, /^http:\/\/example.com/).with do |req|
|
79
79
|
case req.uri.path
|
80
80
|
when '/tables'
|
@@ -85,7 +85,7 @@ class ActiveSupport::TestCase
|
|
85
85
|
false
|
86
86
|
end
|
87
87
|
end
|
88
|
-
|
88
|
+
|
89
89
|
req_stub.to_return do |req|
|
90
90
|
case req.uri.path
|
91
91
|
when '/tables'
|
@@ -151,7 +151,7 @@ class ActiveSupport::TestCase
|
|
151
151
|
unless ignore =~ sql
|
152
152
|
if $debugging
|
153
153
|
puts caller.select { |l| l.starts_with?(File.expand_path('../../lib', __FILE__)) }
|
154
|
-
puts "\n\n"
|
154
|
+
puts "\n\n"
|
155
155
|
end
|
156
156
|
end
|
157
157
|
self.class.log << sql unless ignore =~ sql
|
@@ -173,16 +173,20 @@ class ActiveSupport::TestCase
|
|
173
173
|
object
|
174
174
|
end
|
175
175
|
end
|
176
|
-
|
176
|
+
|
177
177
|
def assert_sar(query, method, path, query_params = {}, body = nil)
|
178
178
|
sar = query.to_sar
|
179
179
|
|
180
180
|
assert_equal method, sar.method
|
181
181
|
assert_equal path, sar.path.split('?').first
|
182
182
|
assert_equal deep_transform_query(query_params), MessagePack.unpack(CGI::unescape(sar.path.split('?').last))
|
183
|
-
|
183
|
+
if body.nil?
|
184
|
+
assert_nil sar.body
|
185
|
+
else
|
186
|
+
assert_equal body, sar.body
|
187
|
+
end
|
184
188
|
end
|
185
|
-
|
189
|
+
|
186
190
|
def assert_sql(expected, query)
|
187
191
|
assert_equal expected.strip, query.to_sql.strip.gsub(/\s+/, ' ')
|
188
192
|
end
|
@@ -201,5 +205,5 @@ class ActiveSupport::TestCase
|
|
201
205
|
alias :assert_not_predicate :refute_predicate
|
202
206
|
alias :assert_not_respond_to :refute_respond_to
|
203
207
|
alias :assert_not_same :refute_same
|
204
|
-
|
205
|
-
end
|
208
|
+
|
209
|
+
end
|
data/test/ts_test.rb
CHANGED
@@ -133,4 +133,19 @@ class TSTest < ActiveSupport::TestCase
|
|
133
133
|
SQL
|
134
134
|
end
|
135
135
|
|
136
|
+
test 'ts_rank_cd(tsvector, tsquery, normalization)' do
|
137
|
+
query = Property.where(
|
138
|
+
Arel::Nodes::TSRankCD.new(
|
139
|
+
Arel::Nodes::TSVector.new(Property.arel_table[:name]),
|
140
|
+
Arel::Nodes::TSQuery.new('query'),
|
141
|
+
5
|
142
|
+
)
|
143
|
+
)
|
144
|
+
|
145
|
+
assert_equal(<<~SQL.gsub(/( +|\n)/, ' ').strip, query.to_sql)
|
146
|
+
SELECT "properties".* FROM "properties"
|
147
|
+
WHERE ts_rank_cd(to_tsvector("properties"."name"), to_tsquery('query'), 5)
|
148
|
+
SQL
|
149
|
+
end
|
150
|
+
|
136
151
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: arel-extensions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.
|
4
|
+
version: 6.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jon Bracy
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 6.
|
19
|
+
version: 6.1.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 6.
|
26
|
+
version: 6.1.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: byebug
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rake
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,14 +100,14 @@ dependencies:
|
|
86
100
|
requirements:
|
87
101
|
- - ">="
|
88
102
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
103
|
+
version: 6.1.0
|
90
104
|
type: :development
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
108
|
- - ">="
|
95
109
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
110
|
+
version: 6.1.0
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: webmock
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -136,7 +150,7 @@ dependencies:
|
|
136
150
|
- - ">="
|
137
151
|
- !ruby/object:Gem::Version
|
138
152
|
version: '0'
|
139
|
-
description:
|
153
|
+
description:
|
140
154
|
email:
|
141
155
|
- jonbracy@gmail.com
|
142
156
|
executables: []
|
@@ -146,7 +160,6 @@ files:
|
|
146
160
|
- ".gitignore"
|
147
161
|
- ".travis.yml"
|
148
162
|
- Gemfile
|
149
|
-
- Gemfile.lock
|
150
163
|
- LICENSE
|
151
164
|
- README.md
|
152
165
|
- Rakefile
|
@@ -159,16 +172,15 @@ files:
|
|
159
172
|
- lib/arel/attributes/cast.rb
|
160
173
|
- lib/arel/attributes/key.rb
|
161
174
|
- lib/arel/extensions.rb
|
175
|
+
- lib/arel/extensions/version.rb
|
162
176
|
- lib/arel/gis_predications.rb
|
163
177
|
- lib/arel/json_predications.rb
|
164
178
|
- lib/arel/nodes/contained_by.rb
|
165
|
-
- lib/arel/nodes/contains.rb
|
166
179
|
- lib/arel/nodes/excludes.rb
|
167
180
|
- lib/arel/nodes/has_any_key.rb
|
168
181
|
- lib/arel/nodes/has_key.rb
|
169
182
|
- lib/arel/nodes/has_keys.rb
|
170
183
|
- lib/arel/nodes/hex_encoded_binary.rb
|
171
|
-
- lib/arel/nodes/overlaps.rb
|
172
184
|
- lib/arel/nodes/random.rb
|
173
185
|
- lib/arel/nodes/relation.rb
|
174
186
|
- lib/arel/nodes/ts_match.rb
|
@@ -190,7 +202,7 @@ homepage: https://github.com/malomalo/arel-extensions
|
|
190
202
|
licenses:
|
191
203
|
- MIT
|
192
204
|
metadata: {}
|
193
|
-
post_install_message:
|
205
|
+
post_install_message:
|
194
206
|
rdoc_options: []
|
195
207
|
require_paths:
|
196
208
|
- lib
|
@@ -205,8 +217,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
205
217
|
- !ruby/object:Gem::Version
|
206
218
|
version: '0'
|
207
219
|
requirements: []
|
208
|
-
rubygems_version: 3.
|
209
|
-
signing_key:
|
220
|
+
rubygems_version: 3.2.3
|
221
|
+
signing_key:
|
210
222
|
specification_version: 4
|
211
223
|
summary: Adds support for missing SQL operators and functions to Arel
|
212
224
|
test_files:
|
data/Gemfile.lock
DELETED
@@ -1,73 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
arel-extensions (6.0.0.5)
|
5
|
-
activerecord (>= 6.0.0)
|
6
|
-
|
7
|
-
GEM
|
8
|
-
remote: https://rubygems.org/
|
9
|
-
specs:
|
10
|
-
activemodel (6.0.0)
|
11
|
-
activesupport (= 6.0.0)
|
12
|
-
activerecord (6.0.0)
|
13
|
-
activemodel (= 6.0.0)
|
14
|
-
activesupport (= 6.0.0)
|
15
|
-
activesupport (6.0.0)
|
16
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
17
|
-
i18n (>= 0.7, < 2)
|
18
|
-
minitest (~> 5.1)
|
19
|
-
tzinfo (~> 1.1)
|
20
|
-
zeitwerk (~> 2.1, >= 2.1.8)
|
21
|
-
addressable (2.7.0)
|
22
|
-
public_suffix (>= 2.0.2, < 5.0)
|
23
|
-
ansi (1.5.0)
|
24
|
-
builder (3.2.3)
|
25
|
-
concurrent-ruby (1.1.5)
|
26
|
-
cookie_store (0.1.4)
|
27
|
-
crack (0.4.3)
|
28
|
-
safe_yaml (~> 1.0.0)
|
29
|
-
hashdiff (1.0.0)
|
30
|
-
i18n (1.6.0)
|
31
|
-
concurrent-ruby (~> 1.0)
|
32
|
-
minitest (5.11.3)
|
33
|
-
minitest-reporters (1.3.8)
|
34
|
-
ansi
|
35
|
-
builder
|
36
|
-
minitest (>= 5.0)
|
37
|
-
ruby-progressbar
|
38
|
-
msgpack (1.3.1)
|
39
|
-
pg (1.1.4)
|
40
|
-
public_suffix (4.0.1)
|
41
|
-
rake (12.3.3)
|
42
|
-
rgeo (2.1.0)
|
43
|
-
ruby-progressbar (1.10.1)
|
44
|
-
safe_yaml (1.0.5)
|
45
|
-
sunstone (6.0.0.5)
|
46
|
-
activerecord (>= 6.0.0.rc1)
|
47
|
-
cookie_store
|
48
|
-
msgpack
|
49
|
-
thread_safe (0.3.6)
|
50
|
-
tzinfo (1.2.5)
|
51
|
-
thread_safe (~> 0.1)
|
52
|
-
webmock (3.7.6)
|
53
|
-
addressable (>= 2.3.6)
|
54
|
-
crack (>= 0.3.2)
|
55
|
-
hashdiff (>= 0.4.0, < 2.0.0)
|
56
|
-
zeitwerk (2.1.10)
|
57
|
-
|
58
|
-
PLATFORMS
|
59
|
-
ruby
|
60
|
-
|
61
|
-
DEPENDENCIES
|
62
|
-
arel-extensions!
|
63
|
-
bundler
|
64
|
-
minitest
|
65
|
-
minitest-reporters
|
66
|
-
pg
|
67
|
-
rake
|
68
|
-
rgeo
|
69
|
-
sunstone
|
70
|
-
webmock
|
71
|
-
|
72
|
-
BUNDLED WITH
|
73
|
-
1.17.3
|
data/lib/arel/nodes/contains.rb
DELETED