ransack 2.5.0 → 3.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/deploy.yml +35 -0
  3. data/.github/workflows/test-deploy.yml +29 -0
  4. data/.github/workflows/test.yml +0 -18
  5. data/.nojekyll +0 -0
  6. data/CHANGELOG.md +101 -13
  7. data/CONTRIBUTING.md +1 -3
  8. data/README.md +45 -1039
  9. data/docs/.gitignore +19 -0
  10. data/docs/.nojekyll +0 -0
  11. data/docs/babel.config.js +3 -0
  12. data/docs/blog/2022-03-27-ransack-3.0.0.md +20 -0
  13. data/docs/docs/getting-started/_category_.json +4 -0
  14. data/docs/docs/getting-started/advanced-mode.md +46 -0
  15. data/docs/docs/getting-started/configuration.md +47 -0
  16. data/docs/docs/getting-started/search-matches.md +67 -0
  17. data/docs/docs/getting-started/simple-mode.md +284 -0
  18. data/docs/docs/getting-started/sorting.md +79 -0
  19. data/docs/docs/getting-started/using-predicates.md +282 -0
  20. data/docs/docs/going-further/_category_.json +4 -0
  21. data/docs/docs/going-further/associations.md +70 -0
  22. data/docs/docs/going-further/custom-predicates.md +52 -0
  23. data/docs/docs/going-further/documentation.md +43 -0
  24. data/docs/docs/going-further/exporting-to-csv.md +49 -0
  25. data/docs/docs/going-further/external-guides.md +57 -0
  26. data/docs/docs/going-further/form-customisation.md +63 -0
  27. data/docs/docs/going-further/i18n.md +53 -0
  28. data/docs/{img → docs/going-further/img}/create_release.png +0 -0
  29. data/docs/docs/going-further/merging-searches.md +41 -0
  30. data/docs/docs/going-further/other-notes.md +428 -0
  31. data/docs/docs/going-further/ransackers.md +331 -0
  32. data/docs/docs/going-further/release_process.md +36 -0
  33. data/docs/docs/going-further/saving-queries.md +82 -0
  34. data/docs/docs/going-further/searching-postgres.md +57 -0
  35. data/docs/docs/going-further/wiki-contributors.md +82 -0
  36. data/docs/docs/intro.md +99 -0
  37. data/docs/docusaurus.config.js +107 -0
  38. data/docs/package.json +37 -0
  39. data/docs/sidebars.js +31 -0
  40. data/docs/src/components/HomepageFeatures/index.js +64 -0
  41. data/docs/src/components/HomepageFeatures/styles.module.css +11 -0
  42. data/docs/src/css/custom.css +39 -0
  43. data/docs/src/pages/index.module.css +23 -0
  44. data/docs/src/pages/markdown-page.md +7 -0
  45. data/docs/static/.nojekyll +0 -0
  46. data/docs/static/img/docusaurus.png +0 -0
  47. data/docs/static/img/favicon.ico +0 -0
  48. data/docs/static/img/logo.svg +1 -0
  49. data/docs/static/img/tutorial/docsVersionDropdown.png +0 -0
  50. data/docs/static/img/tutorial/localeDropdown.png +0 -0
  51. data/docs/static/img/undraw_docusaurus_mountain.svg +171 -0
  52. data/docs/static/img/undraw_docusaurus_react.svg +170 -0
  53. data/docs/static/img/undraw_docusaurus_tree.svg +40 -0
  54. data/{logo → docs/static/logo}/ransack-h.png +0 -0
  55. data/{logo → docs/static/logo}/ransack-h.svg +0 -0
  56. data/{logo → docs/static/logo}/ransack-v.png +0 -0
  57. data/{logo → docs/static/logo}/ransack-v.svg +0 -0
  58. data/{logo → docs/static/logo}/ransack.png +0 -0
  59. data/{logo → docs/static/logo}/ransack.svg +0 -0
  60. data/docs/yarn.lock +7671 -0
  61. data/lib/polyamorous/activerecord_6.0_ruby_2/join_association.rb +20 -1
  62. data/lib/polyamorous/activerecord_6.0_ruby_2/join_dependency.rb +0 -1
  63. data/lib/polyamorous/activerecord_6.0_ruby_2/reflection.rb +11 -1
  64. data/lib/polyamorous/activerecord_6.1_ruby_2/join_association.rb +0 -4
  65. data/lib/polyamorous/activerecord_6.1_ruby_2/join_dependency.rb +0 -1
  66. data/lib/ransack/adapters/active_record/base.rb +0 -2
  67. data/lib/ransack/adapters/active_record/context.rb +1 -0
  68. data/lib/ransack/adapters/active_record/ransack/nodes/condition.rb +1 -1
  69. data/lib/ransack/helpers/form_helper.rb +11 -3
  70. data/lib/ransack/search.rb +2 -2
  71. data/lib/ransack/version.rb +1 -1
  72. data/ransack.gemspec +4 -4
  73. data/spec/polyamorous/activerecord_compatibility_spec.rb +15 -0
  74. data/spec/polyamorous/join_association_spec.rb +0 -5
  75. data/spec/polyamorous/join_dependency_spec.rb +0 -16
  76. data/spec/ransack/adapters/active_record/base_spec.rb +10 -1
  77. data/spec/ransack/helpers/form_helper_spec.rb +45 -2
  78. data/spec/ransack/search_spec.rb +23 -0
  79. data/spec/support/schema.rb +26 -0
  80. metadata +66 -19
  81. data/docs/release_process.md +0 -17
  82. data/lib/polyamorous/activerecord_5.2_ruby_2/join_association.rb +0 -24
  83. data/lib/polyamorous/activerecord_5.2_ruby_2/join_dependency.rb +0 -79
  84. data/lib/polyamorous/activerecord_5.2_ruby_2/reflection.rb +0 -11
