arel-extensions 6.0.0.1 → 6.0.0.4
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/Gemfile.lock +9 -9
- data/arel-extensions.gemspec +1 -2
- data/lib/arel/visitors/sunstone_extensions.rb +10 -2
- data/test/database.rb +1 -0
- data/test/sunstone_test.rb +98 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '08c6ce3898d57f105c59837161e36e1fe45f25afd4daa95d54916bef1c3782e5'
|
4
|
+
data.tar.gz: 1f2efc0c80e2b25c826421126eb8d963a7244b1c386a7a0f871b46fcad701c11
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d5610a339bd005e10ef756715bf25b0cc96dc471e6fec233a8f9735e6c4bb05f50425aaf0f465b6d4e57c0320949ed80a6e93d46b399e1975a4753185112fac3
|
7
|
+
data.tar.gz: a5fde1fd877f44e52bde43595d4eb1237742f85ea338ad1a00597d075c5d0f30320bac95b41d5b58bf1460784035d51f14728702e22dd4cc401293137b28b1fb
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,23 +1,23 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
arel-extensions (6.0.0)
|
4
|
+
arel-extensions (6.0.0.2)
|
5
5
|
activerecord (>= 6.0.0.rc1)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
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.
|
10
|
+
activemodel (6.0.0.rc2)
|
11
|
+
activesupport (= 6.0.0.rc2)
|
12
|
+
activerecord (6.0.0.rc2)
|
13
|
+
activemodel (= 6.0.0.rc2)
|
14
|
+
activesupport (= 6.0.0.rc2)
|
15
|
+
activesupport (6.0.0.rc2)
|
16
16
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
17
17
|
i18n (>= 0.7, < 2)
|
18
18
|
minitest (~> 5.1)
|
19
19
|
tzinfo (~> 1.1)
|
20
|
-
zeitwerk (~> 2.1, >= 2.1.
|
20
|
+
zeitwerk (~> 2.1, >= 2.1.8)
|
21
21
|
ansi (1.5.0)
|
22
22
|
builder (3.2.3)
|
23
23
|
concurrent-ruby (1.1.5)
|
@@ -36,7 +36,7 @@ GEM
|
|
36
36
|
thread_safe (0.3.6)
|
37
37
|
tzinfo (1.2.5)
|
38
38
|
thread_safe (~> 0.1)
|
39
|
-
zeitwerk (2.1.
|
39
|
+
zeitwerk (2.1.9)
|
40
40
|
|
41
41
|
PLATFORMS
|
42
42
|
ruby
|
data/arel-extensions.gemspec
CHANGED
@@ -2,7 +2,15 @@ module Arel
|
|
2
2
|
module Visitors
|
3
3
|
class Sunstone
|
4
4
|
private
|
5
|
-
|
5
|
+
|
6
|
+
def visit_Hash o, collector
|
7
|
+
value = {}
|
8
|
+
o.each do |key, value|
|
9
|
+
value[visit(key, collector)] = visit(value, collector)
|
10
|
+
end
|
11
|
+
value
|
12
|
+
end
|
13
|
+
|
6
14
|
def visit_Arel_Nodes_Contains o, collector
|
7
15
|
key = visit(o.left, collector)
|
8
16
|
value = { contains: visit(o.right, collector) }
|
@@ -88,7 +96,7 @@ module Arel
|
|
88
96
|
|
89
97
|
def visit_Arel_Nodes_HasAnyKey o, collector
|
90
98
|
key = visit(o.left, collector)
|
91
|
-
value = {has_any_key: Array(o.right)
|
99
|
+
value = { has_any_key: visit(Array(o.right), collector) }
|
92
100
|
|
93
101
|
if key.is_a?(Hash)
|
94
102
|
add_to_bottom_of_hash(key, value)
|
data/test/database.rb
CHANGED
@@ -0,0 +1,98 @@
|
|
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 = Property.where(Property.arel_attribute('metadata').contains({json: 'string'}))
|
31
|
+
assert_equal '', query.to_sar.path
|
32
|
+
# query = Property.where(metadata: {contains: {json: 'string'}})
|
33
|
+
# assert_equal(<<-SQL.strip.gsub(/\s+/, ' '), query.to_sql.strip)
|
34
|
+
# SELECT "properties".*
|
35
|
+
# FROM "properties"
|
36
|
+
# WHERE "properties"."metadata" @> '{\"json\":\"string\"}'
|
37
|
+
# SQL
|
38
|
+
end
|
39
|
+
|
40
|
+
# test "::filter json_column: {contained_by: JSON_HASH}" do
|
41
|
+
# query = Property.filter(metadata: {contained_by: {json: 'string'}})
|
42
|
+
# assert_equal(<<-SQL.strip.gsub(/\s+/, ' '), query.to_sql.strip)
|
43
|
+
# SELECT "properties".*
|
44
|
+
# FROM "properties"
|
45
|
+
# WHERE "properties"."metadata" <@ '{\"json\":\"string\"}'
|
46
|
+
# SQL
|
47
|
+
# end
|
48
|
+
|
49
|
+
# test "::filter json_column: {has_key: STRING}" do
|
50
|
+
# query = Property.filter(metadata: {has_key: 'string'})
|
51
|
+
# assert_equal(<<-SQL.strip.gsub(/\s+/, ' '), query.to_sql.strip)
|
52
|
+
# SELECT "properties".*
|
53
|
+
# FROM "properties"
|
54
|
+
# WHERE "properties"."metadata" ? 'string'
|
55
|
+
# SQL
|
56
|
+
# end
|
57
|
+
|
58
|
+
# test "::filter json_column.subkey: {eq: JSON_HASH}" do
|
59
|
+
# query = Property.filter("metadata.subkey" => {eq: 'string'})
|
60
|
+
# assert_equal(<<-SQL.strip.gsub(/\s+/, ' '), query.to_sql.strip)
|
61
|
+
# SELECT "properties".*
|
62
|
+
# FROM "properties"
|
63
|
+
# WHERE "properties"."metadata"#>'{subkey}' = 'string'
|
64
|
+
# SQL
|
65
|
+
# end
|
66
|
+
|
67
|
+
# test "::filter json_column: BOOLEAN" do
|
68
|
+
# query = Property.filter(metadata: true)
|
69
|
+
# assert_equal(<<-SQL.strip.gsub(/\s+/, ' '), query.to_sql.strip)
|
70
|
+
# SELECT "properties".*
|
71
|
+
# FROM "properties"
|
72
|
+
# WHERE "properties"."metadata" IS NOT NULL
|
73
|
+
# SQL
|
74
|
+
|
75
|
+
# query = Property.filter(metadata: "true")
|
76
|
+
# assert_equal(<<-SQL.strip.gsub(/\s+/, ' '), query.to_sql.strip)
|
77
|
+
# SELECT "properties".*
|
78
|
+
# FROM "properties"
|
79
|
+
# WHERE "properties"."metadata" IS NOT NULL
|
80
|
+
# SQL
|
81
|
+
|
82
|
+
# query = Property.filter(metadata: false)
|
83
|
+
# assert_equal(<<-SQL.strip.gsub(/\s+/, ' '), query.to_sql.strip)
|
84
|
+
# SELECT "properties".*
|
85
|
+
# FROM "properties"
|
86
|
+
# WHERE "properties"."metadata" IS NULL
|
87
|
+
# SQL
|
88
|
+
|
89
|
+
# query = Property.filter(metadata: "false")
|
90
|
+
# assert_equal(<<-SQL.strip.gsub(/\s+/, ' '), query.to_sql.strip)
|
91
|
+
# SELECT "properties".*
|
92
|
+
# FROM "properties"
|
93
|
+
# WHERE "properties"."metadata" IS NULL
|
94
|
+
# SQL
|
95
|
+
# end
|
96
|
+
|
97
|
+
|
98
|
+
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.0.0.
|
4
|
+
version: 6.0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jon Bracy
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-08-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -148,6 +148,7 @@ files:
|
|
148
148
|
- lib/arel/visitors/postgresql_extensions.rb
|
149
149
|
- lib/arel/visitors/sunstone_extensions.rb
|
150
150
|
- test/database.rb
|
151
|
+
- test/sunstone_test.rb
|
151
152
|
- test/test_helper.rb
|
152
153
|
- test/ts_test.rb
|
153
154
|
homepage: https://github.com/malomalo/arel-extensions
|
@@ -175,5 +176,6 @@ specification_version: 4
|
|
175
176
|
summary: Adds support for missing SQL operators and functions to Arel
|
176
177
|
test_files:
|
177
178
|
- test/database.rb
|
179
|
+
- test/sunstone_test.rb
|
178
180
|
- test/test_helper.rb
|
179
181
|
- test/ts_test.rb
|