ransack 2.1.0 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +32 -22
  4. data/CHANGELOG.md +60 -1
  5. data/CONTRIBUTING.md +11 -6
  6. data/Gemfile +21 -17
  7. data/README.md +56 -29
  8. data/lib/polyamorous/{activerecord_5.2.1_ruby_2 → activerecord_5.2_ruby_2}/join_association.rb +2 -9
  9. data/lib/polyamorous/{activerecord_5.2.1_ruby_2 → activerecord_5.2_ruby_2}/join_dependency.rb +25 -3
  10. data/lib/polyamorous/activerecord_5.2_ruby_2/reflection.rb +11 -0
  11. data/lib/polyamorous/activerecord_6.0_ruby_2/join_association.rb +1 -0
  12. data/lib/polyamorous/activerecord_6.0_ruby_2/join_dependency.rb +80 -0
  13. data/lib/polyamorous/activerecord_6.0_ruby_2/reflection.rb +1 -0
  14. data/lib/polyamorous/activerecord_6.1_ruby_2/join_association.rb +74 -0
  15. data/lib/polyamorous/activerecord_6.1_ruby_2/join_dependency.rb +93 -0
  16. data/lib/polyamorous/activerecord_6.1_ruby_2/reflection.rb +1 -0
  17. data/lib/{polyamorous.rb → polyamorous/polyamorous.rb} +3 -3
  18. data/lib/ransack.rb +2 -2
  19. data/lib/ransack/adapters/active_record/base.rb +1 -0
  20. data/lib/ransack/adapters/active_record/context.rb +60 -68
  21. data/lib/ransack/adapters/active_record/ransack/constants.rb +17 -2
  22. data/lib/ransack/adapters/active_record/ransack/context.rb +2 -6
  23. data/lib/ransack/adapters/active_record/ransack/nodes/condition.rb +12 -5
  24. data/lib/ransack/adapters/active_record/ransack/translate.rb +1 -1
  25. data/lib/ransack/constants.rb +2 -3
  26. data/lib/ransack/context.rb +19 -18
  27. data/lib/ransack/helpers/form_builder.rb +5 -11
  28. data/lib/ransack/helpers/form_helper.rb +1 -1
  29. data/lib/ransack/locale/ar.yml +70 -0
  30. data/lib/ransack/locale/az.yml +1 -1
  31. data/lib/ransack/locale/ca.yml +70 -0
  32. data/lib/ransack/locale/es.yml +22 -22
  33. data/lib/ransack/locale/fa.yml +70 -0
  34. data/lib/ransack/locale/fi.yml +71 -0
  35. data/lib/ransack/locale/sk.yml +70 -0
  36. data/lib/ransack/locale/zh-CN.yml +12 -12
  37. data/lib/ransack/nodes/condition.rb +8 -0
  38. data/lib/ransack/nodes/grouping.rb +1 -1
  39. data/lib/ransack/predicate.rb +2 -1
  40. data/lib/ransack/search.rb +1 -0
  41. data/lib/ransack/translate.rb +115 -115
  42. data/lib/ransack/version.rb +1 -1
  43. data/ransack.gemspec +5 -21
  44. data/spec/helpers/polyamorous_helper.rb +3 -8
  45. data/spec/{ransack → polyamorous}/join_association_spec.rb +7 -0
  46. data/spec/{ransack → polyamorous}/join_dependency_spec.rb +18 -7
  47. data/spec/{ransack → polyamorous}/join_spec.rb +0 -0
  48. data/spec/ransack/adapters/active_record/base_spec.rb +8 -8
  49. data/spec/ransack/adapters/active_record/context_spec.rb +60 -17
  50. data/spec/ransack/helpers/form_helper_spec.rb +51 -51
  51. data/spec/ransack/predicate_spec.rb +54 -2
  52. data/spec/ransack/search_spec.rb +78 -13
  53. data/spec/spec_helper.rb +4 -0
  54. data/spec/support/schema.rb +13 -2
  55. metadata +29 -136
  56. data/lib/polyamorous/activerecord_5.0_ruby_2/join_association.rb +0 -2
  57. data/lib/polyamorous/activerecord_5.0_ruby_2/join_dependency.rb +0 -2
  58. data/lib/polyamorous/activerecord_5.1_ruby_2/join_association.rb +0 -32
  59. data/lib/polyamorous/activerecord_5.1_ruby_2/join_dependency.rb +0 -112
  60. data/lib/polyamorous/activerecord_5.2.0_ruby_2/join_association.rb +0 -32
  61. data/lib/polyamorous/activerecord_5.2.0_ruby_2/join_dependency.rb +0 -113