@@ -1 +1,20 @@
1
- require 'polyamorous/activerecord_5.2_ruby_2/join_association'
1
+ module Polyamorous
2
+ module JoinAssociationExtensions
3
+ include SwappingReflectionClass
4
+ def self.prepended(base)
5
+ base.class_eval { attr_reader :join_type }
6
+ end
7
+
8
+ def initialize(reflection, children, polymorphic_class = nil, join_type = Arel::Nodes::InnerJoin)
9
+ @join_type = join_type
10
+ if polymorphic_class && ::ActiveRecord::Base > polymorphic_class
11
+ swapping_reflection_klass(reflection, polymorphic_class) do |reflection|
12
+ super(reflection, children)
13
+ self.reflection.options[:polymorphic] = true
14
+ end
15
+ else
16
+ super(reflection, children)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -1,4 +1,3 @@
1
- # active_record_6.0_ruby_2/join_dependency.rb
2
1
  module Polyamorous
3
2
  module JoinDependencyExtensions
4
3
  # Replaces ActiveRecord::Associations::JoinDependency#build
@@ -1 +1,11 @@
1
- require 'polyamorous/activerecord_5.2_ruby_2/reflection'
1
+ module Polyamorous
2
+ module ReflectionExtensions
3
+ def join_scope(table, foreign_table, foreign_klass)
4
+ if respond_to?(:polymorphic?) && polymorphic?
5
+ super.where!(foreign_table[foreign_type].eq(klass.name))
6
+ else
7
+ super
8
+ end
9
+ end
10
+ end
11
+ end
@@ -66,9 +66,5 @@ module Polyamorous
66
66
 
67
67
  joins
68
68
  end
69
-
70
- def ==(other)
71
- base_klass == other.base_klass
72
- end
73
69
  end
74
70
  end
@@ -1,4 +1,3 @@
1
- # active_record_6.1_ruby_2/join_dependency.rb
2
1
  module Polyamorous
3
2
  module JoinDependencyExtensions
4
3
  # Replaces ActiveRecord::Associations::JoinDependency#build
@@ -4,7 +4,6 @@ module Ransack
4
4
  module Base
5
5
 
6
6
  def self.extended(base)
7
- alias :search :ransack unless base.respond_to? :search
8
7
  base.class_eval do
9
8
  class_attribute :_ransackers
10
9
  class_attribute :_ransack_aliases
@@ -14,7 +13,6 @@ module Ransack
14
13
  end
15
14
 
16
15
  def ransack(params = {}, options = {})
17
- ActiveSupport::Deprecation.warn("#search is deprecated and will be removed in 2.3, please use #ransack instead") if __callee__ == :search
18
16
  Search.new(self, params, options)
19
17
  end
20
18
 
@@ -143,6 +143,7 @@ module Ransack
143
143
  stashed.eql?(association)
144
144
  }
145
145
  @object.joins_values.delete_if { |jd|
146
+ jd.instance_variables.include?(:@join_root) &&
146
147
  jd.instance_variable_get(:@join_root).children.map(&:object_id) == [association.object_id]
147
148
  }
