ransack 2.1.1 → 2.3.0

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.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +13 -1
  4. data/CHANGELOG.md +24 -0
  5. data/Gemfile +4 -12
  6. data/README.md +5 -3
  7. data/lib/ransack.rb +1 -0
  8. data/lib/ransack/adapters/active_record/context.rb +40 -12
  9. data/lib/ransack/adapters/active_record/ransack/constants.rb +5 -2
  10. data/lib/ransack/adapters/active_record/ransack/nodes/condition.rb +1 -1
  11. data/lib/ransack/adapters/active_record/ransack/translate.rb +1 -1
  12. data/lib/ransack/constants.rb +1 -0
  13. data/lib/ransack/context.rb +19 -18
  14. data/lib/ransack/helpers/form_helper.rb +1 -1
  15. data/lib/ransack/locale/az.yml +1 -1
  16. data/lib/ransack/locale/ca.yml +70 -0
  17. data/lib/ransack/locale/es.yml +22 -22
  18. data/lib/ransack/locale/fa.yml +70 -0
  19. data/lib/ransack/locale/fi.yml +71 -0
  20. data/lib/ransack/translate.rb +115 -115
  21. data/lib/ransack/version.rb +1 -1
  22. data/{lib → polyamorous/lib}/polyamorous.rb +7 -3
  23. data/{lib → polyamorous/lib}/polyamorous/activerecord_5.0_ruby_2/join_association.rb +0 -0
  24. data/{lib → polyamorous/lib}/polyamorous/activerecord_5.0_ruby_2/join_dependency.rb +0 -0
  25. data/{lib → polyamorous/lib}/polyamorous/activerecord_5.1_ruby_2/join_association.rb +1 -2
  26. data/{lib → polyamorous/lib}/polyamorous/activerecord_5.1_ruby_2/join_dependency.rb +0 -0
  27. data/{lib → polyamorous/lib}/polyamorous/activerecord_5.2.0_ruby_2/join_association.rb +2 -3
  28. data/{lib → polyamorous/lib}/polyamorous/activerecord_5.2.0_ruby_2/join_dependency.rb +1 -2
  29. data/polyamorous/lib/polyamorous/activerecord_5.2.0_ruby_2/reflection.rb +12 -0
  30. data/{lib → polyamorous/lib}/polyamorous/activerecord_5.2.1_ruby_2/join_association.rb +0 -9
  31. data/{lib → polyamorous/lib}/polyamorous/activerecord_5.2.1_ruby_2/join_dependency.rb +25 -1
  32. data/polyamorous/lib/polyamorous/activerecord_5.2.1_ruby_2/reflection.rb +2 -0
  33. data/polyamorous/lib/polyamorous/activerecord_6.0_ruby_2/join_association.rb +2 -0
  34. data/polyamorous/lib/polyamorous/activerecord_6.0_ruby_2/join_dependency.rb +81 -0
  35. data/polyamorous/lib/polyamorous/activerecord_6.0_ruby_2/reflection.rb +2 -0
  36. data/polyamorous/lib/polyamorous/activerecord_6.1_ruby_2/join_association.rb +2 -0
  37. data/polyamorous/lib/polyamorous/activerecord_6.1_ruby_2/join_dependency.rb +2 -0
  38. data/polyamorous/lib/polyamorous/activerecord_6.1_ruby_2/reflection.rb +2 -0
  39. data/{lib → polyamorous/lib}/polyamorous/join.rb +0 -0
  40. data/{lib → polyamorous/lib}/polyamorous/swapping_reflection_class.rb +0 -0
  41. data/{lib → polyamorous/lib}/polyamorous/tree_node.rb +0 -0
  42. data/polyamorous/lib/polyamorous/version.rb +3 -0
  43. data/polyamorous/polyamorous.gemspec +35 -0
  44. data/ransack.gemspec +3 -3
  45. data/spec/helpers/polyamorous_helper.rb +6 -2
  46. data/spec/ransack/adapters/active_record/context_spec.rb +41 -0
  47. data/spec/ransack/join_dependency_spec.rb +18 -7
  48. data/spec/ransack/predicate_spec.rb +16 -2
  49. data/spec/ransack/search_spec.rb +26 -2
  50. data/spec/spec_helper.rb +1 -0
  51. data/spec/support/schema.rb +6 -0
  52. metadata +58 -18