@@ -1,3 +1,3 @@
1
1
  module Ransack
2
- VERSION = '2.1.0'
2
+ VERSION = '2.4.0'
3
3
  end
@@ -11,31 +11,15 @@ Gem::Specification.new do |s|
11
11
  s.homepage = "https://github.com/activerecord-hackery/ransack"
12
12
  s.summary = %q{Object-based searching for Active Record and Mongoid (currently).}
13
13
  s.description = %q{Ransack is the successor to the MetaSearch gem. It improves and expands upon MetaSearch's functionality, but does not have a 100%-compatible API.}
14
- s.required_ruby_version = '>= 1.9'
14
+ s.required_ruby_version = '>= 2.3'
15
15
  s.license = 'MIT'
16
16
 
17
- s.rubyforge_project = "ransack"
18
-
19
- s.add_dependency 'actionpack', '>= 5.0'
20
- s.add_dependency 'activerecord', '>= 5.0'
21
- s.add_dependency 'activesupport', '>= 5.0'
17
+ s.add_dependency 'activerecord', '>= 5.2.4'
18
+ s.add_dependency 'activesupport', '>= 5.2.4'
22
19
  s.add_dependency 'i18n'
23
- s.add_development_dependency 'rspec', '~> 3'
24
- s.add_development_dependency 'machinist', '~> 1.0.6'
25
- s.add_development_dependency 'faker', '~> 0.9.5'
26
- s.add_development_dependency 'sqlite3', '~> 1.3.3'
27
- s.add_development_dependency 'pg', '~> 0.21'
28
- s.add_development_dependency 'mysql2', '0.3.20'
29
- s.add_development_dependency 'pry', '0.10'
30
20
 
31
21
  s.files = `git ls-files`.split("\n")
32
-
33
- s.test_files = `git ls-files -- {test,spec,features}/*`
34
- .split("\n")
35
-
36
- s.executables = `git ls-files -- bin/*`
37
- .split("\n")
38
- .map { |f| File.basename(f) }
39
-
22
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
23
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
40
24
  s.require_paths = ["lib"]
41
25
  end
@@ -3,18 +3,13 @@ module PolyamorousHelper
3
3
  Polyamorous::JoinAssociation.new reflection, children, klass
4
4
  end
5
5
 
6
- if ActiveRecord::VERSION::STRING > "5.2.0"
6
+ if ActiveRecord.version >= ::Gem::Version.new("6.0.0.rc1")
7
7
  def new_join_dependency(klass, associations = {})
8
- Polyamorous::JoinDependency.new klass, klass.arel_table, associations
9
- end
10
- elsif ActiveRecord::VERSION::STRING == "5.2.0"
11
- def new_join_dependency(klass, associations = {})
12
- alias_tracker = ::ActiveRecord::Associations::AliasTracker.create(klass.connection, klass.table_name, [])
13
- Polyamorous::JoinDependency.new klass, klass.arel_table, associations, alias_tracker
8
+ Polyamorous::JoinDependency.new klass, klass.arel_table, associations, Polyamorous::InnerJoin
14
9
  end
15
10
  else
16
11
  def new_join_dependency(klass, associations = {})
17
- Polyamorous::JoinDependency.new klass, associations, []
12
+ Polyamorous::JoinDependency.new klass, klass.arel_table, associations
18
13
  end
19
14
  end
20
15
 
@@ -10,6 +10,13 @@ module Polyamorous
10
10
  new_join_association(reflection, parent.children, Article)
11
11
  }
12
12
 
13
+ subject { new_join_association(reflection, parent.children, Person) }
14
+
15
+ it 'respects polymorphism on equality test' do
16
+ expect(subject).to eq new_join_association(reflection, parent.children, Person)
17
+ expect(subject).not_to eq new_join_association(reflection, parent.children, Article)
18
+ end
19
+
13
20
  it 'leaves the orginal reflection intact for thread safety' do
14
21
  reflection.instance_variable_set(:@klass, Article)
15
22
  join_association
