ransack 2.1.1 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +13 -1
- data/CHANGELOG.md +24 -0
- data/Gemfile +4 -12
- data/README.md +5 -3
- data/lib/ransack.rb +1 -0
- data/lib/ransack/adapters/active_record/context.rb +40 -12
- data/lib/ransack/adapters/active_record/ransack/constants.rb +5 -2
- data/lib/ransack/adapters/active_record/ransack/nodes/condition.rb +1 -1
- data/lib/ransack/adapters/active_record/ransack/translate.rb +1 -1
- data/lib/ransack/constants.rb +1 -0
- data/lib/ransack/context.rb +19 -18
- data/lib/ransack/helpers/form_helper.rb +1 -1
- data/lib/ransack/locale/az.yml +1 -1
- data/lib/ransack/locale/ca.yml +70 -0
- data/lib/ransack/locale/es.yml +22 -22
- data/lib/ransack/locale/fa.yml +70 -0
- data/lib/ransack/locale/fi.yml +71 -0
- data/lib/ransack/translate.rb +115 -115
- data/lib/ransack/version.rb +1 -1
- data/{lib → polyamorous/lib}/polyamorous.rb +7 -3
- data/{lib → polyamorous/lib}/polyamorous/activerecord_5.0_ruby_2/join_association.rb +0 -0
- data/{lib → polyamorous/lib}/polyamorous/activerecord_5.0_ruby_2/join_dependency.rb +0 -0
- data/{lib → polyamorous/lib}/polyamorous/activerecord_5.1_ruby_2/join_association.rb +1 -2
- data/{lib → polyamorous/lib}/polyamorous/activerecord_5.1_ruby_2/join_dependency.rb +0 -0
- data/{lib → polyamorous/lib}/polyamorous/activerecord_5.2.0_ruby_2/join_association.rb +2 -3
- data/{lib → polyamorous/lib}/polyamorous/activerecord_5.2.0_ruby_2/join_dependency.rb +1 -2
- data/polyamorous/lib/polyamorous/activerecord_5.2.0_ruby_2/reflection.rb +12 -0
- data/{lib → polyamorous/lib}/polyamorous/activerecord_5.2.1_ruby_2/join_association.rb +0 -9
- data/{lib → polyamorous/lib}/polyamorous/activerecord_5.2.1_ruby_2/join_dependency.rb +25 -1
- data/polyamorous/lib/polyamorous/activerecord_5.2.1_ruby_2/reflection.rb +2 -0
- data/polyamorous/lib/polyamorous/activerecord_6.0_ruby_2/join_association.rb +2 -0
- data/polyamorous/lib/polyamorous/activerecord_6.0_ruby_2/join_dependency.rb +81 -0
- data/polyamorous/lib/polyamorous/activerecord_6.0_ruby_2/reflection.rb +2 -0
- data/polyamorous/lib/polyamorous/activerecord_6.1_ruby_2/join_association.rb +2 -0
- data/polyamorous/lib/polyamorous/activerecord_6.1_ruby_2/join_dependency.rb +2 -0
- data/polyamorous/lib/polyamorous/activerecord_6.1_ruby_2/reflection.rb +2 -0
- data/{lib → polyamorous/lib}/polyamorous/join.rb +0 -0
- data/{lib → polyamorous/lib}/polyamorous/swapping_reflection_class.rb +0 -0
- data/{lib → polyamorous/lib}/polyamorous/tree_node.rb +0 -0
- data/polyamorous/lib/polyamorous/version.rb +3 -0
- data/polyamorous/polyamorous.gemspec +35 -0
- data/ransack.gemspec +3 -3
- data/spec/helpers/polyamorous_helper.rb +6 -2
- data/spec/ransack/adapters/active_record/context_spec.rb +41 -0
- data/spec/ransack/join_dependency_spec.rb +18 -7
- data/spec/ransack/predicate_spec.rb +16 -2
- data/spec/ransack/search_spec.rb +26 -2
- data/spec/spec_helper.rb +1 -0
- data/spec/support/schema.rb +6 -0
- metadata +58 -18
data/lib/ransack/version.rb
CHANGED
@@ -12,13 +12,17 @@ if defined?(::ActiveRecord)
|
|
12
12
|
require 'polyamorous/swapping_reflection_class'
|
13
13
|
|
14
14
|
ar_version = ::ActiveRecord::VERSION::STRING[0,3]
|
15
|
-
ar_version = ::ActiveRecord::VERSION::STRING[0,5] if ar_version >= "5.2"
|
16
|
-
ar_version = "5.2.1" if ::ActiveRecord::VERSION::STRING >= "5.2.1"
|
17
|
-
|
15
|
+
ar_version = ::ActiveRecord::VERSION::STRING[0,5] if ar_version >= "5.2" && ::ActiveRecord.version < ::Gem::Version.new("6.0")
|
16
|
+
ar_version = "5.2.1" if ::ActiveRecord::VERSION::STRING >= "5.2.1" && ::ActiveRecord.version < ::Gem::Version.new("6.0")
|
18
17
|
%w(join_association join_dependency).each do |file|
|
19
18
|
require "polyamorous/activerecord_#{ar_version}_ruby_2/#{file}"
|
20
19
|
end
|
21
20
|
|
21
|
+
if ar_version >= "5.2.0"
|
22
|
+
require "polyamorous/activerecord_#{ar_version}_ruby_2/reflection.rb"
|
23
|
+
::ActiveRecord::Reflection::AbstractReflection.send(:prepend, Polyamorous::ReflectionExtensions)
|
24
|
+
end
|
25
|
+
|
22
26
|
Polyamorous::JoinDependency.send(:prepend, Polyamorous::JoinDependencyExtensions)
|
23
27
|
Polyamorous::JoinDependency.singleton_class.send(:prepend, Polyamorous::JoinDependencyExtensions::ClassMethods)
|
24
28
|
Polyamorous::JoinAssociation.send(:prepend, Polyamorous::JoinAssociationExtensions)
|
File without changes
|
File without changes
|
@@ -7,8 +7,7 @@ module Polyamorous
|
|
7
7
|
base.class_eval { attr_reader :join_type }
|
8
8
|
end
|
9
9
|
|
10
|
-
def initialize(reflection, children, polymorphic_class = nil,
|
11
|
-
join_type = Arel::Nodes::InnerJoin)
|
10
|
+
def initialize(reflection, children, polymorphic_class = nil, join_type = Arel::Nodes::InnerJoin)
|
12
11
|
@join_type = join_type
|
13
12
|
if polymorphic_class && ::ActiveRecord::Base > polymorphic_class
|
14
13
|
swapping_reflection_klass(reflection, polymorphic_class) do |reflection|
|
File without changes
|
@@ -7,8 +7,7 @@ module Polyamorous
|
|
7
7
|
base.class_eval { attr_reader :join_type }
|
8
8
|
end
|
9
9
|
|
10
|
-
def initialize(reflection, children, alias_tracker, polymorphic_class = nil,
|
11
|
-
join_type = Arel::Nodes::InnerJoin)
|
10
|
+
def initialize(reflection, children, alias_tracker, polymorphic_class = nil, join_type = Arel::Nodes::InnerJoin)
|
12
11
|
@join_type = join_type
|
13
12
|
if polymorphic_class && ::ActiveRecord::Base > polymorphic_class
|
14
13
|
swapping_reflection_klass(reflection, polymorphic_class) do |reflection|
|
@@ -23,7 +22,7 @@ module Polyamorous
|
|
23
22
|
def build_constraint(klass, table, key, foreign_table, foreign_key)
|
24
23
|
if reflection.polymorphic?
|
25
24
|
super(klass, table, key, foreign_table, foreign_key)
|
26
|
-
|
25
|
+
.and(foreign_table[reflection.foreign_type].eq(reflection.klass.name))
|
27
26
|
else
|
28
27
|
super(klass, table, key, foreign_table, foreign_key)
|
29
28
|
end
|
@@ -38,7 +38,6 @@ module Polyamorous
|
|
38
38
|
# passing an additional argument, `join_type`, to #join_constraints.
|
39
39
|
#
|
40
40
|
def join_constraints(outer_joins, join_type)
|
41
|
-
@alias_tracker = alias_tracker
|
42
41
|
joins = join_root.children.flat_map { |child|
|
43
42
|
if join_type == Arel::Nodes::OuterJoin
|
44
43
|
make_polyamorous_left_outer_joins join_root, child
|
@@ -48,7 +47,7 @@ module Polyamorous
|
|
48
47
|
}
|
49
48
|
|
50
49
|
joins.concat outer_joins.flat_map { |oj|
|
51
|
-
if join_root.match? oj.join_root
|
50
|
+
if join_root.match?(oj.join_root) && join_root.table.name == oj.join_root.table.name
|
52
51
|
walk(join_root, oj.join_root)
|
53
52
|
else
|
54
53
|
oj.join_root.children.flat_map { |child|
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Polyamorous
|
2
|
+
module ReflectionExtensions
|
3
|
+
def build_join_constraint(table, foreign_table)
|
4
|
+
if polymorphic?
|
5
|
+
super(table, foreign_table)
|
6
|
+
.and(foreign_table[foreign_type].eq(klass.name))
|
7
|
+
else
|
8
|
+
super(table, foreign_table)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -18,14 +18,5 @@ module Polyamorous
|
|
18
18
|
super(reflection, children)
|
19
19
|
end
|
20
20
|
end
|
21
|
-
|
22
|
-
def build_constraint(klass, table, key, foreign_table, foreign_key)
|
23
|
-
if reflection.polymorphic?
|
24
|
-
super(klass, table, key, foreign_table, foreign_key)
|
25
|
-
.and(foreign_table[reflection.foreign_type].eq(reflection.klass.name))
|
26
|
-
else
|
27
|
-
super(klass, table, key, foreign_table, foreign_key)
|
28
|
-
end
|
29
|
-
end
|
30
21
|
end
|
31
22
|
end
|
@@ -3,7 +3,6 @@
|
|
3
3
|
module Polyamorous
|
4
4
|
module JoinDependencyExtensions
|
5
5
|
# Replaces ActiveRecord::Associations::JoinDependency#build
|
6
|
-
#
|
7
6
|
def build(associations, base_klass)
|
8
7
|
associations.map do |name, right|
|
9
8
|
if name.is_a? Join
|
@@ -30,6 +29,31 @@ module Polyamorous
|
|
30
29
|
end
|
31
30
|
end
|
32
31
|
|
32
|
+
def join_constraints(joins_to_add, join_type, alias_tracker)
|
33
|
+
@alias_tracker = alias_tracker
|
34
|
+
|
35
|
+
construct_tables!(join_root)
|
36
|
+
joins = make_join_constraints(join_root, join_type)
|
37
|
+
|
38
|
+
joins.concat joins_to_add.flat_map { |oj|
|
39
|
+
construct_tables!(oj.join_root)
|
40
|
+
if join_root.match?(oj.join_root) && join_root.table.name == oj.join_root.table.name
|
41
|
+
walk join_root, oj.join_root
|
42
|
+
else
|
43
|
+
make_join_constraints(oj.join_root, join_type)
|
44
|
+
end
|
45
|
+
}
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
def make_constraints(parent, child, join_type = Arel::Nodes::OuterJoin)
|
50
|
+
foreign_table = parent.table
|
51
|
+
foreign_klass = parent.base_klass
|
52
|
+
join_type = child.join_type || join_type if join_type == Arel::Nodes::InnerJoin
|
53
|
+
joins = child.join_constraints(foreign_table, foreign_klass, join_type, alias_tracker)
|
54
|
+
joins.concat child.children.flat_map { |c| make_constraints(child, c, join_type) }
|
55
|
+
end
|
56
|
+
|
33
57
|
module ClassMethods
|
34
58
|
# Prepended before ActiveRecord::Associations::JoinDependency#walk_tree
|
35
59
|
#
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# active_record_6.0_ruby_2/join_dependency.rb
|
2
|
+
|
3
|
+
module Polyamorous
|
4
|
+
module JoinDependencyExtensions
|
5
|
+
# Replaces ActiveRecord::Associations::JoinDependency#build
|
6
|
+
def build(associations, base_klass)
|
7
|
+
associations.map do |name, right|
|
8
|
+
if name.is_a? Join
|
9
|
+
reflection = find_reflection base_klass, name.name
|
10
|
+
reflection.check_validity!
|
11
|
+
reflection.check_eager_loadable!
|
12
|
+
|
13
|
+
klass = if reflection.polymorphic?
|
14
|
+
name.klass || base_klass
|
15
|
+
else
|
16
|
+
reflection.klass
|
17
|
+
end
|
18
|
+
JoinAssociation.new(reflection, build(right, klass), name.klass, name.type)
|
19
|
+
else
|
20
|
+
reflection = find_reflection base_klass, name
|
21
|
+
reflection.check_validity!
|
22
|
+
reflection.check_eager_loadable!
|
23
|
+
|
24
|
+
if reflection.polymorphic?
|
25
|
+
raise ActiveRecord::EagerLoadPolymorphicError.new(reflection)
|
26
|
+
end
|
27
|
+
JoinAssociation.new(reflection, build(right, reflection.klass))
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def join_constraints(joins_to_add, alias_tracker)
|
33
|
+
@alias_tracker = alias_tracker
|
34
|
+
|
35
|
+
construct_tables!(join_root)
|
36
|
+
joins = make_join_constraints(join_root, join_type)
|
37
|
+
|
38
|
+
joins.concat joins_to_add.flat_map { |oj|
|
39
|
+
construct_tables!(oj.join_root)
|
40
|
+
if join_root.match?(oj.join_root) && join_root.table.name == oj.join_root.table.name
|
41
|
+
walk join_root, oj.join_root, oj.join_type
|
42
|
+
else
|
43
|
+
make_join_constraints(oj.join_root, oj.join_type)
|
44
|
+
end
|
45
|
+
}
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
def make_constraints(parent, child, join_type = Arel::Nodes::OuterJoin)
|
50
|
+
foreign_table = parent.table
|
51
|
+
foreign_klass = parent.base_klass
|
52
|
+
join_type = child.join_type || join_type if join_type == Arel::Nodes::InnerJoin
|
53
|
+
joins = child.join_constraints(foreign_table, foreign_klass, join_type, alias_tracker)
|
54
|
+
joins.concat child.children.flat_map { |c| make_constraints(child, c, join_type) }
|
55
|
+
end
|
56
|
+
|
57
|
+
module ClassMethods
|
58
|
+
# Prepended before ActiveRecord::Associations::JoinDependency#walk_tree
|
59
|
+
#
|
60
|
+
def walk_tree(associations, hash)
|
61
|
+
case associations
|
62
|
+
when TreeNode
|
63
|
+
associations.add_to_tree(hash)
|
64
|
+
when Hash
|
65
|
+
associations.each do |k, v|
|
66
|
+
cache =
|
67
|
+
if TreeNode === k
|
68
|
+
k.add_to_tree(hash)
|
69
|
+
else
|
70
|
+
hash[k] ||= {}
|
71
|
+
end
|
72
|
+
walk_tree(v, cache)
|
73
|
+
end
|
74
|
+
else
|
75
|
+
super(associations, hash)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "polyamorous/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "polyamorous"
|
7
|
+
s.version = Polyamorous::VERSION
|
8
|
+
s.authors = ["Ernie Miller", "Ryan Bigg", "Jon Atack", "Xiang Li"]
|
9
|
+
s.email = ["ernie@erniemiller.org", "radarlistener@gmail.com", "jonnyatack@gmail.com", "bigxiang@gmail.com"]
|
10
|
+
s.homepage = "https://github.com/activerecord-hackery/ransack/tree/master/polyamorous"
|
11
|
+
s.license = "MIT"
|
12
|
+
s.summary = %q{
|
13
|
+
Loves/is loved by polymorphic belongs_to associations, Ransack, Squeel, MetaSearch...
|
14
|
+
}
|
15
|
+
s.description = %q{
|
16
|
+
This is just an extraction from Ransack/Squeel. You probably don't want to use this
|
17
|
+
directly. It extends ActiveRecord's associations to support polymorphic belongs_to
|
18
|
+
associations.
|
19
|
+
}
|
20
|
+
|
21
|
+
s.add_dependency 'activerecord', '>= 5.0'
|
22
|
+
s.add_development_dependency 'rspec', '~> 3'
|
23
|
+
s.add_development_dependency 'machinist', '~> 1.0.6'
|
24
|
+
s.add_development_dependency 'faker', '~> 1.6.5'
|
25
|
+
s.add_development_dependency 'sqlite3', '~> 1.3.3'
|
26
|
+
|
27
|
+
s.files = `git ls-files`.split("\n")
|
28
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
29
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
30
|
+
s.require_paths = ["lib"]
|
31
|
+
|
32
|
+
# specify any dependencies here; for example:
|
33
|
+
# s.add_development_dependency "rspec"
|
34
|
+
# s.add_runtime_dependency "rest-client"
|
35
|
+
end
|
data/ransack.gemspec
CHANGED
@@ -14,19 +14,19 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.required_ruby_version = '>= 1.9'
|
15
15
|
s.license = 'MIT'
|
16
16
|
|
17
|
-
s.rubyforge_project = "ransack"
|
18
|
-
|
19
17
|
s.add_dependency 'actionpack', '>= 5.0'
|
20
18
|
s.add_dependency 'activerecord', '>= 5.0'
|
21
19
|
s.add_dependency 'activesupport', '>= 5.0'
|
22
20
|
s.add_dependency 'i18n'
|
21
|
+
s.add_dependency 'polyamorous', Ransack::VERSION.to_s
|
23
22
|
s.add_development_dependency 'rspec', '~> 3'
|
24
23
|
s.add_development_dependency 'machinist', '~> 1.0.6'
|
25
24
|
s.add_development_dependency 'faker', '~> 0.9.5'
|
26
|
-
s.add_development_dependency 'sqlite3', '~> 1.3.3'
|
25
|
+
s.add_development_dependency 'sqlite3', ::Gem::Version.new(ENV['RAILS'].gsub(/^v/, '')) >= ::Gem::Version.new('6-0-stable') ? '~> 1.4.1' : '~> 1.3.3'
|
27
26
|
s.add_development_dependency 'pg', '~> 0.21'
|
28
27
|
s.add_development_dependency 'mysql2', '0.3.20'
|
29
28
|
s.add_development_dependency 'pry', '0.10'
|
29
|
+
s.add_development_dependency 'byebug'
|
30
30
|
|
31
31
|
s.files = `git ls-files`.split("\n")
|
32
32
|
|
@@ -3,11 +3,15 @@ module PolyamorousHelper
|
|
3
3
|
Polyamorous::JoinAssociation.new reflection, children, klass
|
4
4
|
end
|
5
5
|
|
6
|
-
if ActiveRecord::
|
6
|
+
if ActiveRecord.version >= ::Gem::Version.new("6.0.0.rc1")
|
7
|
+
def new_join_dependency(klass, associations = {})
|
8
|
+
Polyamorous::JoinDependency.new klass, klass.arel_table, associations, Polyamorous::InnerJoin
|
9
|
+
end
|
10
|
+
elsif ActiveRecord.version > ::Gem::Version.new("5.2.0")
|
7
11
|
def new_join_dependency(klass, associations = {})
|
8
12
|
Polyamorous::JoinDependency.new klass, klass.arel_table, associations
|
9
13
|
end
|
10
|
-
elsif ActiveRecord
|
14
|
+
elsif ActiveRecord.version == ::Gem::Version.new("5.2.0")
|
11
15
|
def new_join_dependency(klass, associations = {})
|
12
16
|
alias_tracker = ::ActiveRecord::Associations::AliasTracker.create(klass.connection, klass.table_name, [])
|
13
17
|
Polyamorous::JoinDependency.new klass, klass.arel_table, associations, alias_tracker
|
@@ -40,6 +40,47 @@ module Ransack
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
+
describe '#build_correlated_subquery' do
|
44
|
+
it 'build correlated subquery for Root STI model' do
|
45
|
+
search = Search.new(Person, { articles_title_not_eq: 'some_title' }, context: subject)
|
46
|
+
attribute = search.conditions.first.attributes.first
|
47
|
+
constraints = subject.build_correlated_subquery(attribute.parent).constraints
|
48
|
+
constraint = constraints.first
|
49
|
+
|
50
|
+
expect(constraints.length).to eql 1
|
51
|
+
expect(constraint.left.name).to eql 'person_id'
|
52
|
+
expect(constraint.left.relation.name).to eql 'articles'
|
53
|
+
expect(constraint.right.name).to eql 'id'
|
54
|
+
expect(constraint.right.relation.name).to eql 'people'
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'build correlated subquery for Child STI model when predicate is not_eq' do
|
58
|
+
search = Search.new(Person, { story_articles_title_not_eq: 'some_title' }, context: subject)
|
59
|
+
attribute = search.conditions.first.attributes.first
|
60
|
+
constraints = subject.build_correlated_subquery(attribute.parent).constraints
|
61
|
+
constraint = constraints.first
|
62
|
+
|
63
|
+
expect(constraints.length).to eql 1
|
64
|
+
expect(constraint.left.relation.name).to eql 'articles'
|
65
|
+
expect(constraint.left.name).to eql 'person_id'
|
66
|
+
expect(constraint.right.relation.name).to eql 'people'
|
67
|
+
expect(constraint.right.name).to eql 'id'
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'build correlated subquery for Child STI model when predicate is eq' do
|
71
|
+
search = Search.new(Person, { story_articles_title_not_eq: 'some_title' }, context: subject)
|
72
|
+
attribute = search.conditions.first.attributes.first
|
73
|
+
constraints = subject.build_correlated_subquery(attribute.parent).constraints
|
74
|
+
constraint = constraints.first
|
75
|
+
|
76
|
+
expect(constraints.length).to eql 1
|
77
|
+
expect(constraint.left.relation.name).to eql 'articles'
|
78
|
+
expect(constraint.left.name).to eql 'person_id'
|
79
|
+
expect(constraint.right.relation.name).to eql 'people'
|
80
|
+
expect(constraint.right.name).to eql 'id'
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
43
84
|
describe 'sharing context across searches' do
|
44
85
|
let(:shared_context) { Context.for(Person) }
|
45
86
|
|
@@ -8,8 +8,8 @@ module Polyamorous
|
|
8
8
|
|
9
9
|
specify { expect(subject.send(:join_root).drop(1).size)
|
10
10
|
.to eq(2) }
|
11
|
-
specify { expect(subject.send(:join_root).drop(1).map(&:join_type))
|
12
|
-
.to
|
11
|
+
specify { expect(subject.send(:join_root).drop(1).map(&:join_type).uniq)
|
12
|
+
.to eq [Polyamorous::InnerJoin] }
|
13
13
|
end
|
14
14
|
|
15
15
|
context 'with has_many :through association' do
|
@@ -38,8 +38,8 @@ module Polyamorous
|
|
38
38
|
.to eq 2 }
|
39
39
|
specify { expect(subject.send(:join_root).drop(1).map(&:join_type))
|
40
40
|
.to eq [Polyamorous::OuterJoin, Polyamorous::OuterJoin] }
|
41
|
-
specify { expect(subject.send(:join_root).drop(1).map(&:join_type))
|
42
|
-
.to
|
41
|
+
specify { expect(subject.send(:join_root).drop(1).map(&:join_type).uniq)
|
42
|
+
.to eq [Polyamorous::OuterJoin] }
|
43
43
|
end
|
44
44
|
|
45
45
|
context 'with polymorphic belongs_to join' do
|
@@ -59,8 +59,19 @@ module Polyamorous
|
|
59
59
|
|
60
60
|
specify { expect(subject.send(:join_root).drop(1).size)
|
61
61
|
.to eq 2 }
|
62
|
-
specify { expect(subject.send(:join_root).drop(1).map(&:join_type))
|
63
|
-
.to
|
62
|
+
specify { expect(subject.send(:join_root).drop(1).map(&:join_type).uniq)
|
63
|
+
.to eq [Polyamorous::InnerJoin] }
|
64
|
+
specify { expect(subject.send(:join_root).drop(1).first.table_name)
|
65
|
+
.to eq 'people' }
|
66
|
+
specify { expect(subject.send(:join_root).drop(1)[1].table_name)
|
67
|
+
.to eq 'comments' }
|
68
|
+
end
|
69
|
+
|
70
|
+
context 'with polymorphic belongs_to join and nested join' do
|
71
|
+
subject { new_join_dependency Note,
|
72
|
+
new_join(:notable, :outer, Person) => :comments }
|
73
|
+
specify { expect(subject.send(:join_root).drop(1).size).to eq 2 }
|
74
|
+
specify { expect(subject.send(:join_root).drop(1).map(&:join_type)).to eq [Polyamorous::OuterJoin, Polyamorous::InnerJoin] }
|
64
75
|
specify { expect(subject.send(:join_root).drop(1).first.table_name)
|
65
76
|
.to eq 'people' }
|
66
77
|
specify { expect(subject.send(:join_root).drop(1)[1].table_name)
|
@@ -68,7 +79,7 @@ module Polyamorous
|
|
68
79
|
end
|
69
80
|
|
70
81
|
context '#left_outer_join in Rails 5 overrides join type specified',
|
71
|
-
if: ActiveRecord::VERSION::MAJOR >= 5 && ActiveRecord::VERSION::MINOR < 2 do
|
82
|
+
if: ActiveRecord::VERSION::MAJOR >= 5 && ActiveRecord::VERSION::MAJOR < 6 && ActiveRecord::VERSION::MINOR < 2 do
|
72
83
|
|
73
84
|
let(:join_type_class) do
|
74
85
|
new_join_dependency(
|