@@ -126,7 +126,7 @@ module Ransack
126
126
  (if ActiveRecord::Base.connection.adapter_name == "PostgreSQL"
127
127
  /"people"."name" ILIKE '%\\%\\.\\_\\\\%'/
128
128
  elsif ActiveRecord::Base.connection.adapter_name == "Mysql2"
129
- /`people`.`name` LIKE '%\\\\%\\\\.\\\\_\\\\\\\\%'/
129
+ /`people`.`name` LIKE '%\\\\%.\\\\_\\\\\\\\%'/
130
130
  else
131
131
  /"people"."name" LIKE '%%._\\%'/
132
132
  end) do
@@ -145,7 +145,7 @@ module Ransack
145
145
  (if ActiveRecord::Base.connection.adapter_name == "PostgreSQL"
146
146
  /"people"."name" NOT ILIKE '%\\%\\.\\_\\\\%'/
147
147
  elsif ActiveRecord::Base.connection.adapter_name == "Mysql2"
148
- /`people`.`name` NOT LIKE '%\\\\%\\\\.\\\\_\\\\\\\\%'/
148
+ /`people`.`name` NOT LIKE '%\\\\%.\\\\_\\\\\\\\%'/
149
149
  else
150
150
  /"people"."name" NOT LIKE '%%._\\%'/
151
151
  end) do
@@ -381,6 +381,20 @@ module Ransack
381
381
  end
382
382
  end
383
383
 
384
+ context "defining custom predicates" do
385
+ describe "with 'not_in' arel predicate" do
386
+ before do
387
+ Ransack.configure {|c| c.add_predicate "not_in_csv", arel_predicate: "not_in", formatter: proc { |v| v.split(",") } }
388
+ end
389
+
390
+ it 'generates a value IS NOT NULL query' do
391
+ @s.name_not_in_csv = ["a", "b"]
392
+ field = "#{quote_table_name("people")}.#{quote_column_name("name")}"
393
+ expect(@s.result.to_sql).to match /#{field} NOT IN \('a', 'b'\)/
394
+ end
395
+ end
396
+ end
397
+
384
398
  private
385
399
 
386
400
  def test_boolean_equality_for(boolean_value)
@@ -227,13 +227,37 @@ module Ransack
227
227
  children_people_name_field} = 'Ernie'/
228
228
  end
229
229
 
230
+ it 'use appropriate table alias' do
231
+ skip "Make this spec pass for Rails <5.2" if ::ActiveRecord::VERSION::STRING < '5.2.0'
232
+ s = Search.new(Person, {
233
+ name_eq: "person_name_query",
234
+ articles_title_eq: "person_article_title_query",
235
+ parent_name_eq: "parent_name_query",
236
+ parent_articles_title_eq: 'parents_article_title_query'
237
+ }).result
238
+ real_query = remove_quotes_and_backticks(s.to_sql)
239
+
240
+ expect(real_query)
241
+ .to match(%r{LEFT OUTER JOIN articles ON (\('default_scope' = 'default_scope'\) AND )?articles.person_id = people.id})
242
+ expect(real_query)
243
+ .to match(%r{LEFT OUTER JOIN articles articles_people ON (\('default_scope' = 'default_scope'\) AND )?articles_people.person_id = parents_people.id})
244
+ expect(real_query)
245
+ .to include "people.name = 'person_name_query'"
246
+ expect(real_query)
247
+ .to include "articles.title = 'person_article_title_query'"
248
+ expect(real_query)
249
+ .to include "parents_people.name = 'parent_name_query'"
250
+ expect(real_query)
251
+ .to include "articles_people.title = 'parents_article_title_query'"
252
+ end
253
+
230
254
  # FIXME: Make this spec pass for Rails 4.1 / 4.2 / 5.0 and not just 4.0 by
231
255
  # commenting out lines 221 and 242 to run the test. Addresses issue #374.
232
256
  # https://github.com/activerecord-hackery/ransack/issues/374
233
257
  #
234
258
  it 'evaluates conditions for multiple `belongs_to` associations to the
235
259
  same table contextually' do