@@ -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 be_all { Polyamorous::InnerJoin } }
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 be_all { Polyamorous::OuterJoin } }
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 be_all { Polyamorous::InnerJoin } }
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(
@@ -143,14 +143,12 @@ module Ransack
143
143
  it 'removes redundant joins from top query' do
144
144
  s = Article.ransack(tags_name_not_eq: "Fantasy")
145
145
  sql = s.result.to_sql
146
-
147
146
  expect(sql).to_not include('LEFT OUTER JOIN')
148
147
  end
149
148
 
150
149
  it 'handles != for single values' do
151
150
  s = Article.ransack(tags_name_not_eq: "Fantasy")
152
151
  articles = s.result.to_a
153
-
154
152
  expect(articles).to include marco
155
153
  expect(articles).to_not include arthur
156
154
  end
@@ -267,10 +265,12 @@ module Ransack
267
265
  # end
268
266
 
269
267
  it 'creates ransack attributes' do
268
+ person = Person.create!(name: 'Aric Smith')
269
+
270
270
  s = Person.ransack(reversed_name_eq: 'htimS cirA')
271
271
  expect(s.result.size).to eq(1)
272
272
 
273
- expect(s.result.first).to eq Person.where(name: 'Aric Smith').first
273
+ expect(s.result.first).to eq person
274
274
  end
275
275
 
276
276
  it 'can be accessed through associations' do
@@ -584,31 +584,31 @@ module Ransack
584
584
 
585
585
  context 'case insensitive sorting' do
586
586
  it 'allows sort by desc' do
587
- search = Person.search(sorts: ['name_case_insensitive desc'])
587
+ search = Person.ransack(sorts: ['name_case_insensitive desc'])
588
588
  expect(search.result.to_sql).to match /ORDER BY LOWER(.*) DESC/
589
589
  end
590
590
 
591
591
  it 'allows sort by asc' do
592
- search = Person.search(sorts: ['name_case_insensitive asc'])
592
+ search = Person.ransack(sorts: ['name_case_insensitive asc'])
593
593
  expect(search.result.to_sql).to match /ORDER BY LOWER(.*) ASC/
594
594
  end
595
595
  end
596
596
 
597
597
  context 'regular sorting' do
598
598
  it 'allows sort by desc' do
599
- search = Person.search(sorts: ['name desc'])
599
+ search = Person.ransack(sorts: ['name desc'])
600
600
  expect(search.result.to_sql).to match /ORDER BY .* DESC/
601
601
  end
602
602
 
603
603
  it 'allows sort by asc' do
604
- search = Person.search(sorts: ['name asc'])
604
+ search = Person.ransack(sorts: ['name asc'])
605
605
  expect(search.result.to_sql).to match /ORDER BY .* ASC/
606
606
  end
607
607
  end
608
608
 
609
609
  context 'sorting by a scope' do
610
610
  it 'applies the correct scope' do
611
- search = Person.search(sorts: ['reverse_name asc'])
611
+ search = Person.ransack(sorts: ['reverse_name asc'])
612
612
  expect(search.result.to_sql).to include("ORDER BY REVERSE(name) ASC")
613
613
  end
614
614
  end
@@ -40,6 +40,66 @@ 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
+
83
+ it 'build correlated subquery for multiple conditions (default scope)' do
84
+ search = Search.new(Person, { comments_body_not_eq: 'some_title'})
85
+
86
+ # Was
87
+ # SELECT "people".* FROM "people" WHERE "people"."id" NOT IN (
88
+ # SELECT "comments"."disabled" FROM "comments"
89
+ # WHERE "comments"."disabled" = "people"."id"
90
+ # AND NOT ("comments"."body" != 'some_title')
91
+ # ) ORDER BY "people"."id" DESC
92
+ # Should Be
93
+ # SELECT "people".* FROM "people" WHERE "people"."id" NOT IN (
94
+ # SELECT "comments"."person_id" FROM "comments"
95
+ # WHERE "comments"."person_id" = "people"."id"
96
+ # AND NOT ("comments"."body" != 'some_title')
97
+ # ) ORDER BY "people"."id" DESC
98
+
99
+ expect(search.result.to_sql).to match /.comments.\..person_id. = .people.\..id./
100
+ end
101
+ end
102
+
43
103
  describe 'sharing context across searches' do
44
104
  let(:shared_context) { Context.for(Person) }
45
105
 
@@ -50,23 +110,6 @@ module Ransack
50
110
  context: shared_context)
