ransack 2.0.0 → 2.0.1
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 +7 -0
- data/README.md +3 -2
- data/lib/polyamorous/activerecord_5.1_ruby_2/join_association.rb +0 -7
- data/lib/polyamorous/activerecord_5.1_ruby_2/join_dependency.rb +0 -18
- data/lib/polyamorous/activerecord_5.2.0_ruby_2/join_association.rb +0 -7
- data/lib/polyamorous/activerecord_5.2.0_ruby_2/join_dependency.rb +0 -18
- data/lib/polyamorous/activerecord_5.2.1_ruby_2/join_association.rb +0 -7
- data/lib/polyamorous/activerecord_5.2.1_ruby_2/join_dependency.rb +0 -18
- data/lib/ransack/adapters/active_record/context.rb +1 -1
- data/lib/ransack/locale/ru.yml +70 -0
- data/lib/ransack/version.rb +1 -1
- data/spec/ransack/join_association_spec.rb +3 -24
- data/spec/ransack/join_dependency_spec.rb +16 -27
- data/spec/ransack/search_spec.rb +5 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1e44db6020449735b694bd18943195f6e7cdd3597a8dc776d22a54114b4b9273
|
4
|
+
data.tar.gz: cdcb6ef8b863873fcaa7c2067cb20636c4e856e27f431488978201a310023f45
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ded22ffb680b2a358ee72ab348b8f9debc7f2c927c878ec5a4ad872b552b715e561e9b0aac188d874c67cce70f6463d62b3be7655e46900a706214d58d69fa88
|
7
|
+
data.tar.gz: 6f45114a54ef6f83cbd99780ba432069cf4111c4b9d2294141f238526655edc1cb035422705565389e4c60f75666716d8fd201887f7ca9fd90c92314bbb3b9e6
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,13 @@
|
|
2
2
|
|
3
3
|
## Unreleased
|
4
4
|
|
5
|
+
## Version 2.0.1 - 2018-08-18
|
6
|
+
|
7
|
+
* Don't return association if table is nil
|
8
|
+
PR [952](https://github.com/activerecord-hackery/ransack/pull/952)
|
9
|
+
|
10
|
+
*Christian Gregg*
|
11
|
+
|
5
12
|
## Version 2.0.0 - 2018-08-09
|
6
13
|
|
7
14
|
* Add support for Active Record 5.2.1
|
data/README.md
CHANGED
@@ -27,11 +27,12 @@ instead.
|
|
27
27
|
If you're viewing this at
|
28
28
|
[github.com/activerecord-hackery/ransack](https://github.com/activerecord-hackery/ransack),
|
29
29
|
you're reading the documentation for the master branch with the latest features.
|
30
|
-
[View documentation for the last release (
|
30
|
+
[View documentation for the last release (2.0.0).](https://github.com/activerecord-hackery/ransack/tree/v2.0.0)
|
31
31
|
|
32
32
|
## Getting started
|
33
33
|
|
34
|
-
Ransack is compatible with Rails
|
34
|
+
Ransack is compatible with Rails 5.0, 5.1 and 5.2 on Ruby 2.2 and later.
|
35
|
+
If you are using Rails <5.0 use the 1.8 line of Ransack.
|
35
36
|
If you are using Ruby 1.8 or an earlier JRuby and run into compatibility
|
36
37
|
issues, you can use an earlier version of Ransack, say, up to 1.3.0.
|
37
38
|
|
@@ -20,13 +20,6 @@ module Polyamorous
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
# Reference: https://github.com/rails/rails/commit/9b15db5
|
24
|
-
# NOTE: Not sure we still need it?
|
25
|
-
#
|
26
|
-
def ==(other)
|
27
|
-
base_klass == other.base_klass
|
28
|
-
end
|
29
|
-
|
30
23
|
def build_constraint(klass, table, key, foreign_table, foreign_key)
|
31
24
|
if reflection.polymorphic?
|
32
25
|
super(klass, table, key, foreign_table, foreign_key)
|
@@ -30,24 +30,6 @@ module Polyamorous
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
-
def find_join_association_respecting_polymorphism(reflection, parent, klass)
|
34
|
-
if association = parent.children.find { |j| j.reflection == reflection }
|
35
|
-
unless reflection.polymorphic?
|
36
|
-
association
|
37
|
-
else
|
38
|
-
association if association.base_klass == klass
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def build_join_association_respecting_polymorphism(reflection, parent, klass)
|
44
|
-
if reflection.polymorphic? && klass
|
45
|
-
JoinAssociation.new(reflection, self, klass)
|
46
|
-
else
|
47
|
-
JoinAssociation.new(reflection, self)
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
33
|
# Replaces ActiveRecord::Associations::JoinDependency#join_constraints
|
52
34
|
#
|
53
35
|
# This internal method was changed in Rails 5.0 by commit
|
@@ -20,13 +20,6 @@ module Polyamorous
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
# Reference: https://github.com/rails/rails/commit/9b15db5
|
24
|
-
# NOTE: Not sure we still need it?
|
25
|
-
#
|
26
|
-
def ==(other)
|
27
|
-
base_klass == other.base_klass
|
28
|
-
end
|
29
|
-
|
30
23
|
def build_constraint(klass, table, key, foreign_table, foreign_key)
|
31
24
|
if reflection.polymorphic?
|
32
25
|
super(klass, table, key, foreign_table, foreign_key)
|
@@ -30,24 +30,6 @@ module Polyamorous
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
-
def find_join_association_respecting_polymorphism(reflection, parent, klass)
|
34
|
-
if association = parent.children.find { |j| j.reflection == reflection }
|
35
|
-
unless reflection.polymorphic?
|
36
|
-
association
|
37
|
-
else
|
38
|
-
association if association.base_klass == klass
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def build_join_association_respecting_polymorphism(reflection, parent, klass)
|
44
|
-
if reflection.polymorphic? && klass
|
45
|
-
JoinAssociation.new(reflection, self, alias_tracker, klass)
|
46
|
-
else
|
47
|
-
JoinAssociation.new(reflection, self, alias_tracker)
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
33
|
# Replaces ActiveRecord::Associations::JoinDependency#join_constraints
|
52
34
|
#
|
53
35
|
# This internal method was changed in Rails 5.0 by commit
|
@@ -19,13 +19,6 @@ module Polyamorous
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
# Reference: https://github.com/rails/rails/commit/9b15db5
|
23
|
-
# NOTE: Not sure we still need it?
|
24
|
-
#
|
25
|
-
def ==(other)
|
26
|
-
base_klass == other.base_klass
|
27
|
-
end
|
28
|
-
|
29
22
|
def build_constraint(klass, table, key, foreign_table, foreign_key)
|
30
23
|
if reflection.polymorphic?
|
31
24
|
super(klass, table, key, foreign_table, foreign_key)
|
@@ -30,24 +30,6 @@ module Polyamorous
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
-
def find_join_association_respecting_polymorphism(reflection, parent, klass)
|
34
|
-
if association = parent.children.find { |j| j.reflection == reflection }
|
35
|
-
unless reflection.polymorphic?
|
36
|
-
association
|
37
|
-
else
|
38
|
-
association if association.base_klass == klass
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def build_join_association_respecting_polymorphism(reflection, parent, klass)
|
44
|
-
if reflection.polymorphic? && klass
|
45
|
-
JoinAssociation.new(reflection, self, klass)
|
46
|
-
else
|
47
|
-
JoinAssociation.new(reflection, self)
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
33
|
module ClassMethods
|
52
34
|
# Prepended before ActiveRecord::Associations::JoinDependency#walk_tree
|
53
35
|
#
|
@@ -268,7 +268,7 @@ module Ransack
|
|
268
268
|
|
269
269
|
def find_association(name, parent = @base, klass = nil)
|
270
270
|
@join_dependency.instance_variable_get(:@join_root).children.detect do |assoc|
|
271
|
-
assoc.reflection.name == name &&
|
271
|
+
assoc.reflection.name == name && assoc.table &&
|
272
272
|
(@associations_pot.empty? || @associations_pot[assoc] == parent || !@associations_pot.key?(assoc)) &&
|
273
273
|
(!klass || assoc.reflection.klass == klass)
|
274
274
|
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
ru:
|
2
|
+
ransack:
|
3
|
+
search: "Поиск"
|
4
|
+
predicate: "predicate"
|
5
|
+
and: "и"
|
6
|
+
or: "или"
|
7
|
+
any: "любое"
|
8
|
+
all: "все"
|
9
|
+
combinator: "combinator"
|
10
|
+
attribute: "аттрибут"
|
11
|
+
value: "значение"
|
12
|
+
condition: "условие"
|
13
|
+
sort: "сортировка"
|
14
|
+
asc: "по возрастанию"
|
15
|
+
desc: "по убыванию"
|
16
|
+
predicates:
|
17
|
+
eq: "равный"
|
18
|
+
eq_any: "равный любому"
|
19
|
+
eq_all: "равный всем"
|
20
|
+
not_eq: "не равный любому"
|
21
|
+
not_eq_any: "не равный любому"
|
22
|
+
not_eq_all: "не равный всем"
|
23
|
+
matches: "совпадение"
|
24
|
+
matches_any: "совпадение любому"
|
25
|
+
matches_all: "совпадение всем"
|
26
|
+
does_not_match: "не совпадение"
|
27
|
+
does_not_match_any: "не совпадение любому"
|
28
|
+
does_not_match_all: "не совпадение всем"
|
29
|
+
lt: "меньше чем"
|
30
|
+
lt_any: "меньше чем любое"
|
31
|
+
lt_all: "меньше чем все"
|
32
|
+
lteq: "меньше чем или равен"
|
33
|
+
lteq_any: "меньше чем или равен любому"
|
34
|
+
lteq_all: "меньше чем или равен всем"
|
35
|
+
gt: "больше чем"
|
36
|
+
gt_any: "больше чем любое"
|
37
|
+
gt_all: "больше чем все"
|
38
|
+
gteq: "больше чем или равен"
|
39
|
+
gteq_any: "больше чем или равен любому"
|
40
|
+
gteq_all: "больше чем или равен всем"
|
41
|
+
in: "в"
|
42
|
+
in_any: "в любом из"
|
43
|
+
in_all: "во всех"
|
44
|
+
not_in: "нет в"
|
45
|
+
not_in_any: "не в каком из"
|
46
|
+
not_in_all: "нет во всех"
|
47
|
+
cont: "содержит"
|
48
|
+
cont_any: "содержит любое"
|
49
|
+
cont_all: "содержит все"
|
50
|
+
not_cont: "не содержит"
|
51
|
+
not_cont_any: "не содержит любое"
|
52
|
+
not_cont_all: "не содержит все"
|
53
|
+
start: "начинается с"
|
54
|
+
start_any: "начинается с любого"
|
55
|
+
start_all: "начинается с всего"
|
56
|
+
not_start: "не начинается с"
|
57
|
+
not_start_any: "не начинается с любого"
|
58
|
+
not_start_all: "не начинается со всего"
|
59
|
+
end: "кончается с"
|
60
|
+
end_any: "кончается с любого"
|
61
|
+
end_all: "кончается со всего"
|
62
|
+
not_end: "не кончается с"
|
63
|
+
not_end_any: "не кончается с любого"
|
64
|
+
not_end_all: "не кончается со всего"
|
65
|
+
'true': "верно"
|
66
|
+
'false': "не верно"
|
67
|
+
present: "настоящее"
|
68
|
+
blank: "пусто"
|
69
|
+
'null': "нулевой"
|
70
|
+
not_null: "не нулевой"
|
data/lib/ransack/version.rb
CHANGED
@@ -3,34 +3,13 @@ require 'spec_helper'
|
|
3
3
|
module Polyamorous
|
4
4
|
describe JoinAssociation do
|
5
5
|
|
6
|
-
join_base, join_association_args, polymorphic = [:join_root, 'parent.children', 'reflection.options[:polymorphic]']
|
7
|
-
|
8
6
|
let(:join_dependency) { new_join_dependency Note, {} }
|
9
7
|
let(:reflection) { Note.reflect_on_association(:notable) }
|
10
|
-
let(:parent) { join_dependency.send(
|
8
|
+
let(:parent) { join_dependency.send(:join_root) }
|
11
9
|
let(:join_association) {
|
12
|
-
|
13
|
-
}
|
14
|
-
|
15
|
-
subject {
|
16
|
-
join_dependency.build_join_association_respecting_polymorphism(
|
17
|
-
reflection, parent, Person
|
18
|
-
)
|
10
|
+
new_join_association(reflection, parent.children, Article)
|
19
11
|
}
|
20
12
|
|
21
|
-
it 'respects polymorphism on equality test' do
|
22
|
-
expect(subject).to eq(
|
23
|
-
join_dependency.build_join_association_respecting_polymorphism(
|
24
|
-
reflection, parent, Person
|
25
|
-
)
|
26
|
-
)
|
27
|
-
expect(subject).not_to eq(
|
28
|
-
join_dependency.build_join_association_respecting_polymorphism(
|
29
|
-
reflection, parent, Article
|
30
|
-
)
|
31
|
-
)
|
32
|
-
end
|
33
|
-
|
34
13
|
it 'leaves the orginal reflection intact for thread safety' do
|
35
14
|
reflection.instance_variable_set(:@klass, Article)
|
36
15
|
join_association
|
@@ -43,7 +22,7 @@ module Polyamorous
|
|
43
22
|
end
|
44
23
|
|
45
24
|
it 'sets the polymorphic option to true after initializing' do
|
46
|
-
expect(join_association.
|
25
|
+
expect(join_association.reflection.options[:polymorphic]).to be true
|
47
26
|
end
|
48
27
|
end
|
49
28
|
end
|
@@ -3,32 +3,30 @@ require 'spec_helper'
|
|
3
3
|
module Polyamorous
|
4
4
|
describe JoinDependency do
|
5
5
|
|
6
|
-
method, join_associations, join_base = :instance_eval, 'join_root.drop(1)', :join_root
|
7
|
-
|
8
6
|
context 'with symbol joins' do
|
9
7
|
subject { new_join_dependency Person, articles: :comments }
|
10
8
|
|
11
|
-
specify { expect(subject.send(
|
9
|
+
specify { expect(subject.send(:join_root).drop(1).size)
|
12
10
|
.to eq(2) }
|
13
|
-
specify { expect(subject.send(
|
11
|
+
specify { expect(subject.send(:join_root).drop(1).map(&:join_type))
|
14
12
|
.to be_all { Polyamorous::InnerJoin } }
|
15
13
|
end
|
16
14
|
|
17
15
|
context 'with has_many :through association' do
|
18
16
|
subject { new_join_dependency Person, :authored_article_comments }
|
19
17
|
|
20
|
-
specify { expect(subject.send(
|
18
|
+
specify { expect(subject.send(:join_root).drop(1).size)
|
21
19
|
.to eq 1 }
|
22
|
-
specify { expect(subject.send(
|
20
|
+
specify { expect(subject.send(:join_root).drop(1).first.table_name)
|
23
21
|
.to eq 'comments' }
|
24
22
|
end
|
25
23
|
|
26
24
|
context 'with outer join' do
|
27
25
|
subject { new_join_dependency Person, new_join(:articles, :outer) }
|
28
26
|
|
29
|
-
specify { expect(subject.send(
|
27
|
+
specify { expect(subject.send(:join_root).drop(1).size)
|
30
28
|
.to eq 1 }
|
31
|
-
specify { expect(subject.send(
|
29
|
+
specify { expect(subject.send(:join_root).drop(1).first.join_type)
|
32
30
|
.to eq Polyamorous::OuterJoin }
|
33
31
|
end
|
34
32
|
|
@@ -36,45 +34,36 @@ module Polyamorous
|
|
36
34
|
subject { new_join_dependency Person,
|
37
35
|
new_join(:articles, :outer) => new_join(:comments, :outer) }
|
38
36
|
|
39
|
-
specify { expect(subject.send(
|
37
|
+
specify { expect(subject.send(:join_root).drop(1).size)
|
40
38
|
.to eq 2 }
|
41
|
-
specify { expect(subject.send(
|
39
|
+
specify { expect(subject.send(:join_root).drop(1).map(&:join_type))
|
42
40
|
.to eq [Polyamorous::OuterJoin, Polyamorous::OuterJoin] }
|
43
|
-
specify { expect(subject.send(
|
41
|
+
specify { expect(subject.send(:join_root).drop(1).map(&:join_type))
|
44
42
|
.to be_all { Polyamorous::OuterJoin } }
|
45
43
|
end
|
46
44
|
|
47
45
|
context 'with polymorphic belongs_to join' do
|
48
46
|
subject { new_join_dependency Note, new_join(:notable, :inner, Person) }
|
49
47
|
|
50
|
-
specify { expect(subject.send(
|
48
|
+
specify { expect(subject.send(:join_root).drop(1).size)
|
51
49
|
.to eq 1 }
|
52
|
-
specify { expect(subject.send(
|
50
|
+
specify { expect(subject.send(:join_root).drop(1).first.join_type)
|
53
51
|
.to eq Polyamorous::InnerJoin }
|
54
|
-
specify { expect(subject.send(
|
52
|
+
specify { expect(subject.send(:join_root).drop(1).first.table_name)
|
55
53
|
.to eq 'people' }
|
56
|
-
|
57
|
-
it 'finds a join association respecting polymorphism' do
|
58
|
-
parent = subject.send(join_base)
|
59
|
-
reflection = Note.reflect_on_association(:notable)
|
60
|
-
|
61
|
-
expect(subject.find_join_association_respecting_polymorphism(
|
62
|
-
reflection, parent, Person))
|
63
|
-
.to eq subject.send(method, join_associations).first
|
64
|
-
end
|
65
54
|
end
|
66
55
|
|
67
56
|
context 'with polymorphic belongs_to join and nested symbol join' do
|
68
57
|
subject { new_join_dependency Note,
|
69
58
|
new_join(:notable, :inner, Person) => :comments }
|
70
59
|
|
71
|
-
specify { expect(subject.send(
|
60
|
+
specify { expect(subject.send(:join_root).drop(1).size)
|
72
61
|
.to eq 2 }
|
73
|
-
specify { expect(subject.send(
|
62
|
+
specify { expect(subject.send(:join_root).drop(1).map(&:join_type))
|
74
63
|
.to be_all { Polyamorous::InnerJoin } }
|
75
|
-
specify { expect(subject.send(
|
64
|
+
specify { expect(subject.send(:join_root).drop(1).first.table_name)
|
76
65
|
.to eq 'people' }
|
77
|
-
specify { expect(subject.send(
|
66
|
+
specify { expect(subject.send(:join_root).drop(1)[1].table_name)
|
78
67
|
.to eq 'comments' }
|
79
68
|
end
|
80
69
|
|
data/spec/ransack/search_spec.rb
CHANGED
@@ -316,6 +316,11 @@ module Ransack
|
|
316
316
|
.to eq s.result(distinct: true).send(all_or_load)
|
317
317
|
end
|
318
318
|
|
319
|
+
it 'evaluates joins with belongs_to join' do
|
320
|
+
s = Person.joins(:parent).ransack(parent_name_eq: 'Ernie').result(distinct: true)
|
321
|
+
expect(s).to be_an ActiveRecord::Relation
|
322
|
+
end
|
323
|
+
|
319
324
|
private
|
320
325
|
|
321
326
|
def remove_quotes_and_backticks(str)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ransack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ernie Miller
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2018-08-
|
14
|
+
date: 2018-08-18 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: actionpack
|
@@ -229,6 +229,7 @@ files:
|
|
229
229
|
- lib/ransack/locale/nl.yml
|
230
230
|
- lib/ransack/locale/pt-BR.yml
|
231
231
|
- lib/ransack/locale/ro.yml
|
232
|
+
- lib/ransack/locale/ru.yml
|
232
233
|
- lib/ransack/locale/tr.yml
|
233
234
|
- lib/ransack/locale/zh-CN.yml
|
234
235
|
- lib/ransack/locale/zh-TW.yml
|