ransack 1.8.10 → 2.0.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.
- checksums.yaml +4 -4
- data/.gitignore +0 -1
- data/.travis.yml +12 -3
- data/CHANGELOG.md +29 -5
- data/Gemfile +1 -9
- data/README.md +16 -25
- data/Rakefile +1 -22
- data/lib/polyamorous.rb +5 -18
- data/lib/polyamorous/activerecord_5.1_ruby_2/join_dependency.rb +2 -2
- data/lib/polyamorous/activerecord_5.2.0_ruby_2/join_dependency.rb +2 -2
- data/lib/polyamorous/activerecord_5.2.1_ruby_2/join_association.rb +38 -0
- data/lib/polyamorous/activerecord_5.2.1_ruby_2/join_dependency.rb +75 -0
- data/lib/ransack/adapters/active_record.rb +0 -9
- data/lib/ransack/adapters/active_record/base.rb +8 -0
- data/lib/ransack/adapters/active_record/context.rb +118 -182
- data/lib/ransack/adapters/active_record/ransack/context.rb +1 -8
- data/lib/ransack/adapters/active_record/ransack/translate.rb +1 -5
- data/lib/ransack/constants.rb +1 -1
- data/lib/ransack/context.rb +4 -0
- data/lib/ransack/nodes/value.rb +1 -1
- data/lib/ransack/search.rb +1 -1
- data/lib/ransack/version.rb +1 -1
- data/ransack.gemspec +4 -3
- data/spec/helpers/polyamorous_helper.rb +7 -9
- data/spec/ransack/adapters/active_record/base_spec.rb +35 -0
- data/spec/ransack/adapters/active_record/context_spec.rb +3 -6
- data/spec/ransack/helpers/form_builder_spec.rb +3 -15
- data/spec/ransack/helpers/form_helper_spec.rb +11 -99
- data/spec/ransack/join_association_spec.rb +1 -6
- data/spec/ransack/join_dependency_spec.rb +1 -6
- data/spec/ransack/search_spec.rb +2 -2
- data/spec/support/schema.rb +3 -21
- metadata +10 -83
- data/lib/polyamorous/activerecord_3_and_4.0_ruby_1.9/join_association.rb +0 -76
- data/lib/polyamorous/activerecord_3_and_4.0_ruby_1.9/join_dependency.rb +0 -96
- data/lib/polyamorous/activerecord_4.1_ruby_1.9/join_association.rb +0 -2
- data/lib/polyamorous/activerecord_4.1_ruby_1.9/join_dependency.rb +0 -4
- data/lib/polyamorous/activerecord_4.1_ruby_2/join_association.rb +0 -2
- data/lib/polyamorous/activerecord_4.1_ruby_2/join_dependency.rb +0 -3
- data/lib/polyamorous/activerecord_4.1_ruby_2/make_polyamorous_inner_joins.rb +0 -14
- data/lib/polyamorous/activerecord_4.2_ruby_1.9/join_association.rb +0 -46
- data/lib/polyamorous/activerecord_4.2_ruby_1.9/join_dependency.rb +0 -87
- data/lib/polyamorous/activerecord_4.2_ruby_2/join_association.rb +0 -2
- data/lib/polyamorous/activerecord_4.2_ruby_2/join_dependency.rb +0 -24
- data/lib/ransack/adapters/active_record/3.0/compat.rb +0 -173
- data/lib/ransack/adapters/active_record/3.0/context.rb +0 -203
- data/lib/ransack/adapters/active_record/3.1/context.rb +0 -212
- data/lib/ransack/adapters/active_record/3.2/context.rb +0 -44
- data/lib/ransack/adapters/mongoid.rb +0 -15
- data/lib/ransack/adapters/mongoid/3.2/.gitkeep +0 -0
- data/lib/ransack/adapters/mongoid/attributes/attribute.rb +0 -37
- data/lib/ransack/adapters/mongoid/attributes/order_predications.rb +0 -17
- data/lib/ransack/adapters/mongoid/attributes/predications.rb +0 -141
- data/lib/ransack/adapters/mongoid/base.rb +0 -134
- data/lib/ransack/adapters/mongoid/context.rb +0 -212
- data/lib/ransack/adapters/mongoid/inquiry_hash.rb +0 -23
- data/lib/ransack/adapters/mongoid/ransack/constants.rb +0 -88
- data/lib/ransack/adapters/mongoid/ransack/context.rb +0 -59
- data/lib/ransack/adapters/mongoid/ransack/nodes/condition.rb +0 -22
- data/lib/ransack/adapters/mongoid/ransack/translate.rb +0 -13
- data/lib/ransack/adapters/mongoid/ransack/visitor.rb +0 -18
- data/lib/ransack/adapters/mongoid/table.rb +0 -35
- data/spec/mongoid/adapters/mongoid/base_spec.rb +0 -314
- data/spec/mongoid/adapters/mongoid/context_spec.rb +0 -56
- data/spec/mongoid/configuration_spec.rb +0 -162
- data/spec/mongoid/dependencies_spec.rb +0 -8
- data/spec/mongoid/helpers/ransack_helper.rb +0 -11
- data/spec/mongoid/nodes/condition_spec.rb +0 -49
- data/spec/mongoid/nodes/grouping_spec.rb +0 -13
- data/spec/mongoid/predicate_spec.rb +0 -155
- data/spec/mongoid/search_spec.rb +0 -445
- data/spec/mongoid/support/mongoid.yml +0 -11
- data/spec/mongoid/support/schema.rb +0 -135
- data/spec/mongoid/translate_spec.rb +0 -14
- data/spec/mongoid_spec_helper.rb +0 -63
- data/spec/ransack/dependencies_spec.rb +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 35bd0ff11964ff0c0308e7b663a3284510e7f5da71f6799bf061992b6515b616
|
4
|
+
data.tar.gz: 415ef127b34f85c7fdcf48e1f66f764d060cefacfa3a9a3d013688ecc38a07da
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 56239015bf48bc38842fa9f09325a04dc047299c0f17da8429a9a1ea95cf3aedf9d07117da157cc036a8fb8280d2925cf318b62a7b66b8a99acaa8d8a48e4b30
|
7
|
+
data.tar.gz: 574ac22523e67dddce34c18a929a9624cde30de3c14e2c53d6476c8136f48541879c1fd4b89467786e3f128327f79f4b6617561de7d11d5fbf6f6e888d37a212
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -7,6 +7,18 @@ rvm:
|
|
7
7
|
- 2.2
|
8
8
|
|
9
9
|
env:
|
10
|
+
- RAILS=5-2-stable DB=sqlite3
|
11
|
+
- RAILS=5-2-stable DB=mysql
|
12
|
+
- RAILS=5-2-stable DB=postgres
|
13
|
+
|
14
|
+
- RAILS=v5.2.1 DB=sqlite3
|
15
|
+
- RAILS=v5.2.1 DB=mysql
|
16
|
+
- RAILS=v5.2.1 DB=postgres
|
17
|
+
|
18
|
+
- RAILS=v5.2.0 DB=sqlite3
|
19
|
+
- RAILS=v5.2.0 DB=mysql
|
20
|
+
- RAILS=v5.2.0 DB=postgres
|
21
|
+
|
10
22
|
- RAILS=5-1-stable DB=sqlite3
|
11
23
|
- RAILS=5-1-stable DB=mysql
|
12
24
|
- RAILS=5-1-stable DB=postgres
|
@@ -15,9 +27,6 @@ env:
|
|
15
27
|
- RAILS=5-0-stable DB=mysql
|
16
28
|
- RAILS=5-0-stable DB=postgres
|
17
29
|
|
18
|
-
- RAILS=4-2-stable DB=sqlite3
|
19
|
-
- RAILS=4-2-stable DB=mysql
|
20
|
-
- RAILS=4-2-stable DB=postgres
|
21
30
|
matrix:
|
22
31
|
allow_failures:
|
23
32
|
- env: RAILS=5-2-stable DB=sqlite3
|
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,32 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
-
##
|
3
|
+
## Unreleased
|
4
4
|
|
5
|
-
|
5
|
+
## Version 2.0.0 - 2018-08-09
|
6
|
+
|
7
|
+
* Add support for Active Record 5.2.1
|
8
|
+
PR [#938](https://github.com/activerecord-hackery/ransack/pull/938)
|
9
|
+
|
10
|
+
* Fix sort with joins on existing association
|
11
|
+
PR [#937](https://github.com/activerecord-hackery/ransack/pull/937)
|
12
|
+
|
13
|
+
* Add the ability to skip arg sanitization on a per scope basis. Using
|
14
|
+
`ransackable_scopes_skip_sanitize_args`, users can define a list of
|
15
|
+
scopes which will bypass parameter sanitization. This allows passing 0,
|
16
|
+
1, t, f, etc. to a scope as an actual parameter.
|
17
|
+
PR [#933](https://github.com/activerecord-hackery/ransack/pull/933)
|
18
|
+
|
19
|
+
* Drop support for Active Record < 5.0.
|
20
|
+
PR [#929](https://github.com/activerecord-hackery/ransack/pull/929)
|
21
|
+
|
22
|
+
* Extract mongoid support to a separate gem.
|
23
|
+
PR [#928](https://github.com/activerecord-hackery/ransack/pull/928)
|
24
|
+
|
25
|
+
* Absorb polyamorous
|
26
|
+
PR [#927](https://github.com/activerecord-hackery/ransack/pull/927)
|
27
|
+
|
28
|
+
* Fix broken monkey patch of #form_with
|
29
|
+
PR [#922](https://github.com/activerecord-hackery/ransack/pull/922)
|
6
30
|
|
7
31
|
## Version 1.8.8 - 2018-03-16
|
8
32
|
* Fix multiple database support
|
@@ -19,14 +43,14 @@
|
|
19
43
|
|
20
44
|
* Rails 5.2 support
|
21
45
|
PR [#868](https://github.com/activerecord-hackery/ransack/pull/868)
|
22
|
-
|
46
|
+
|
23
47
|
* Lock pg gem to 0.21 to support older releases
|
24
48
|
|
25
49
|
* Warnings cleanup
|
26
50
|
PR [#867](https://github.com/activerecord-hackery/ransack/pull/867)
|
27
51
|
|
28
52
|
* Wildcard escaping
|
29
|
-
PR [#866]
|
53
|
+
PR [#866]
|
30
54
|
|
31
55
|
## Version 1.8.6 - 2018-01-23
|
32
56
|
|
@@ -40,7 +64,7 @@
|
|
40
64
|
|
41
65
|
## Version 1.8.5
|
42
66
|
|
43
|
-
### Added
|
67
|
+
### Added
|
44
68
|
|
45
69
|
* Added Turkish Translations
|
46
70
|
PR [#835](https://github.com/activerecord-hackery/ransack/issues/835).
|
data/Gemfile
CHANGED
@@ -22,7 +22,7 @@ when /^v/ # A tagged version
|
|
22
22
|
gem 'activerecord', require: false
|
23
23
|
gem 'actionpack'
|
24
24
|
end
|
25
|
-
if rails
|
25
|
+
if rails >= 'v5.2.0'
|
26
26
|
gem 'mysql2', '~> 0.4.4'
|
27
27
|
end
|
28
28
|
else
|
@@ -40,14 +40,6 @@ else
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
-
if ENV['DB'] =~ /mongoid4/
|
44
|
-
gem 'mongoid', '~> 4.0.0', require: false
|
45
|
-
end
|
46
|
-
|
47
|
-
if ENV['DB'] =~ /mongoid5/
|
48
|
-
gem 'mongoid', '~> 5.0.0', require: false
|
49
|
-
end
|
50
|
-
|
51
43
|
group :test do
|
52
44
|
# TestUnit was removed from Ruby 2.2 but still needed for testing Rails 3.x.
|
53
45
|
gem 'test-unit', '~> 3.0' if RUBY_VERSION >= '2.2'
|
data/README.md
CHANGED
@@ -1,28 +1,5 @@
|
|
1
1
|
# Ransack
|
2
2
|
|
3
|
-
### Maintainer Wanted
|
4
|
-
|
5
|
-
A note from [Sean](https://github.com/seanfcarroll).
|
6
|
-
Ransack is a fantastic gem, and a key part of many Rails projects. It is also a core component of [ActiveAdmin](https://github.com/activeadmin/activeadmin) and generally a great way to add fairly complex search and filtering without having to resort to external services, such as Elasticsearch.
|
7
|
-
|
8
|
-
In my humble opinion, Ransack can be much more, if it does a bit less. What I mean is that the API vector of Ransack is quite large, and really has been issue-driven. There are complications with Polymorphic relations, complex joins and MongoDB. It's not clear sometimes if there is a bug or not.
|
9
|
-
|
10
|
-
I was hoping to lead Ransack to version 2.0, and in my opinion this would have included:
|
11
|
-
|
12
|
-
- Absorbing Polyamorous
|
13
|
-
- Splitting MongoDB support into a seperate gem
|
14
|
-
- Dropping support for older Rails versions; strictly follow the [Rails support policy](http://guides.rubyonrails.org/maintenance_policy.html). This is important as the codebase is littered with code for de-supported Rails versions
|
15
|
-
- Add a generator to build in Ransack with a scaffold
|
16
|
-
- Generate tests for Ransack-enabled applications
|
17
|
-
- Update the Wiki / docs with lots of examples of 'how-to', questions are the majority of issues on Ransack
|
18
|
-
- Increase supported translations
|
19
|
-
|
20
|
-
Unfortunately I am quite occupied at present with several projects, including [crowdAI](https://github.com/crowdAI/crowdai), and I will need to step down as a maintainer. I have also posted it [here](https://github.com/pickhardt/maintainers-wanted).
|
21
|
-
|
22
|
-
If you want to step up, please contact me on gmail as **sfcarroll**
|
23
|
-
|
24
|
-
|
25
|
-
|
26
3
|
[](https://travis-ci.org/activerecord-hackery/ransack)
|
27
4
|
[](http://badge.fury.io/rb/ransack)
|
28
5
|
[](https://codeclimate.com/github/activerecord-hackery/ransack)
|
@@ -448,7 +425,7 @@ List of all possible predicates
|
|
448
425
|
| `*_lteq` | less than or equal | |
|
449
426
|
| `*_gt` | greater than | |
|
450
427
|
| `*_gteq` | greater than or equal | |
|
451
|
-
| `*_present` | not null and not empty |
|
428
|
+
| `*_present` | not null and not empty | Only compatible with string columns. Example: `q[name_present]=1` (SQL: `col is not null AND col != ''`) |
|
452
429
|
| `*_blank` | is null or empty. | (SQL: `col is null OR col = ''`) |
|
453
430
|
| `*_null` | is null | |
|
454
431
|
| `*_not_null` | is not null | |
|
@@ -734,7 +711,7 @@ boolean. This is currently resolved in Rails 5 :smiley:
|
|
734
711
|
However, perhaps you have `user_id: [1]` and you do not want Ransack to convert
|
735
712
|
1 into a boolean. (Values sanitized to booleans can be found in the
|
736
713
|
[constants.rb](https://github.com/activerecord-hackery/ransack/blob/master/lib/ransack/constants.rb#L28)).
|
737
|
-
To turn this off, and handle type conversions yourself, set
|
714
|
+
To turn this off globally, and handle type conversions yourself, set
|
738
715
|
`sanitize_custom_scope_booleans` to false in an initializer file like
|
739
716
|
config/initializers/ransack.rb:
|
740
717
|
|
@@ -744,6 +721,19 @@ Ransack.configure do |c|
|
|
744
721
|
end
|
745
722
|
```
|
746
723
|
|
724
|
+
To turn this off on a per-scope basis Ransack adds the following method to
|
725
|
+
`ActiveRecord::Base` that you can redefine to selectively override sanitization:
|
726
|
+
|
727
|
+
`ransackable_scopes_skip_sanitize_args`
|
728
|
+
|
729
|
+
Add the scope you wish to bypass this behavior to ransackable_scopes_skip_sanitize_args:
|
730
|
+
|
731
|
+
```ruby
|
732
|
+
def ransackable_scopes_skip_sanitize_args
|
733
|
+
[:scope_to_skip_sanitize_args]
|
734
|
+
end
|
735
|
+
```
|
736
|
+
|
747
737
|
Scopes are a recent addition to Ransack and currently have a few caveats:
|
748
738
|
First, a scope involving child associations needs to be defined in the parent
|
749
739
|
table model, not in the child model. Second, scopes with an array as an
|
@@ -875,6 +865,7 @@ en:
|
|
875
865
|
|
876
866
|
## Mongoid
|
877
867
|
|
868
|
+
Mongoid support has been moved to its own gem at [ransack-mongoid](https://github.com/activerecord-hackery/ransack-mongoid).
|
878
869
|
Ransack works with Mongoid in the same way as Active Record, except that with
|
879
870
|
Mongoid, associations are not currently supported. Demo source code may be found
|
880
871
|
[here](https://github.com/Zhomart/ransack-mongodb-demo). A `result` method
|
data/Rakefile
CHANGED
@@ -11,17 +11,8 @@ RSpec::Core::RakeTask.new(:spec) do |rspec|
|
|
11
11
|
# rspec.rspec_opts = ['--backtrace']
|
12
12
|
end
|
13
13
|
|
14
|
-
RSpec::Core::RakeTask.new(:mongoid) do |rspec|
|
15
|
-
ENV['SPEC'] = 'spec/mongoid/**/*_spec.rb'
|
16
|
-
rspec.rspec_opts = ['--backtrace']
|
17
|
-
end
|
18
|
-
|
19
14
|
task :default do
|
20
|
-
|
21
|
-
Rake::Task["mongoid"].invoke
|
22
|
-
else
|
23
|
-
Rake::Task["spec"].invoke
|
24
|
-
end
|
15
|
+
Rake::Task["spec"].invoke
|
25
16
|
end
|
26
17
|
|
27
18
|
desc "Open an irb session with Ransack and the sample data used in specs"
|
@@ -31,15 +22,3 @@ task :console do
|
|
31
22
|
ARGV.clear
|
32
23
|
Pry.start
|
33
24
|
end
|
34
|
-
|
35
|
-
desc "Open an irb session with Ransack, Mongoid and the sample data used in specs"
|
36
|
-
task :mongoid_console do
|
37
|
-
require 'irb'
|
38
|
-
require 'irb/completion'
|
39
|
-
require 'pry'
|
40
|
-
require 'mongoid'
|
41
|
-
require File.expand_path('../lib/ransack.rb', __FILE__)
|
42
|
-
require File.expand_path('../spec/mongoid/support/schema.rb', __FILE__)
|
43
|
-
ARGV.clear
|
44
|
-
Pry.start
|
45
|
-
end
|
data/lib/polyamorous.rb
CHANGED
@@ -24,28 +24,15 @@ if defined?(::ActiveRecord)
|
|
24
24
|
require 'polyamorous/swapping_reflection_class'
|
25
25
|
|
26
26
|
ar_version = ::ActiveRecord::VERSION::STRING[0,3]
|
27
|
-
ar_version =
|
28
|
-
ar_version = ::ActiveRecord::VERSION::STRING[0,5] if ar_version == '5.2'
|
29
|
-
|
30
|
-
method, ruby_version =
|
31
|
-
if RUBY_VERSION >= '2.0' && ar_version >= '4.1'
|
32
|
-
# Ruby 2; we can use `prepend` to patch Active Record cleanly.
|
33
|
-
[:prepend, '2']
|
34
|
-
else
|
35
|
-
# Ruby 1.9; we must use `alias_method` to patch Active Record.
|
36
|
-
[:include, '1.9']
|
37
|
-
end
|
27
|
+
ar_version = ::ActiveRecord::VERSION::STRING[0,5] if ar_version >= '5.2'
|
38
28
|
|
39
29
|
%w(join_association join_dependency).each do |file|
|
40
|
-
require "polyamorous/activerecord_#{ar_version}
|
30
|
+
require "polyamorous/activerecord_#{ar_version}_ruby_2/#{file}"
|
41
31
|
end
|
42
32
|
|
43
|
-
Polyamorous::JoinDependency.send(
|
44
|
-
|
45
|
-
|
46
|
-
.send(:prepend, Polyamorous::JoinDependencyExtensions::ClassMethods)
|
47
|
-
end
|
48
|
-
Polyamorous::JoinAssociation.send(method, Polyamorous::JoinAssociationExtensions)
|
33
|
+
Polyamorous::JoinDependency.send(:prepend, Polyamorous::JoinDependencyExtensions)
|
34
|
+
Polyamorous::JoinDependency.singleton_class.send(:prepend, Polyamorous::JoinDependencyExtensions::ClassMethods)
|
35
|
+
Polyamorous::JoinAssociation.send(:prepend, Polyamorous::JoinAssociationExtensions)
|
49
36
|
|
50
37
|
Polyamorous::JoinBase.class_eval do
|
51
38
|
if method_defined?(:active_record)
|
@@ -9,7 +9,7 @@ module Polyamorous
|
|
9
9
|
if name.is_a? Join
|
10
10
|
reflection = find_reflection base_klass, name.name
|
11
11
|
reflection.check_validity!
|
12
|
-
reflection.check_eager_loadable!
|
12
|
+
reflection.check_eager_loadable!
|
13
13
|
|
14
14
|
klass = if reflection.polymorphic?
|
15
15
|
name.klass || base_klass
|
@@ -20,7 +20,7 @@ module Polyamorous
|
|
20
20
|
else
|
21
21
|
reflection = find_reflection base_klass, name
|
22
22
|
reflection.check_validity!
|
23
|
-
reflection.check_eager_loadable!
|
23
|
+
reflection.check_eager_loadable!
|
24
24
|
|
25
25
|
if reflection.polymorphic?
|
26
26
|
raise ActiveRecord::EagerLoadPolymorphicError.new(reflection)
|
@@ -9,7 +9,7 @@ module Polyamorous
|
|
9
9
|
if name.is_a? Join
|
10
10
|
reflection = find_reflection base_klass, name.name
|
11
11
|
reflection.check_validity!
|
12
|
-
reflection.check_eager_loadable!
|
12
|
+
reflection.check_eager_loadable!
|
13
13
|
|
14
14
|
klass = if reflection.polymorphic?
|
15
15
|
name.klass || base_klass
|
@@ -20,7 +20,7 @@ module Polyamorous
|
|
20
20
|
else
|
21
21
|
reflection = find_reflection base_klass, name
|
22
22
|
reflection.check_validity!
|
23
|
-
reflection.check_eager_loadable!
|
23
|
+
reflection.check_eager_loadable!
|
24
24
|
|
25
25
|
if reflection.polymorphic?
|
26
26
|
raise ActiveRecord::EagerLoadPolymorphicError.new(reflection)
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# active_record_5.2.1_ruby_2/join_association.rb
|
2
|
+
|
3
|
+
module Polyamorous
|
4
|
+
module JoinAssociationExtensions
|
5
|
+
include SwappingReflectionClass
|
6
|
+
def self.prepended(base)
|
7
|
+
base.class_eval { attr_reader :join_type }
|
8
|
+
end
|
9
|
+
|
10
|
+
def initialize(reflection, children, polymorphic_class = nil, join_type = Arel::Nodes::InnerJoin)
|
11
|
+
@join_type = join_type
|
12
|
+
if polymorphic_class && ::ActiveRecord::Base > polymorphic_class
|
13
|
+
swapping_reflection_klass(reflection, polymorphic_class) do |reflection|
|
14
|
+
super(reflection, children)
|
15
|
+
self.reflection.options[:polymorphic] = true
|
16
|
+
end
|
17
|
+
else
|
18
|
+
super(reflection, children)
|
19
|
+
end
|
20
|
+
end
|
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
|
+
def build_constraint(klass, table, key, foreign_table, foreign_key)
|
30
|
+
if reflection.polymorphic?
|
31
|
+
super(klass, table, key, foreign_table, foreign_key)
|
32
|
+
.and(foreign_table[reflection.foreign_type].eq(reflection.klass.name))
|
33
|
+
else
|
34
|
+
super(klass, table, key, foreign_table, foreign_key)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# active_record_5.2.1_ruby_2/join_dependency.rb
|
2
|
+
|
3
|
+
module Polyamorous
|
4
|
+
module JoinDependencyExtensions
|
5
|
+
# Replaces ActiveRecord::Associations::JoinDependency#build
|
6
|
+
#
|
7
|
+
def build(associations, base_klass)
|
8
|
+
associations.map do |name, right|
|
9
|
+
if name.is_a? Join
|
10
|
+
reflection = find_reflection base_klass, name.name
|
11
|
+
reflection.check_validity!
|
12
|
+
reflection.check_eager_loadable!
|
13
|
+
|
14
|
+
klass = if reflection.polymorphic?
|
15
|
+
name.klass || base_klass
|
16
|
+
else
|
17
|
+
reflection.klass
|
18
|
+
end
|
19
|
+
JoinAssociation.new(reflection, build(right, klass), name.klass, name.type)
|
20
|
+
else
|
21
|
+
reflection = find_reflection base_klass, name
|
22
|
+
reflection.check_validity!
|
23
|
+
reflection.check_eager_loadable!
|
24
|
+
|
25
|
+
if reflection.polymorphic?
|
26
|
+
raise ActiveRecord::EagerLoadPolymorphicError.new(reflection)
|
27
|
+
end
|
28
|
+
JoinAssociation.new(reflection, build(right, reflection.klass))
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
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
|
+
module ClassMethods
|
52
|
+
# Prepended before ActiveRecord::Associations::JoinDependency#walk_tree
|
53
|
+
#
|
54
|
+
def walk_tree(associations, hash)
|
55
|
+
case associations
|
56
|
+
when TreeNode
|
57
|
+
associations.add_to_tree(hash)
|
58
|
+
when Hash
|
59
|
+
associations.each do |k, v|
|
60
|
+
cache =
|
61
|
+
if TreeNode === k
|
62
|
+
k.add_to_tree(hash)
|
63
|
+
else
|
64
|
+
hash[k] ||= {}
|
65
|
+
end
|
66
|
+
walk_tree(v, cache)
|
67
|
+
end
|
68
|
+
else
|
69
|
+
super(associations, hash)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
end
|
@@ -12,12 +12,3 @@ ActiveSupport.on_load(:active_record) do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
require 'ransack/adapters/active_record/context'
|
15
|
-
|
16
|
-
case ActiveRecord::VERSION::STRING
|
17
|
-
when /^3\.0\./
|
18
|
-
require 'ransack/adapters/active_record/3.0/context'
|
19
|
-
when /^3\.1\./
|
20
|
-
require 'ransack/adapters/active_record/3.1/context'
|
21
|
-
when /^3\.2\./
|
22
|
-
require 'ransack/adapters/active_record/3.2/context'
|
23
|
-
end
|
@@ -64,6 +64,14 @@ module Ransack
|
|
64
64
|
[]
|
65
65
|
end
|
66
66
|
|
67
|
+
# ransack_scope_skip_sanitize_args, by default, returns an empty array.
|
68
|
+
# i.e. use the sanitize_scope_args setting to determin if args should be converted.
|
69
|
+
# For overriding with a list of scopes which should be passed the args as-is.
|
70
|
+
#
|
71
|
+
def ransackable_scopes_skip_sanitize_args
|
72
|
+
[]
|
73
|
+
end
|
74
|
+
|
67
75
|
end
|
68
76
|
end
|
69
77
|
end
|