51
111
  end
52
112
 
53
- describe '#join_associations', if: AR_version <= '4.0' do
54
- it 'returns dependent join associations for all searches run
55
- against the context' do
56
- parents, children = shared_context.join_associations
57
-
58
- expect(children.aliased_table_name).to eq "children_people"
59
- expect(parents.aliased_table_name).to eq "parents_people"
60
- end
61
-
62
- it 'can be rejoined to execute a valid query' do
63
- parents, children = shared_context.join_associations
64
-
65
- expect { Person.joins(parents).joins(children).to_a }
66
- .to_not raise_error
67
- end
68
- end
69
-
70
113
  describe '#join_sources' do
71
114
  it 'returns dependent arel join nodes for all searches run against
72
115
  the context' do
@@ -25,7 +25,7 @@ module Ransack
25
25
  describe '#sort_link with default search_key' do
26
26
  subject { @controller.view_context
27
27
  .sort_link(
28
- [:main_app, Person.search(sorts: ['name desc'])],
28
+ [:main_app, Person.ransack(sorts: ['name desc'])],
29
29
  :name,
30
30
  controller: 'people'
31
31
  )
@@ -38,7 +38,7 @@ module Ransack
38
38
  describe '#sort_url with default search_key' do
39
39
  subject { @controller.view_context
40
40
  .sort_url(
41
- [:main_app, Person.search(sorts: ['name desc'])],
41
+ [:main_app, Person.ransack(sorts: ['name desc'])],
42
42
  :name,
43
43
  controller: 'people'
44
44
  )
@@ -49,7 +49,7 @@ module Ransack
49
49
  describe '#sort_link with default search_key defined as symbol' do
50
50
  subject { @controller.view_context
51
51
  .sort_link(
52
- Person.search({ sorts: ['name desc'] }, search_key: :people_search),
52
+ Person.ransack({ sorts: ['name desc'] }, search_key: :people_search),
53
53
  :name, controller: 'people'
54
54
  )
55
55
  }
@@ -59,7 +59,7 @@ module Ransack
59
59
  describe '#sort_url with default search_key defined as symbol' do
60
60
  subject { @controller.view_context
61
61
  .sort_url(
62
- Person.search({ sorts: ['name desc'] }, search_key: :people_search),
62
+ Person.ransack({ sorts: ['name desc'] }, search_key: :people_search),
63
63
  :name, controller: 'people'
64
64
  )
65
65
  }
@@ -69,7 +69,7 @@ module Ransack
69
69
  describe '#sort_link desc through association table defined as symbol' do
70
70
  subject { @controller.view_context
71
71
  .sort_link(
72
- Person.search({ sorts: 'comments_body asc' }),
72
+ Person.ransack({ sorts: 'comments_body asc' }),
73
73
  :comments_body,
74
74
  controller: 'people'
75
75
  )
@@ -82,7 +82,7 @@ module Ransack
82
82
  describe '#sort_url desc through association table defined as symbol' do
83
83
  subject { @controller.view_context
84
84
  .sort_url(
85
- Person.search({ sorts: 'comments_body asc' }),
85
+ Person.ransack({ sorts: 'comments_body asc' }),
86
86
  :comments_body,
87
87
  controller: 'people'
88
88
  )
@@ -93,7 +93,7 @@ module Ransack
93
93
  describe '#sort_link through association table defined as a string' do
94
94
  subject { @controller.view_context
95
95
  .sort_link(
96
- Person.search({ sorts: 'comments.body desc' }),
96
+ Person.ransack({ sorts: 'comments.body desc' }),
97
97
  'comments.body',
98
98
  controller: 'people'
99
99
  )
@@ -106,7 +106,7 @@ module Ransack
106
106
  describe '#sort_url through association table defined as a string' do
107
107
  subject { @controller.view_context
108
108
  .sort_url(
109
- Person.search({ sorts: 'comments.body desc' }),
109
+ Person.ransack({ sorts: 'comments.body desc' }),
110
110
  'comments.body',
111
111
  controller: 'people'
112
112
  )
@@ -119,7 +119,7 @@ module Ransack
119
119
  specify {
120
120
  expect { @controller.view_context
121
121
  .sort_link(
122
- Person.search(@controller.view_context.params[:q]),
122
+ Person.ransack(@controller.view_context.params[:q]),
123
123
  :name,
124
124
  controller: 'people'
125
125
  )
@@ -132,7 +132,7 @@ module Ransack
132
132
  specify {
133
133
  expect { @controller.view_context
134
134
  .sort_url(
135
- Person.search(@controller.view_context.params[:q]),
135
+ Person.ransack(@controller.view_context.params[:q]),
136
136
  :name,
137
137
  controller: 'people'
138
138
  )
@@ -143,7 +143,7 @@ module Ransack
143
143
  describe '#sort_link with search_key defined as a string' do
144
144
  subject { @controller.view_context
145
145
  .sort_link(
146
- Person.search(
146
+ Person.ransack(
147
147
  { sorts: ['name desc'] }, search_key: 'people_search'
148
148
  ),
149
149
  :name,
@@ -156,7 +156,7 @@ module Ransack
156
156
  describe '#sort_link with default_order defined with a string key' do
157
157
  subject { @controller.view_context
158
158
  .sort_link(
159
- [:main_app, Person.search()],
159
+ [:main_app, Person.ransack()],
160
160
  :name,
161
161
  controller: 'people',
162
162
  default_order: 'desc'
@@ -168,7 +168,7 @@ module Ransack
168
168
  describe '#sort_url with default_order defined with a string key' do
169
169
  subject { @controller.view_context
170
170
  .sort_url(
171
- [:main_app, Person.search()],
171
+ [:main_app, Person.ransack()],
172
172
  :name,
173
173
  controller: 'people',
174
174
  default_order: 'desc'
@@ -180,7 +180,7 @@ module Ransack
180
180
  describe '#sort_link with multiple search_keys defined as an array' do
181
181
  subject { @controller.view_context
182
182
  .sort_link(
183
- [:main_app, Person.search(sorts: ['name desc', 'email asc'])],
183
+ [:main_app, Person.ransack(sorts: ['name desc', 'email asc'])],
184
184
  :name, [:name, 'email DESC'],
185
185
  controller: 'people'
186
186
  )
@@ -196,7 +196,7 @@ module Ransack
196
196
  describe '#sort_url with multiple search_keys defined as an array' do
197
197
  subject { @controller.view_context
198
198
  .sort_url(
199
- [:main_app, Person.search(sorts: ['name desc', 'email asc'])],
199
+ [:main_app, Person.ransack(sorts: ['name desc', 'email asc'])],
200
200
  :name, [:name, 'email DESC'],
201
201
  controller: 'people'
202
202
  )
@@ -210,7 +210,7 @@ module Ransack
210
210
  describe '#sort_link with multiple search_keys does not break on nil values & ignores them' do
211
211
  subject { @controller.view_context
212
212
  .sort_link(
213
- [:main_app, Person.search(sorts: ['name desc', nil, 'email', nil])],
213
+ [:main_app, Person.ransack(sorts: ['name desc', nil, 'email', nil])],
214
214
  :name, [nil, :name, nil, 'email DESC', nil],
215
215
  controller: 'people'
216
216
  )
@@ -226,7 +226,7 @@ module Ransack
226
226
  describe '#sort_url with multiple search_keys does not break on nil values & ignores them' do
227
227
  subject { @controller.view_context
228
228
  .sort_url(
229
- [:main_app, Person.search(sorts: ['name desc', nil, 'email', nil])],
229
+ [:main_app, Person.ransack(sorts: ['name desc', nil, 'email', nil])],
230
230
  :name, [nil, :name, nil, 'email DESC', nil],
231
231
  controller: 'people'
232
232
  )
@@ -240,7 +240,7 @@ module Ransack
240
240
  describe '#sort_link with multiple search_keys should allow a label to be specified' do
241
241
  subject { @controller.view_context
242
242
  .sort_link(
243
- [:main_app, Person.search(sorts: ['name desc', 'email asc'])],
243
+ [:main_app, Person.ransack(sorts: ['name desc', 'email asc'])],
244
244
  :name, [:name, 'email DESC'],
245
245
  'Property Name',
246
246
  controller: 'people'
@@ -252,7 +252,7 @@ module Ransack
252
252
  describe '#sort_link with multiple search_keys should flip multiple fields specified without a direction' do
253
253
  subject { @controller.view_context
254
254
  .sort_link(
255
- [:main_app, Person.search(sorts: ['name desc', 'email asc'])],
255
+ [:main_app, Person.ransack(sorts: ['name desc', 'email asc'])],
256
256
  :name, [:name, :email],
257
257
  controller: 'people'
258
258
  )
@@ -268,7 +268,7 @@ module Ransack
268
268
  describe '#sort_url with multiple search_keys should flip multiple fields specified without a direction' do
269
269
  subject { @controller.view_context
270
270
  .sort_url(
271
- [:main_app, Person.search(sorts: ['name desc', 'email asc'])],
271
+ [:main_app, Person.ransack(sorts: ['name desc', 'email asc'])],
272
272
  :name, [:name, :email],
273
273
  controller: 'people'
274
274
  )
@@ -282,7 +282,7 @@ module Ransack
282
282
  describe '#sort_link with multiple search_keys and default_order specified as a string' do
283
283
  subject { @controller.view_context
284
284
  .sort_link(
285
- [:main_app, Person.search()],
285
+ [:main_app, Person.ransack()],
286
286
  :name, [:name, :email],
287
287
  controller: 'people',
288
288
  default_order: 'desc'
@@ -299,7 +299,7 @@ module Ransack
299
299
  describe '#sort_url with multiple search_keys and default_order specified as a string' do
300
300
  subject { @controller.view_context
301
301
  .sort_url(
302
- [:main_app, Person.search()],
302
+ [:main_app, Person.ransack()],
303
303
  :name, [:name, :email],
304
304
  controller: 'people',
305
305
  default_order: 'desc'
@@ -314,7 +314,7 @@ module Ransack
314
314
  describe '#sort_link with multiple search_keys and default_order specified as a symbol' do
315
315
  subject { @controller.view_context
316
316
  .sort_link(
317
- [:main_app, Person.search()],
317
+ [:main_app, Person.ransack()],
318
318
  :name, [:name, :email],
319
319
  controller: 'people',
320
320
  default_order: :desc
@@ -331,7 +331,7 @@ module Ransack
331
331
  describe '#sort_url with multiple search_keys and default_order specified as a symbol' do
332
332
  subject { @controller.view_context
333
333
  .sort_url(
334
- [:main_app, Person.search()],
334
+ [:main_app, Person.ransack],
335
335
  :name, [:name, :email],
336
336
  controller: 'people',
337
337
  default_order: :desc
@@ -346,7 +346,7 @@ module Ransack
346
346
  describe '#sort_link with multiple search_keys should allow multiple default_orders to be specified' do
347
347
  subject { @controller.view_context
348
348
  .sort_link(
349
- [:main_app, Person.search()],
349
+ [:main_app, Person.ransack],
350
350
  :name, [:name, :email],
351
351
  controller: 'people',
352
352
  default_order: { name: 'desc', email: 'asc' }
@@ -363,7 +363,7 @@ module Ransack
363
363
  describe '#sort_url with multiple search_keys should allow multiple default_orders to be specified' do
364
364
  subject { @controller.view_context
365
365
  .sort_url(
366
- [:main_app, Person.search()],
366
+ [:main_app, Person.ransack],
367
367
  :name, [:name, :email],
368
368
  controller: 'people',
369
369
  default_order: { name: 'desc', email: 'asc' }
@@ -378,7 +378,7 @@ module Ransack
378
378
  describe '#sort_link with multiple search_keys with multiple default_orders should not override a specified order' do
379
379
  subject { @controller.view_context
380
380
  .sort_link(
381
- [:main_app, Person.search()],
381
+ [:main_app, Person.ransack],
382
382
  :name, [:name, 'email desc'],
383
383
  controller: 'people',
384
384
  default_order: { name: 'desc', email: 'asc' }
@@ -395,7 +395,7 @@ module Ransack
395
395
  describe '#sort_url with multiple search_keys with multiple default_orders should not override a specified order' do
396
396
  subject { @controller.view_context
397
397
  .sort_url(
398
- [:main_app, Person.search()],
398
+ [:main_app, Person.ransack],
399
399
  :name, [:name, 'email desc'],
400
400
  controller: 'people',
401
401
  default_order: { name: 'desc', email: 'asc' }
@@ -410,7 +410,7 @@ module Ransack
410
410
  describe "#sort_link on polymorphic association should preserve association model name case" do
411
411
  subject { @controller.view_context
412
412
  .sort_link(
413
- [:main_app, Note.search()],
413
+ [:main_app, Note.ransack],
414
414
  :notable_of_Person_type_name, "Notable",
415
415
  controller: 'notes'
416
416
  )
@@ -423,7 +423,7 @@ module Ransack
423
423
  describe "#sort_url on polymorphic association should preserve association model name case" do
424
424
  subject { @controller.view_context
425
425
  .sort_link(
426
- [:main_app, Note.search()],
426
+ [:main_app, Note.ransack],
427
427
  :notable_of_Person_type_name, "Notable",
428
428
  controller: 'notes'
429
429
  )
@@ -439,7 +439,7 @@ module Ransack
439
439
 
440
440
  subject {
441
441
  @controller.view_context.sort_link(
442
- Person.search(
442
+ Person.ransack(
443
443
  { sorts: ['name desc'] },
444
444
  search_key: 'people_search'
445
445
  ),
@@ -457,7 +457,7 @@ module Ransack
457
457
 
458
458
  subject {
459
459
  @controller.view_context.sort_url(
460
- Person.search(
460
+ Person.ransack(
461
461
  { sorts: ['name desc'] },
462
462
  search_key: 'people_search'
463
463
  ),
@@ -473,7 +473,7 @@ module Ransack
473
473
  if: ::ActiveRecord::VERSION::MAJOR > 3 do
474
474
 
475
475
  describe 'with symbol q:, #sort_link should include search params' do
476
- subject { @controller.view_context.sort_link(Person.search, :name) }
476
+ subject { @controller.view_context.sort_link(Person.ransack, :name) }
477
477
  let(:params) { ActionController::Parameters.new(
478
478
  { :q => { name_eq: 'TEST' }, controller: 'people' }
479
479
  ) }
@@ -488,7 +488,7 @@ module Ransack
488
488
  end
489
489
 
490
490
  describe 'with symbol q:, #sort_url should include search params' do
491
- subject { @controller.view_context.sort_url(Person.search, :name) }
491
+ subject { @controller.view_context.sort_url(Person.ransack, :name) }
492
492
  let(:params) { ActionController::Parameters.new(
493
493
  { :q => { name_eq: 'TEST' }, controller: 'people' }
494
494
  ) }
@@ -503,7 +503,7 @@ module Ransack
503
503
  end
504
504
 
505
505
  describe "with string 'q', #sort_link should include search params" do
506
- subject { @controller.view_context.sort_link(Person.search, :name) }
506
+ subject { @controller.view_context.sort_link(Person.ransack, :name) }
507
507
  let(:params) {
508
508
  ActionController::Parameters.new(
509
509
  { 'q' => { name_eq: 'Test2' }, controller: 'people' }
@@ -519,7 +519,7 @@ module Ransack
519
519
  end
520
520
 
521
521
  describe "with string 'q', #sort_url should include search params" do
522
- subject { @controller.view_context.sort_url(Person.search, :name) }
522
+ subject { @controller.view_context.sort_url(Person.ransack, :name) }
523
523
  let(:params) {
524
524
  ActionController::Parameters.new(
525
525
  { 'q' => { name_eq: 'Test2' }, controller: 'people' }
@@ -539,7 +539,7 @@ module Ransack
539
539
  describe '#sort_link with hide order indicator set to true' do
540
540
  subject { @controller.view_context
541
541
  .sort_link(
542
- [:main_app, Person.search(sorts: ['name desc'])],
542
+ [:main_app, Person.ransack(sorts: ['name desc'])],
543
543
  :name,
544
544
  controller: 'people',
545
545
  hide_indicator: true
@@ -552,7 +552,7 @@ module Ransack
552
552
  describe '#sort_link with hide order indicator set to false' do
553
553
  subject { @controller.view_context
554
554
  .sort_link(
555
- [:main_app, Person.search(sorts: ['name desc'])],
555
+ [:main_app, Person.ransack(sorts: ['name desc'])],
556
556
  :name,
557
557
  controller: 'people',
558
558
  hide_indicator: false
@@ -572,7 +572,7 @@ module Ransack
572
572
 
573
573
  subject { @controller.view_context
574
574
  .sort_link(
575
- [:main_app, Person.search(sorts: ['name desc'])],
575
+ [:main_app, Person.ransack(sorts: ['name desc'])],
576
576
  :name,
577
577
  controller: 'people',
578
578
  hide_indicator: false
@@ -593,7 +593,7 @@ module Ransack
593
593
 
594
594
  subject { @controller.view_context
595
595
  .sort_link(
596
- [:main_app, Person.search(sorts: ['name asc'])],
596
+ [:main_app, Person.ransack(sorts: ['name asc'])],
597
597
  :name,
598
598
  controller: 'people',
599
599
  hide_indicator: false
@@ -614,7 +614,7 @@ module Ransack
614
614
 
615
615
  subject { @controller.view_context
616
616
  .sort_link(
617
- [:main_app, Person.search(sorts: ['name desc'])],
617
+ [:main_app, Person.ransack(sorts: ['name desc'])],
618
618
  :name,
619
619
  controller: 'people'
620
620
  )
@@ -630,7 +630,7 @@ module Ransack
630
630
 
631
631
  subject { @controller.view_context
632
632
  .sort_link(
633
- [:main_app, Person.search(sorts: ['name desc'])],
633
+ [:main_app, Person.ransack(sorts: ['name desc'])],
634
634
  :name,
635
635
  controller: 'people'
636
636
  )
@@ -655,7 +655,7 @@ module Ransack
655
655
 
656
656
  subject { @controller.view_context
657
657
  .sort_link(
658
- [:main_app, Person.search],
658
+ [:main_app, Person.ransack],
659
659
  :name,
660
660
  controller: 'people'
661
661
  )
@@ -681,7 +681,7 @@ module Ransack
681
681
 
682
682
  subject { @controller.view_context
683
683
  .sort_link(
684
- [:main_app, Person.search(sorts: ['name desc'])],
684
+ [:main_app, Person.ransack(sorts: ['name desc'])],
685
685
  :name,
686
686
  controller: 'people'
687
687
  )
@@ -707,7 +707,7 @@ module Ransack
707
707
 
708
708
  subject { @controller.view_context
709
709
  .sort_link(
710
- [:main_app, Person.search(sorts: ['name desc'])],
710
+ [:main_app, Person.ransack(sorts: ['name desc'])],
711
711
  :name,
712
712
  controller: 'people'
713
713
  )
@@ -719,7 +719,7 @@ module Ransack
719
719
  describe '#sort_link with a block' do
720
720
  subject { @controller.view_context
721
721
  .sort_link(
722
- [:main_app, Person.search(sorts: ['name desc'])],
722
+ [:main_app, Person.ransack(sorts: ['name desc'])],
723
723
  :name,
724
724
  controller: 'people'
725
725
  ) { 'Block label' }
@@ -729,14 +729,14 @@ module Ransack
729
729
 
730
730
  describe '#search_form_for with default format' do
731
731
  subject { @controller.view_context
732
- .search_form_for(Person.search) {} }
732
+ .search_form_for(Person.ransack) {} }
733
733
  it { should match /action="\/people"/ }
734
734
  end
735
735
 
736
736
  describe '#search_form_for with pdf format' do
737
737
  subject {
738
738
  @controller.view_context
739
- .search_form_for(Person.search, format: :pdf) {}
739
+ .search_form_for(Person.ransack, format: :pdf) {}
740
740
  }
741
741
  it { should match /action="\/people.pdf"/ }
742
742
  end
@@ -744,7 +744,7 @@ module Ransack
744
744
  describe '#search_form_for with json format' do
745
745
  subject {
746
746
  @controller.view_context
747
- .search_form_for(Person.search, format: :json) {}
747
+ .search_form_for(Person.ransack, format: :json) {}
748
748
  }
749
749
  it { should match /action="\/people.json"/ }
750
750
  end
@@ -752,7 +752,7 @@ module Ransack
752
752
  describe '#search_form_for with an array of routes' do
753
753
  subject {
754
754
  @controller.view_context
755
- .search_form_for([:admin, Comment.search]) {}
755
+ .search_form_for([:admin, Comment.ransack]) {}
756
756
  }
757
757
  it { should match /action="\/admin\/comments"/ }
758
758
  end
@@ -763,7 +763,7 @@ module Ransack
763
763
  end
764
764
  subject {
765
765
  @controller.view_context
766
- .search_form_for(Person.search) { |f| f.text_field :name_eq }
766
+ .search_form_for(Person.ransack) { |f| f.text_field :name_eq }
767
767
  }
768
768
  it { should match /example_name_eq/ }
769
769
  end