236
- skip "Make this spec pass for Rails >5.0"
260
+ skip "Make this spec pass for Rails <5.2" if ::ActiveRecord::VERSION::STRING < '5.2.0'
237
261
  s = Search.new(
238
262
  Recommendation,
239
263
  person_name_eq: 'Ernie',
@@ -248,7 +272,7 @@ module Ransack
248
272
  ON target_people_recommendations.id = recommendations.target_person_id
249
273
  LEFT OUTER JOIN people parents_people
250
274
  ON parents_people.id = target_people_recommendations.parent_id
251
- WHERE ((people.name = 'Ernie' AND parents_people.name = 'Test'))
275
+ WHERE (people.name = 'Ernie' AND parents_people.name = 'Test')
252
276
  SQL
253
277
  .squish
254
278
  expect(real_query).to eq expected_query
@@ -4,6 +4,7 @@ require 'faker'
4
4
  require 'ransack'
5
5
  require 'pry'
6
6
  require 'simplecov'
7
+ require 'byebug'
7
8
 
8
9
  SimpleCov.start
9
10
  I18n.enforce_available_locales = false
@@ -29,6 +29,8 @@ class Person < ActiveRecord::Base
29
29
  belongs_to :parent, class_name: 'Person', foreign_key: :parent_id
30
30
  has_many :children, class_name: 'Person', foreign_key: :parent_id
31
31
  has_many :articles
32
+ has_many :story_articles
33
+
32
34
  has_many :published_articles, ->{ where(published: true) },
33
35
  class_name: "Article"
34
36
  has_many :comments
@@ -136,6 +138,9 @@ class Article < ActiveRecord::Base
136
138
  default_scope { where("'default_scope' = 'default_scope'") }
137
139
  end
138
140
 
141
+ class StoryArticle < Article
142
+ end
143
+
139
144
  class Recommendation < ActiveRecord::Base
140
145
  belongs_to :person
141
146
  belongs_to :target_person, class_name: 'Person'
@@ -194,6 +199,7 @@ module Schema
194
199
  t.string :title
195
200
  t.text :subject_header
196
201
  t.text :body
202
+ t.string :type
197
203
  t.boolean :published, default: true
198
204
  end
199
205
 
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.1.1
4
+ version: 2.3.0
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-12-05 00:00:00.000000000 Z
14
+ date: 2019-08-18 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: actionpack
@@ -69,6 +69,20 @@ dependencies:
69
69
  - - ">="
70
70
  - !ruby/object:Gem::Version
71
71
  version: '0'
72
+ - !ruby/object:Gem::Dependency
73
+ name: polyamorous
74
+ requirement: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - '='
77
+ - !ruby/object:Gem::Version
78
+ version: 2.3.0
79
+ type: :runtime
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - '='
84
+ - !ruby/object:Gem::Version
85
+ version: 2.3.0
72
86
  - !ruby/object:Gem::Dependency
73
87
  name: rspec
74
88
  requirement: !ruby/object:Gem::Requirement
@@ -117,14 +131,14 @@ dependencies:
117
131
  requirements:
118
132
  - - "~>"
119
133
  - !ruby/object:Gem::Version
120
- version: 1.3.3
134
+ version: 1.4.1
121
135
  type: :development
122
136
  prerelease: false
123
137
  version_requirements: !ruby/object:Gem::Requirement
124
138
  requirements:
125
139
  - - "~>"
126
140
  - !ruby/object:Gem::Version
127
- version: 1.3.3
141
+ version: 1.4.1
128
142
  - !ruby/object:Gem::Dependency
129
143
  name: pg
130
144
  requirement: !ruby/object:Gem::Requirement
@@ -167,6 +181,20 @@ dependencies:
167
181
  - - '='
168
182
  - !ruby/object:Gem::Version
169
183
  version: '0.10'
184
+ - !ruby/object:Gem::Dependency
185
+ name: byebug
186
+ requirement: !ruby/object:Gem::Requirement
187
+ requirements:
188
+ - - ">="
189
+ - !ruby/object:Gem::Version
190
+ version: '0'
191
+ type: :development
192
+ prerelease: false
193
+ version_requirements: !ruby/object:Gem::Requirement
194
+ requirements:
195
+ - - ">="
196
+ - !ruby/object:Gem::Version
197
+ version: '0'
170
198
  description: Ransack is the successor to the MetaSearch gem. It improves and expands
171
199
  upon MetaSearch's functionality, but does not have a 100%-compatible API.
172
200
  email:
@@ -186,18 +214,6 @@ files:
186
214
  - LICENSE
187
215
  - README.md
188
216
  - Rakefile
189
- - lib/polyamorous.rb
190
- - lib/polyamorous/activerecord_5.0_ruby_2/join_association.rb
191
- - lib/polyamorous/activerecord_5.0_ruby_2/join_dependency.rb
192
- - lib/polyamorous/activerecord_5.1_ruby_2/join_association.rb
193
- - lib/polyamorous/activerecord_5.1_ruby_2/join_dependency.rb
194
- - lib/polyamorous/activerecord_5.2.0_ruby_2/join_association.rb
195
- - lib/polyamorous/activerecord_5.2.0_ruby_2/join_dependency.rb
196
- - lib/polyamorous/activerecord_5.2.1_ruby_2/join_association.rb
197
- - lib/polyamorous/activerecord_5.2.1_ruby_2/join_dependency.rb
198
- - lib/polyamorous/join.rb
199
- - lib/polyamorous/swapping_reflection_class.rb
200
- - lib/polyamorous/tree_node.rb
201
217
  - lib/ransack.rb
202
218
  - lib/ransack/adapters.rb
203
219
  - lib/ransack/adapters/active_record.rb
@@ -217,12 +233,15 @@ files:
217
233
  - lib/ransack/locale/ar.yml
218
234
  - lib/ransack/locale/az.yml
219
235
  - lib/ransack/locale/bg.yml
236
+ - lib/ransack/locale/ca.yml
220
237
  - lib/ransack/locale/cs.yml
221
238
  - lib/ransack/locale/da.yml
222
239
  - lib/ransack/locale/de.yml
223
240
  - lib/ransack/locale/el.yml
224
241
  - lib/ransack/locale/en.yml
225
242
  - lib/ransack/locale/es.yml
243
+ - lib/ransack/locale/fa.yml
244
+ - lib/ransack/locale/fi.yml
226
245
  - lib/ransack/locale/fr.yml
227
246
  - lib/ransack/locale/hu.yml
228
247
  - lib/ransack/locale/id.yml
@@ -256,6 +275,28 @@ files:
256
275
  - logo/ransack-v.svg
257
276
  - logo/ransack.png
258
277
  - logo/ransack.svg
278
+ - polyamorous/lib/polyamorous.rb
279
+ - polyamorous/lib/polyamorous/activerecord_5.0_ruby_2/join_association.rb
280
+ - polyamorous/lib/polyamorous/activerecord_5.0_ruby_2/join_dependency.rb
281
+ - polyamorous/lib/polyamorous/activerecord_5.1_ruby_2/join_association.rb
282
+ - polyamorous/lib/polyamorous/activerecord_5.1_ruby_2/join_dependency.rb
283
+ - polyamorous/lib/polyamorous/activerecord_5.2.0_ruby_2/join_association.rb
284
+ - polyamorous/lib/polyamorous/activerecord_5.2.0_ruby_2/join_dependency.rb
285
+ - polyamorous/lib/polyamorous/activerecord_5.2.0_ruby_2/reflection.rb
286
+ - polyamorous/lib/polyamorous/activerecord_5.2.1_ruby_2/join_association.rb
287
+ - polyamorous/lib/polyamorous/activerecord_5.2.1_ruby_2/join_dependency.rb
288
+ - polyamorous/lib/polyamorous/activerecord_5.2.1_ruby_2/reflection.rb
289
+ - polyamorous/lib/polyamorous/activerecord_6.0_ruby_2/join_association.rb
290
+ - polyamorous/lib/polyamorous/activerecord_6.0_ruby_2/join_dependency.rb
291
+ - polyamorous/lib/polyamorous/activerecord_6.0_ruby_2/reflection.rb
292
+ - polyamorous/lib/polyamorous/activerecord_6.1_ruby_2/join_association.rb
293
+ - polyamorous/lib/polyamorous/activerecord_6.1_ruby_2/join_dependency.rb
294
+ - polyamorous/lib/polyamorous/activerecord_6.1_ruby_2/reflection.rb
295
+ - polyamorous/lib/polyamorous/join.rb
296
+ - polyamorous/lib/polyamorous/swapping_reflection_class.rb
297
+ - polyamorous/lib/polyamorous/tree_node.rb
298
+ - polyamorous/lib/polyamorous/version.rb
299
+ - polyamorous/polyamorous.gemspec
259
300
  - ransack.gemspec
260
301
  - spec/blueprints/articles.rb
261
302
  - spec/blueprints/comments.rb
@@ -300,8 +341,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
300
341
  - !ruby/object:Gem::Version
301
342
  version: '0'
302
343
  requirements: []
303
- rubyforge_project: ransack
304
- rubygems_version: 2.7.6
344
+ rubygems_version: 3.0.2
305
345
  signing_key:
306
346
  specification_version: 4
307
347
  summary: Object-based searching for Active Record and Mongoid (currently).