148
149
  end
@@ -54,7 +54,7 @@ module Ransack
54
54
  if predicate.respond_to?(:value)
55
55
  predicate.value # Rails 6.1
56
56
  elsif predicate.respond_to?(:val)
57
- predicate.val # Rails 5.2, 6.0
57
+ predicate.val # Rails 6.0
58
58
  end
59
59
  end
60
60
 
@@ -130,12 +130,20 @@ module Ransack
130
130
 
131
131
  def url_options
132
132
  @params.merge(
133
- @options.merge(
133
+ @options.except(:class, :data).merge(
134
134
  @search.context.search_key => search_and_sort_params))
135
135
  end
136
136
 
137
137
  def html_options(args)
138
- html_options = extract_options_and_mutate_args!(args)
138
+ if args.empty?
139
+ html_options = @options
140
+ else
141
+ deprecation_message = "Passing two trailing hashes to `sort_link` is deprecated, merge the trailing hashes into a single one."
142
+ caller_location = caller_locations(2, 2).first
143
+ warn "#{deprecation_message} (called at #{caller_location.path}:#{caller_location.lineno})"
144
+ html_options = extract_options_and_mutate_args!(args)
145
+ end
146
+
139
147
  html_options.merge(
140
148
  class: [['sort_link'.freeze, @current_dir], html_options[:class]]
141
149
  .compact.join(' '.freeze)
@@ -145,7 +153,7 @@ module Ransack
145
153
  private
146
154
 
147
155
  def parameters_hash(params)
148
- if ::ActiveRecord::VERSION::MAJOR >= 5 && params.respond_to?(:to_unsafe_h)
156
+ if params.respond_to?(:to_unsafe_h)
149
157
  params.to_unsafe_h
150
158
  else
151
159
  params
@@ -43,10 +43,10 @@ module Ransack
43
43
  collapse_multiparameter_attributes!(params).each do |key, value|
44
44
  if ['s'.freeze, 'sorts'.freeze].freeze.include?(key)
45
45
  send("#{key}=", value)
46
- elsif base.attribute_method?(key)
47
- base.send("#{key}=", value)
48
46
  elsif @context.ransackable_scope?(key, @context.object)
49
47
  add_scope(key, value)
48
+ elsif base.attribute_method?(key)
49
+ base.send("#{key}=", value)
50
50
  elsif !Ransack.options[:ignore_unknown_conditions] || !@ignore_unknown_conditions
51
51
  raise ArgumentError, "Invalid search term #{key}"
52
52
  end
@@ -1,3 +1,3 @@
1
1
  module Ransack
2
- VERSION = '2.5.0'
2
+ VERSION = '3.0.1'
3
3
  end
data/ransack.gemspec CHANGED
@@ -7,16 +7,16 @@ Gem::Specification.new do |s|
7
7
  s.name = "ransack"
8
8
  s.version = Ransack::VERSION
9
9
  s.platform = Gem::Platform::RUBY
10
- s.authors = ["Ernie Miller", "Ryan Bigg", "Jon Atack", "Sean Carroll"]
10
+ s.authors = ["Ernie Miller", "Ryan Bigg", "Jon Atack", "Sean Carroll", "David Rodríguez"]
11
11
  s.email = ["ernie@erniemiller.org", "radarlistener@gmail.com", "jonnyatack@gmail.com", "sfcarroll@gmail.com"]
12
12
  s.homepage = "https://github.com/activerecord-hackery/ransack"
13
- s.summary = %q{Object-based searching for Active Record and Mongoid (currently).}
13
+ s.summary = %q{Object-based searching for Active Record.}
14
14
  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.}
15
15
  s.required_ruby_version = '>= 2.6'
16
16
  s.license = 'MIT'
17
17
 
18
- s.add_dependency 'activerecord', '>= 5.2.4'
19
- s.add_dependency 'activesupport', '>= 5.2.4'
18
+ s.add_dependency 'activerecord', '>= 6.0.4'
19
+ s.add_dependency 'activesupport', '>= 6.0.4'
20
20
  s.add_dependency 'i18n'
21
21
 
22
22
  s.files = `git ls-files`.split("\n")
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ module Polyamorous
4
+ describe "ActiveRecord Compatibility" do
5
+ it 'works with self joins and includes' do
6
+ trade_account = Account.create!
7
+ Account.create!(trade_account: trade_account)
8
+
9
+ accounts = Account.joins(:trade_account).includes(:trade_account, :agent_account)
10
+ account = accounts.first
11
+
12
+ expect(account.agent_account).to be_nil
13
+ end
14
+ end
15
+ end
@@ -12,11 +12,6 @@ module Polyamorous
12
12
 
13
13
  subject { new_join_association(reflection, parent.children, Person) }
14
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
-
20
15
  it 'leaves the original reflection intact for thread safety' do
21
16
  reflection.instance_variable_set(:@klass, Article)
22
17
  join_association
@@ -77,21 +77,5 @@ module Polyamorous
77
77
  specify { expect(subject.send(:join_root).drop(1)[1].table_name)
78
78
  .to eq 'comments' }
79
79
  end
80
-
81
- context '#left_outer_join in Rails 5 overrides join type specified',
82
- if: ActiveRecord::VERSION::MAJOR >= 5 && ActiveRecord::VERSION::MAJOR < 6 && ActiveRecord::VERSION::MINOR < 2 do
83
-
84
- let(:join_type_class) do
85
- new_join_dependency(
86
- Person,
87
- new_join(:articles)
88
- ).join_constraints(
89
- [],
90
- Arel::Nodes::OuterJoin
91
- ).first.joins.map(&:class)
92
- end
93
-
94
- specify { expect(join_type_class).to eq [Arel::Nodes::OuterJoin] }
95
- end
96
80
  end
97
81
  end
@@ -8,7 +8,6 @@ module Ransack
8
8
  subject { ::ActiveRecord::Base }
9
9
 
10
10
  it { should respond_to :ransack }
11
- it { should respond_to :search }
12
11
 
13
12
  describe '#search' do
14
13
  subject { Person.ransack }
@@ -78,6 +77,16 @@ module Ransack
78
77
  expect(s.result.to_sql).to (include 'active = 1')
79
78
  end
80
79
 
80
+ it 'applies scopes that define string SQL joins' do
81
+ allow(Article)
82
+ .to receive(:ransackable_scopes)
83
+ .and_return([:latest_comment_cont])
84
+
85
+ # Including a negative condition to test removing the scope
86
+ s = Search.new(Article, notes_note_not_eq: 'Test', latest_comment_cont: 'Test')
87
+ expect(s.result.to_sql).to include 'latest_comment'
88
+ end
89
+
81
90
  context "with sanitize_custom_scope_booleans set to false" do
82
91
  before(:all) do
83
92
  Ransack.configure { |c| c.sanitize_custom_scope_booleans = false }
@@ -469,8 +469,7 @@ module Ransack
469
469
  it { should match /exist\=existing/ }
470
470
  end
471
471
 
472
- context 'using a real ActionController::Parameter object',
473
- if: ::ActiveRecord::VERSION::MAJOR > 3 do
472
+ context 'using a real ActionController::Parameter object' do
474
473
 
475
474
  describe 'with symbol q:, #sort_link should include search params' do
476
475
  subject { @controller.view_context.sort_link(Person.ransack, :name) }
@@ -727,6 +726,50 @@ module Ransack
727
726
  it { should match /Block label&nbsp;&#9660;/ }
728
727
  end
729
728
 
729
+ describe '#sort_link with class option' do
730
+ subject { @controller.view_context
731
+ .sort_link(
732
+ [:main_app, Person.ransack(sorts: ['name desc'])],
733
+ :name,
734
+ class: 'people', controller: 'people'
735
+ )
736
+ }
737
+ it { should match /class="sort_link desc people"/ }
738
+ it { should_not match /people\?class=people/ }
739
+ end
740
+
741
+ describe '#sort_link with class option workaround' do
742
+ it "generates a correct link and prints a deprecation" do
743
+ expect do
744
+ link = @controller.view_context
745
+ .sort_link(
746
+ [:main_app, Person.ransack(sorts: ['name desc'])],
747
+ :name,
748
+ 'name',
749
+ { controller: 'people' },
750
+ class: 'people'
751
+ )
752
+
753
+ expect(link).to match(/class="sort_link desc people"/)
754
+ expect(link).not_to match(/people\?class=people/)
755
+ end.to output(
756
+ /Passing two trailing hashes to `sort_link` is deprecated, merge the trailing hashes into a single one\. \(called at #{Regexp.escape(__FILE__)}:/
757
+ ).to_stderr
758
+ end
759
+ end
760
+
761
+ describe '#sort_link with data option' do
762
+ subject { @controller.view_context
763
+ .sort_link(
764
+ [:main_app, Person.ransack(sorts: ['name desc'])],
765
+ :name,
766
+ data: { turbo_action: :advance }, controller: 'people'
767
+ )
768
+ }
769
+ it { should match /data-turbo-action="advance"/ }
770
+ it { should_not match /people\?data%5Bturbo_action%5D=advance/ }
771
+ end
772
+
730
773
  describe '#search_form_for with default format' do
731
774
  subject { @controller.view_context
732
775
  .search_form_for(Person.ransack) {} }
@@ -312,6 +312,29 @@ module Ransack
312
312
  expect { Search.new(Person, params) }.not_to change { params }
313
313
  end
314
314
 
315
+ context "ransackable_scope" do
316
+ around(:each) do |example|
317
+ Person.define_singleton_method(:name_eq) do |name|
318
+ self.where(name: name)
319
+ end
320
+
321
+ begin
322
+ example.run
323
+ ensure
324
+ Person.singleton_class.undef_method :name_eq
325
+ end
326
+ end
327
+
328
+ it "is prioritized over base predicates" do
329
+ allow(Person).to receive(:ransackable_scopes)
330
+ .and_return(Person.ransackable_scopes + [:name_eq])
331
+
332
+ s = Search.new(Person, name_eq: "Johny")
333
+ expect(s.instance_variable_get(:@scope_args)["name_eq"]).to eq("Johny")
334
+ expect(s.base[:name_eq]).to be_nil
335
+ end
336
+ end
337
+
315
338
  end
316
339
 
317
340
  describe '#result' do
@@ -138,6 +138,22 @@ class Article < ActiveRecord::Base
138
138
  alias_attribute :content, :body
139
139
 
140
140
  default_scope { where("'default_scope' = 'default_scope'") }
141
+ scope :latest_comment_cont, lambda { |msg|
142
+ join = <<-SQL
143
+ (LEFT OUTER JOIN (
144
+ SELECT
145
+ comments.*,
146
+ row_number() OVER (PARTITION BY comments.article_id ORDER BY comments.id DESC) AS rownum
147
+ FROM comments
148
+ ) AS latest_comment
149
+ ON latest_comment.article_id = article.id
150
+ AND latest_comment.rownum = 1
151
+ )
152
+ SQL
153
+ .squish
154
+
155
+ joins(join).where("latest_comment.body ILIKE ?", "%#{msg}%")
156
+ }
141
157
 
142
158
  ransacker :title_type, formatter: lambda { |tuples|
143
159
  title, type = JSON.parse(tuples)
@@ -199,6 +215,11 @@ class Note < ActiveRecord::Base
199
215
  belongs_to :notable, polymorphic: true
200
216
  end
201
217
 
218
+ class Account < ActiveRecord::Base
219
+ belongs_to :agent_account, class_name: "Account"
220
+ belongs_to :trade_account, class_name: "Account"
221
+ end
222
+
202
223
  module Schema
203
224
  def self.create
204
225
  ActiveRecord::Migration.verbose = false
@@ -257,6 +278,11 @@ module Schema
257
278
  t.integer :target_person_id
258
279
  t.integer :article_id
259
280
  end
281
+
282
+ create_table :accounts, force: true do |t|
283
+ t.belongs_to :agent_account
284
+ t.belongs_to :trade_account
285
+ end
260
286
  end
261
287
 
262
288
  10.times do
metadata CHANGED
@@ -1,17 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ransack
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.0
4
+ version: 3.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ernie Miller
8
8
  - Ryan Bigg
9
9
  - Jon Atack
10
10
  - Sean Carroll
11
+ - David Rodríguez
11
12
  autorequire:
12
13
  bindir: bin
13
14
  cert_chain: []
14
- date: 2021-12-25 00:00:00.000000000 Z
15
+ date: 2022-04-07 00:00:00.000000000 Z
15
16
  dependencies:
16
17
  - !ruby/object:Gem::Dependency
17
18
  name: activerecord
@@ -19,28 +20,28 @@ dependencies:
19
20
  requirements:
20
21
  - - ">="
21
22
  - !ruby/object:Gem::Version
22
- version: 5.2.4
23
+ version: 6.0.4
23
24
  type: :runtime
24
25
  prerelease: false
25
26
  version_requirements: !ruby/object:Gem::Requirement
26
27
  requirements:
27
28
  - - ">="
28
29
  - !ruby/object:Gem::Version
29
- version: 5.2.4
30
+ version: 6.0.4
30
31
  - !ruby/object:Gem::Dependency
31
32
  name: activesupport
32
33
  requirement: !ruby/object:Gem::Requirement
33
34
  requirements:
34
35
  - - ">="
35
36
  - !ruby/object:Gem::Version
36
- version: 5.2.4
37
+ version: 6.0.4
37
38
  type: :runtime
38
39
  prerelease: false
39
40
  version_requirements: !ruby/object:Gem::Requirement
40
41
  requirements:
41
42
  - - ">="
42
43
  - !ruby/object:Gem::Version
43
- version: 5.2.4
44
+ version: 6.0.4
44
45
  - !ruby/object:Gem::Dependency
45
46
  name: i18n
46
47
  requirement: !ruby/object:Gem::Requirement
@@ -69,9 +70,12 @@ files:
69
70
  - ".github/FUNDING.yml"
70
71
  - ".github/SECURITY.md"
71
72
  - ".github/workflows/cronjob.yml"
73
+ - ".github/workflows/deploy.yml"
72
74
  - ".github/workflows/rubocop.yml"
75
+ - ".github/workflows/test-deploy.yml"
73
76
  - ".github/workflows/test.yml"
74
77
  - ".gitignore"
78
+ - ".nojekyll"
75
79
  - ".rubocop.yml"
76
80
  - CHANGELOG.md
77
81
  - CONTRIBUTING.md
@@ -81,12 +85,59 @@ files:
81
85
  - Rakefile
82
86
  - bug_report_templates/test-ransack-scope-and-column-same-name.rb
83
87
  - bug_report_templates/test-ransacker-arel-present-predicate.rb
84
- - docs/img/create_release.png
85
- - docs/release_process.md
88
+ - docs/.gitignore
89
+ - docs/.nojekyll
90
+ - docs/babel.config.js
91
+ - docs/blog/2022-03-27-ransack-3.0.0.md
92
+ - docs/docs/getting-started/_category_.json
93
+ - docs/docs/getting-started/advanced-mode.md
94
+ - docs/docs/getting-started/configuration.md
95
+ - docs/docs/getting-started/search-matches.md
96
+ - docs/docs/getting-started/simple-mode.md
97
+ - docs/docs/getting-started/sorting.md
98
+ - docs/docs/getting-started/using-predicates.md
99
+ - docs/docs/going-further/_category_.json
100
+ - docs/docs/going-further/associations.md
101
+ - docs/docs/going-further/custom-predicates.md
102
+ - docs/docs/going-further/documentation.md
103
+ - docs/docs/going-further/exporting-to-csv.md
104
+ - docs/docs/going-further/external-guides.md
105
+ - docs/docs/going-further/form-customisation.md
106
+ - docs/docs/going-further/i18n.md
107
+ - docs/docs/going-further/img/create_release.png
108
+ - docs/docs/going-further/merging-searches.md
109
+ - docs/docs/going-further/other-notes.md
110
+ - docs/docs/going-further/ransackers.md
111
+ - docs/docs/going-further/release_process.md
112
+ - docs/docs/going-further/saving-queries.md
113
+ - docs/docs/going-further/searching-postgres.md
114
+ - docs/docs/going-further/wiki-contributors.md
115
+ - docs/docs/intro.md
116
+ - docs/docusaurus.config.js
117
+ - docs/package.json
118
+ - docs/sidebars.js
119
+ - docs/src/components/HomepageFeatures/index.js
120
+ - docs/src/components/HomepageFeatures/styles.module.css
121
+ - docs/src/css/custom.css
122
+ - docs/src/pages/index.module.css
123
+ - docs/src/pages/markdown-page.md
124
+ - docs/static/.nojekyll
125
+ - docs/static/img/docusaurus.png
126
+ - docs/static/img/favicon.ico
127
+ - docs/static/img/logo.svg
128
+ - docs/static/img/tutorial/docsVersionDropdown.png
129
+ - docs/static/img/tutorial/localeDropdown.png
130
+ - docs/static/img/undraw_docusaurus_mountain.svg
131
+ - docs/static/img/undraw_docusaurus_react.svg
132
+ - docs/static/img/undraw_docusaurus_tree.svg
133
+ - docs/static/logo/ransack-h.png
134
+ - docs/static/logo/ransack-h.svg
135
+ - docs/static/logo/ransack-v.png
136
+ - docs/static/logo/ransack-v.svg
137
+ - docs/static/logo/ransack.png
138
+ - docs/static/logo/ransack.svg
139
+ - docs/yarn.lock
86
140
  - lib/polyamorous.rb
87
- - lib/polyamorous/activerecord_5.2_ruby_2/join_association.rb
88
- - lib/polyamorous/activerecord_5.2_ruby_2/join_dependency.rb
89
- - lib/polyamorous/activerecord_5.2_ruby_2/reflection.rb
90
141
  - lib/polyamorous/activerecord_6.0_ruby_2/join_association.rb
91
142
  - lib/polyamorous/activerecord_6.0_ruby_2/join_dependency.rb
92
143
  - lib/polyamorous/activerecord_6.0_ruby_2/reflection.rb
@@ -157,12 +208,6 @@ files:
157
208
  - lib/ransack/translate.rb
158
209
  - lib/ransack/version.rb
159
210
  - lib/ransack/visitor.rb
160
- - logo/ransack-h.png
161
- - logo/ransack-h.svg
162
- - logo/ransack-v.png
163
- - logo/ransack-v.svg
164
- - logo/ransack.png
165
- - logo/ransack.svg
166
211
  - ransack.gemspec
167
212
  - spec/blueprints/articles.rb
168
213
  - spec/blueprints/comments.rb
@@ -172,6 +217,7 @@ files:
172
217
  - spec/console.rb
173
218
  - spec/helpers/polyamorous_helper.rb
174
219
  - spec/helpers/ransack_helper.rb
220
+ - spec/polyamorous/activerecord_compatibility_spec.rb
175
221
  - spec/polyamorous/join_association_spec.rb
176
222
  - spec/polyamorous/join_dependency_spec.rb
177
223
  - spec/polyamorous/join_spec.rb
@@ -207,10 +253,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
207
253
  - !ruby/object:Gem::Version
208
254
  version: '0'
209
255
  requirements: []
210
- rubygems_version: 3.1.4
256
+ rubygems_version: 3.3.11
211
257
  signing_key:
212
258
  specification_version: 4
213
- summary: Object-based searching for Active Record and Mongoid (currently).
259
+ summary: Object-based searching for Active Record.
214
260
  test_files:
215
261
  - spec/blueprints/articles.rb
216
262
  - spec/blueprints/comments.rb
@@ -220,6 +266,7 @@ test_files:
220
266
  - spec/console.rb
221
267
  - spec/helpers/polyamorous_helper.rb
222
268
  - spec/helpers/ransack_helper.rb
269
+ - spec/polyamorous/activerecord_compatibility_spec.rb
223
270
  - spec/polyamorous/join_association_spec.rb
224
271
  - spec/polyamorous/join_dependency_spec.rb
225
272
  - spec/polyamorous/join_spec.rb
@@ -1,17 +0,0 @@
1
- ## Release Process
2
-
3
- *For maintainers of Ransack.*
4
-
5
- To release a new version of Ransack and publish it to RubyGems, take the following steps:
6
-
7
- - Create a new release, marked `Prerelease`.
8
- - Update the versions file to the new release, commit and push to `master`.
9
- - Update the [`version.rb`](../lib/ransack/version.rb) file to the new release, commit and push to `master`.
10
- - From the terminal, run the following commands:
11
-
12
- ```bash
13
- rake build
14
- rake release
15
- ```
16
-
17
- ![Create a Release](img/create_release.png)
@@ -1,24 +0,0 @@
1
- module Polyamorous
2
- module JoinAssociationExtensions
3
- include SwappingReflectionClass
4
- def self.prepended(base)
5
- base.class_eval { attr_reader :join_type }
6
- end
7
-
8
- def initialize(reflection, children, polymorphic_class = nil, join_type = Arel::Nodes::InnerJoin)
9
- @join_type = join_type
10
- if polymorphic_class && ::ActiveRecord::Base > polymorphic_class
11
- swapping_reflection_klass(reflection, polymorphic_class) do |reflection|
12
- super(reflection, children)
13
- self.reflection.options[:polymorphic] = true
14
- end
15
- else
16
- super(reflection, children)
17
- end
18
- end
19
-
20
- def ==(other)
21
- base_klass == other.base_klass
22
- end
23
- end
24
- end