postgres_ext 2.4.0.beta.1 → 2.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +4 -0
- data/CHANGELOG.md +6 -0
- data/gemfiles/Gemfile.activerecord-4.2.x +2 -1
- data/lib/postgres_ext/active_record.rb +1 -0
- data/lib/postgres_ext/active_record/cte_proxy.rb +2 -2
- data/lib/postgres_ext/active_record/querying.rb +0 -2
- data/lib/postgres_ext/active_record/relation.rb +11 -1
- data/lib/postgres_ext/active_record/relation/predicate_builder.rb +0 -2
- data/lib/postgres_ext/active_record/relation/predicate_builder/array_handler.rb +32 -0
- data/lib/postgres_ext/active_record/relation/query_methods.rb +94 -49
- data/lib/postgres_ext/arel.rb +1 -2
- data/lib/postgres_ext/arel/4.1/visitors.rb +1 -0
- data/lib/postgres_ext/arel/4.1/visitors/depth_first.rb +9 -0
- data/lib/postgres_ext/arel/4.1/visitors/postgresql.rb +20 -8
- data/lib/postgres_ext/arel/4.2/visitors/postgresql.rb +17 -3
- data/lib/postgres_ext/arel/nodes/contained_within.rb +14 -2
- data/lib/postgres_ext/version.rb +1 -1
- data/postgres_ext.gemspec +1 -1
- data/test/queries/array_queries_test.rb +6 -2
- data/test/queries/contains_test.rb +12 -1
- metadata +9 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c3246d3eb02a37797d39a1e4c9eb7ef17e010b2b
|
4
|
+
data.tar.gz: 569c3f94c31b6b7979eb95da5d5ab2dcb5f376cb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5ab51fcf131d599a871238d2fd1738b43fc316df96f2810a9045bf513d515e29bfa13008077cf7cccf4349bd7cfbf569812156b9cd62c764d0a830328810dd9d
|
7
|
+
data.tar.gz: ba34c9e19290e4691dc28c337dc7aaa13b121b0fff51499a4720e16f816609e140115508f02c0a959971e74597ad46202822a7fabbb360d3b2d9c402ac533709
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -23,8 +23,8 @@ class CTEProxy
|
|
23
23
|
end
|
24
24
|
|
25
25
|
delegate :column_names, :columns_hash, :model_name, :primary_key, :attribute_alias?,
|
26
|
-
:aggregate_reflections, :instantiate, :type_for_attribute, to: :@model
|
27
|
-
|
26
|
+
:aggregate_reflections, :instantiate, :type_for_attribute, :relation_delegate_class, to: :@model
|
27
|
+
|
28
28
|
private
|
29
29
|
|
30
30
|
def reflections
|
@@ -1,2 +1,12 @@
|
|
1
|
+
## TODO: Change to ~> 4.2.0 on gem release
|
2
|
+
|
3
|
+
gdep = Gem::Dependency.new('activerecord', '~> 4.2.0.beta4')
|
4
|
+
ar_version_cutoff = gdep.matching_specs.sort_by(&:version).last
|
5
|
+
|
1
6
|
require 'postgres_ext/active_record/relation/query_methods'
|
2
|
-
|
7
|
+
if ar_version_cutoff
|
8
|
+
require 'postgres_ext/active_record/relation/predicate_builder/array_handler'
|
9
|
+
else
|
10
|
+
require 'postgres_ext/active_record/relation/predicate_builder'
|
11
|
+
end
|
12
|
+
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'active_record/relation/predicate_builder'
|
2
|
+
require 'active_record/relation/predicate_builder/array_handler'
|
3
|
+
|
4
|
+
require 'active_support/concern'
|
5
|
+
|
6
|
+
module ActiveRecord
|
7
|
+
class PredicateBuilder
|
8
|
+
module ArrayHandlerPatch
|
9
|
+
extend ActiveSupport::Concern
|
10
|
+
|
11
|
+
included do
|
12
|
+
def call_with_feature(attribute, value)
|
13
|
+
engine = attribute.relation.engine
|
14
|
+
column = engine.connection.schema_cache.columns(attribute.relation.name).detect{ |col| col.name.to_s == attribute.name.to_s }
|
15
|
+
if column.array
|
16
|
+
attribute.eq(value)
|
17
|
+
else
|
18
|
+
call_without_feature(attribute, value)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
alias_method_chain(:call, :feature)
|
23
|
+
end
|
24
|
+
|
25
|
+
module ClassMethods
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
ActiveRecord::PredicateBuilder::ArrayHandler.send(:include, ActiveRecord::PredicateBuilder::ArrayHandlerPatch)
|
@@ -1,72 +1,117 @@
|
|
1
|
-
require 'active_record/relation/query_methods'
|
2
|
-
|
3
1
|
module ActiveRecord
|
4
2
|
module QueryMethods
|
5
3
|
class WhereChain
|
6
|
-
def overlap(opts)
|
7
|
-
opts
|
8
|
-
@scope = @scope.where(arel_table[key].overlap(value))
|
9
|
-
end
|
10
|
-
@scope
|
4
|
+
def overlap(opts, *rest)
|
5
|
+
substitute_comparisons(opts, rest, Arel::Nodes::Overlap, 'overlap')
|
11
6
|
end
|
12
7
|
|
13
|
-
def contained_within(opts)
|
14
|
-
opts
|
15
|
-
|
16
|
-
end
|
8
|
+
def contained_within(opts, *rest)
|
9
|
+
substitute_comparisons(opts, rest, Arel::Nodes::ContainedWithin, 'contained_within')
|
10
|
+
end
|
17
11
|
|
18
|
-
|
12
|
+
def contained_within_or_equals(opts, *rest)
|
13
|
+
substitute_comparisons(opts, rest, Arel::Nodes::ContainedWithinEquals, 'contained_within_or_equals')
|
19
14
|
end
|
20
15
|
|
21
|
-
def
|
22
|
-
opts
|
23
|
-
|
16
|
+
def contains(opts, *rest)
|
17
|
+
build_where_chain(opts, rest) do |rel|
|
18
|
+
case rel
|
19
|
+
when Arel::Nodes::In, Arel::Nodes::Equality
|
20
|
+
column = left_column(rel) || column_from_association(rel)
|
21
|
+
equality_for_hstore(rel) if column.type == :hstore
|
22
|
+
|
23
|
+
if column.type == :hstore
|
24
|
+
Arel::Nodes::ContainsHStore.new(rel.left, rel.right)
|
25
|
+
elsif column.respond_to?(:array) && column.array
|
26
|
+
Arel::Nodes::ContainsArray.new(rel.left, rel.right)
|
27
|
+
else
|
28
|
+
Arel::Nodes::ContainsINet.new(rel.left, rel.right)
|
29
|
+
end
|
30
|
+
else
|
31
|
+
raise ArgumentError, "Invalid argument for .where.overlap(), got #{rel.class}"
|
32
|
+
end
|
24
33
|
end
|
34
|
+
end
|
25
35
|
|
26
|
-
|
36
|
+
def contains_or_equals(opts, *rest)
|
37
|
+
substitute_comparisons(opts, rest, Arel::Nodes::ContainsEquals, 'contains_or_equals')
|
27
38
|
end
|
28
39
|
|
29
|
-
def
|
30
|
-
opts
|
31
|
-
|
32
|
-
end
|
40
|
+
def any(opts, *rest)
|
41
|
+
equality_to_function('ANY', opts, rest)
|
42
|
+
end
|
33
43
|
|
34
|
-
|
44
|
+
def all(opts, *rest)
|
45
|
+
equality_to_function('ALL', opts, rest)
|
35
46
|
end
|
36
47
|
|
37
|
-
|
38
|
-
opts.each do |key, value|
|
39
|
-
@scope = @scope.where(arel_table[key].contains_or_equals(value))
|
40
|
-
end
|
48
|
+
private
|
41
49
|
|
42
|
-
|
50
|
+
def find_column(col, rel)
|
51
|
+
col.name == rel.left.name.to_s || col.name == rel.left.relation.name.to_s
|
43
52
|
end
|
44
53
|
|
45
|
-
def
|
46
|
-
|
54
|
+
def left_column(rel)
|
55
|
+
rel.left.relation.engine.columns.find { |col| find_column(col, rel) }
|
47
56
|
end
|
48
57
|
|
49
|
-
def
|
50
|
-
|
58
|
+
def column_from_association(rel)
|
59
|
+
if assoc = assoc_from_related_table(rel)
|
60
|
+
column = assoc.klass.columns.find { |col| find_column(col, rel) }
|
61
|
+
end
|
51
62
|
end
|
52
63
|
|
53
|
-
|
64
|
+
def equality_for_hstore(rel)
|
65
|
+
new_right_name = rel.left.name.to_s
|
66
|
+
if rel.right.respond_to?(:val)
|
67
|
+
return if rel.right.val.is_a?(Hash)
|
68
|
+
rel.right = Arel::Nodes.build_quoted({new_right_name => rel.right.val},
|
69
|
+
rel.left)
|
70
|
+
else
|
71
|
+
return if rel.right.is_a?(Hash)
|
72
|
+
rel.right = {new_right_name => rel.right }
|
73
|
+
end
|
74
|
+
|
75
|
+
rel.left.name = rel.left.relation.name.to_sym
|
76
|
+
rel.left.relation.name = rel.left.relation.engine.table_name
|
77
|
+
end
|
54
78
|
|
55
|
-
def
|
56
|
-
|
79
|
+
def assoc_from_related_table(rel)
|
80
|
+
engine = rel.left.relation.engine
|
81
|
+
engine.reflect_on_association(rel.left.relation.name.to_sym) ||
|
82
|
+
engine.reflect_on_association(rel.left.relation.name.singularize.to_sym)
|
57
83
|
end
|
58
84
|
|
59
|
-
def
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
85
|
+
def build_where_chain(opts, rest, &block)
|
86
|
+
where_value = @scope.send(:build_where, opts, rest).map(&block)
|
87
|
+
@scope.references!(PredicateBuilder.references(opts)) if Hash === opts
|
88
|
+
@scope.where_values += where_value
|
89
|
+
@scope
|
90
|
+
end
|
91
|
+
|
92
|
+
def substitute_comparisons(opts, rest, arel_node_class, method)
|
93
|
+
build_where_chain(opts, rest) do |rel|
|
94
|
+
case rel
|
95
|
+
when Arel::Nodes::In, Arel::Nodes::Equality
|
96
|
+
arel_node_class.new(rel.left, rel.right)
|
97
|
+
else
|
98
|
+
raise ArgumentError, "Invalid argument for .where.#{method}(), got #{rel.class}"
|
99
|
+
end
|
64
100
|
end
|
101
|
+
end
|
65
102
|
|
66
|
-
|
103
|
+
def equality_to_function(function_name, opts, rest)
|
104
|
+
build_where_chain(opts, rest) do |rel|
|
105
|
+
case rel
|
106
|
+
when Arel::Nodes::Equality
|
107
|
+
Arel::Nodes::Equality.new(rel.right, Arel::Nodes::NamedFunction.new(function_name, [rel.left]))
|
108
|
+
else
|
109
|
+
raise ArgumentError, "Invalid argument for .where.#{funciton_name.downcase}(), got #{rel.class}"
|
110
|
+
end
|
111
|
+
end
|
67
112
|
end
|
68
113
|
end
|
69
|
-
|
114
|
+
|
70
115
|
# WithChain objects act as placeholder for queries in which #with does not have any parameter.
|
71
116
|
# In this case, #with must be chained with #recursive to return a new relation.
|
72
117
|
class WithChain
|
@@ -175,15 +220,15 @@ module ActiveRecord
|
|
175
220
|
def build_rank(arel, rank_window_options)
|
176
221
|
unless arel.projections.count == 1 && Arel::Nodes::Count === arel.projections.first
|
177
222
|
rank_window = case rank_window_options
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
223
|
+
when :order
|
224
|
+
arel.orders
|
225
|
+
when Symbol
|
226
|
+
table[rank_window_options].asc
|
227
|
+
when Hash
|
228
|
+
rank_window_options.map { |field, dir| table[field].send(dir) }
|
229
|
+
else
|
230
|
+
Arel::Nodes::SqlLiteral.new "(#{rank_window_options})"
|
231
|
+
end
|
187
232
|
|
188
233
|
unless rank_window.blank?
|
189
234
|
rank_node = Arel::Nodes::SqlLiteral.new 'rank()'
|
data/lib/postgres_ext/arel.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
|
-
## TODO: Change to ~> 4.2.0 on gem release
|
2
1
|
|
3
|
-
gdep = Gem::Dependency.new('activerecord', '~> 4.2.0
|
2
|
+
gdep = Gem::Dependency.new('activerecord', '~> 4.2.0')
|
4
3
|
ar_version_cutoff = gdep.matching_specs.sort_by(&:version).last
|
5
4
|
|
6
5
|
require 'postgres_ext/arel/nodes'
|
@@ -4,7 +4,7 @@ module Arel
|
|
4
4
|
module Visitors
|
5
5
|
class PostgreSQL
|
6
6
|
private
|
7
|
-
|
7
|
+
|
8
8
|
def visit_Array o, a
|
9
9
|
column = a.relation.engine.connection.schema_cache.columns(a.relation.name).find { |col| col.name == a.name.to_s } if a
|
10
10
|
if column && column.respond_to?(:array) && column.array
|
@@ -13,6 +13,16 @@ module Arel
|
|
13
13
|
o.empty? ? 'NULL' : o.map { |x| visit x }.join(', ')
|
14
14
|
end
|
15
15
|
end
|
16
|
+
|
17
|
+
def visit_Arel_Nodes_Contains o, a = nil
|
18
|
+
left_column = o.left.relation.engine.columns.find { |col| col.name == o.left.name.to_s }
|
19
|
+
|
20
|
+
if left_column && (left_column.type == :hstore || (left_column.respond_to?(:array) && left_column.array))
|
21
|
+
"#{visit o.left, a} @> #{visit o.right, o.left}"
|
22
|
+
else
|
23
|
+
"#{visit o.left, a} >> #{visit o.right, o.left}"
|
24
|
+
end
|
25
|
+
end
|
16
26
|
|
17
27
|
def visit_Arel_Nodes_ContainedWithin o, a = nil
|
18
28
|
"#{visit o.left, a} << #{visit o.right, o.left}"
|
@@ -22,14 +32,16 @@ module Arel
|
|
22
32
|
"#{visit o.left, a} <<= #{visit o.right, o.left}"
|
23
33
|
end
|
24
34
|
|
25
|
-
def
|
26
|
-
|
35
|
+
def visit_Arel_Nodes_ContainsArray o, a = nil
|
36
|
+
"#{visit o.left, a} @> #{visit o.right, o.left}"
|
37
|
+
end
|
27
38
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
39
|
+
def visit_Arel_Nodes_ContainsHStore o, a = nil
|
40
|
+
"#{visit o.left, a} @> #{visit o.right, o.left}"
|
41
|
+
end
|
42
|
+
|
43
|
+
def visit_Arel_Nodes_ContainsINet o, a = nil
|
44
|
+
"#{visit o.left, a} >> #{visit o.right, o.left}"
|
33
45
|
end
|
34
46
|
|
35
47
|
def visit_Arel_Nodes_ContainsEquals o, a = nil
|
@@ -4,7 +4,7 @@ module Arel
|
|
4
4
|
module Visitors
|
5
5
|
class PostgreSQL
|
6
6
|
private
|
7
|
-
|
7
|
+
|
8
8
|
def visit_Arel_Nodes_ContainedWithin o, collector
|
9
9
|
infix_value o, collector, " << "
|
10
10
|
end
|
@@ -14,15 +14,29 @@ module Arel
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def visit_Arel_Nodes_Contains o, collector
|
17
|
-
left_column = o.left.relation.engine.columns.find
|
17
|
+
left_column = o.left.relation.engine.columns.find do |col|
|
18
|
+
col.name == o.left.name.to_s || col.name == o.left.relation.name.to_s
|
19
|
+
end
|
18
20
|
|
19
21
|
if left_column && (left_column.type == :hstore || (left_column.respond_to?(:array) && left_column.array))
|
20
|
-
infix_value o, collector, " @> "
|
22
|
+
infix_value o, collector, " @> "
|
21
23
|
else
|
22
24
|
infix_value o, collector, " >> "
|
23
25
|
end
|
24
26
|
end
|
25
27
|
|
28
|
+
def visit_Arel_Nodes_ContainsINet o, collector
|
29
|
+
infix_value o, collector, " >> "
|
30
|
+
end
|
31
|
+
|
32
|
+
def visit_Arel_Nodes_ContainsHStore o, collector
|
33
|
+
infix_value o, collector, " @> "
|
34
|
+
end
|
35
|
+
|
36
|
+
def visit_Arel_Nodes_ContainsArray o, collector
|
37
|
+
infix_value o, collector, " @> "
|
38
|
+
end
|
39
|
+
|
26
40
|
def visit_Arel_Nodes_ContainsEquals o, collector
|
27
41
|
infix_value o, collector, " >>= "
|
28
42
|
end
|
@@ -6,15 +6,27 @@ module Arel
|
|
6
6
|
end
|
7
7
|
|
8
8
|
class ContainedWithinEquals < Arel::Nodes::Binary
|
9
|
-
def operator;
|
9
|
+
def operator; :"<<=" end
|
10
10
|
end
|
11
11
|
|
12
12
|
class Contains < Arel::Nodes::Binary
|
13
13
|
def operator; :>> end
|
14
14
|
end
|
15
|
+
|
16
|
+
class ContainsINet < Arel::Nodes::Binary
|
17
|
+
def operator; :>> end
|
18
|
+
end
|
15
19
|
|
20
|
+
class ContainsHStore < Arel::Nodes::Binary
|
21
|
+
def operator; :"@>" end
|
22
|
+
end
|
23
|
+
|
24
|
+
class ContainsArray < Arel::Nodes::Binary
|
25
|
+
def operator; :"@>" end
|
26
|
+
end
|
27
|
+
|
16
28
|
class ContainsEquals < Arel::Nodes::Binary
|
17
|
-
def operator;
|
29
|
+
def operator; :">>=" end
|
18
30
|
end
|
19
31
|
end
|
20
32
|
end
|
data/lib/postgres_ext/version.rb
CHANGED
data/postgres_ext.gemspec
CHANGED
@@ -29,6 +29,6 @@ Gem::Specification.new do |gem|
|
|
29
29
|
if RUBY_PLATFORM =~ /java/
|
30
30
|
gem.add_development_dependency 'activerecord-jdbcpostgresql-adapter', '1.3.0.beta2'
|
31
31
|
else
|
32
|
-
gem.add_development_dependency 'pg', '~> 0.13
|
32
|
+
gem.add_development_dependency 'pg', '~> 0.13'
|
33
33
|
end
|
34
34
|
end
|
@@ -15,9 +15,8 @@ describe 'Array queries' do
|
|
15
15
|
|
16
16
|
describe '.where(joins: { array_column: [] })' do
|
17
17
|
it 'returns an array string instead of IN ()' do
|
18
|
-
skip
|
19
18
|
query = Person.joins(:hm_tags).where(tags: { categories: ['working'] }).to_sql
|
20
|
-
query.must_match
|
19
|
+
query.must_match %r{\"tags\"\.\"categories\" = '\{"?working"?\}'}
|
21
20
|
end
|
22
21
|
end
|
23
22
|
|
@@ -33,6 +32,11 @@ describe 'Array queries' do
|
|
33
32
|
query.must_match overlap_regex
|
34
33
|
query.must_match equality_regex
|
35
34
|
end
|
35
|
+
|
36
|
+
it 'works on joins' do
|
37
|
+
query = Person.joins(:hm_tags).where.overlap(tags: { categories: ['working'] }).to_sql
|
38
|
+
query.must_match %r{\"tags\"\.\"categories\" && '\{"?working"?\}'}
|
39
|
+
end
|
36
40
|
end
|
37
41
|
|
38
42
|
|
@@ -41,16 +41,27 @@ describe 'Contains queries' do
|
|
41
41
|
query.to_sql.must_match contains_array_regex
|
42
42
|
end
|
43
43
|
|
44
|
-
it 'generates the appropriate where clause for
|
44
|
+
it 'generates the appropriate where clause for hstore columns' do
|
45
45
|
query = Person.where.contains(data: { nickname: 'Dan' })
|
46
46
|
query.to_sql.must_match contains_hstore_regex
|
47
47
|
end
|
48
48
|
|
49
|
+
it 'generates the appropriate where clause for hstore columns on joins' do
|
50
|
+
query = Tag.joins(:person).where.contains(people: { data: { nickname: 'Dan' } })
|
51
|
+
query.to_sql.must_match contains_hstore_regex
|
52
|
+
end
|
53
|
+
|
49
54
|
it 'allows chaining' do
|
50
55
|
query = Person.where.contains(:tag_ids => [1,2]).where(:tags => ['working']).to_sql
|
51
56
|
|
52
57
|
query.must_match contains_array_regex
|
53
58
|
query.must_match equality_regex
|
54
59
|
end
|
60
|
+
|
61
|
+
it 'generates the appropriate where clause for array columns on joins' do
|
62
|
+
query = Tag.joins(:person).where.contains(people: { tag_ids: [1,2] }).to_sql
|
63
|
+
|
64
|
+
query.must_match contains_array_regex
|
65
|
+
end
|
55
66
|
end
|
56
67
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: postgres_ext
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.4.0
|
4
|
+
version: 2.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dan McClain
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -142,14 +142,14 @@ dependencies:
|
|
142
142
|
requirements:
|
143
143
|
- - "~>"
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version: 0.13
|
145
|
+
version: '0.13'
|
146
146
|
type: :development
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
150
|
- - "~>"
|
151
151
|
- !ruby/object:Gem::Version
|
152
|
-
version: 0.13
|
152
|
+
version: '0.13'
|
153
153
|
description: Adds missing native PostgreSQL data types to ActiveRecord and convenient
|
154
154
|
querying extensions for ActiveRecord and Arel
|
155
155
|
email:
|
@@ -175,10 +175,12 @@ files:
|
|
175
175
|
- lib/postgres_ext/active_record/querying.rb
|
176
176
|
- lib/postgres_ext/active_record/relation.rb
|
177
177
|
- lib/postgres_ext/active_record/relation/predicate_builder.rb
|
178
|
+
- lib/postgres_ext/active_record/relation/predicate_builder/array_handler.rb
|
178
179
|
- lib/postgres_ext/active_record/relation/query_methods.rb
|
179
180
|
- lib/postgres_ext/arel.rb
|
180
181
|
- lib/postgres_ext/arel/4.1/predications.rb
|
181
182
|
- lib/postgres_ext/arel/4.1/visitors.rb
|
183
|
+
- lib/postgres_ext/arel/4.1/visitors/depth_first.rb
|
182
184
|
- lib/postgres_ext/arel/4.1/visitors/postgresql.rb
|
183
185
|
- lib/postgres_ext/arel/4.2/predications.rb
|
184
186
|
- lib/postgres_ext/arel/4.2/visitors.rb
|
@@ -211,12 +213,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
211
213
|
version: '0'
|
212
214
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
213
215
|
requirements:
|
214
|
-
- - "
|
216
|
+
- - ">="
|
215
217
|
- !ruby/object:Gem::Version
|
216
|
-
version:
|
218
|
+
version: '0'
|
217
219
|
requirements: []
|
218
220
|
rubyforge_project:
|
219
|
-
rubygems_version: 2.
|
221
|
+
rubygems_version: 2.4.5
|
220
222
|
signing_key:
|
221
223
|
specification_version: 4
|
222
224
|
summary: Extends ActiveRecord to handle native PostgreSQL data types
|