activerecord-filter 7.0.1 → 8.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/active_record/filter/filter_clause_factory.rb +3 -3
- data/lib/active_record/filter/predicate_builder_extension.rb +5 -6
- data/lib/active_record/filter/query_methods_extension.rb +2 -2
- data/lib/active_record/filter/relation_extension.rb +16 -7
- data/lib/active_record/filter/version.rb +1 -1
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '09732db42dbc93213eb9cb72360f1fe556cb8ee1be65ef4ab9a5ea66460e463e'
|
4
|
+
data.tar.gz: a363687983fb83cdb7db3a65c02e279ec56b57566c2199a844dc6bc973c50382
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b98da863c302b2aba54a339f3a78de317a9dbf11235f318f6ffb750bdb80265e5fde571d1a7d7eef72066bb37ad7e9a70bcbf7095b598b9d6b66911e9fd1db03
|
7
|
+
data.tar.gz: d2969b02282399759622892ad30ef2fc181358bd2c9c2c2051f772c7d08395f951f446588a0cd7a060573580b582970ac614252d9be68a1c937c781cfada928f
|
@@ -1,7 +1,7 @@
|
|
1
1
|
class ActiveRecord::Filter::FilterClauseFactory
|
2
2
|
|
3
|
-
def initialize(
|
4
|
-
@
|
3
|
+
def initialize(model, predicate_builder)
|
4
|
+
@model = model
|
5
5
|
@predicate_builder = predicate_builder
|
6
6
|
end
|
7
7
|
|
@@ -17,6 +17,6 @@ class ActiveRecord::Filter::FilterClauseFactory
|
|
17
17
|
|
18
18
|
protected
|
19
19
|
|
20
|
-
attr_reader :
|
20
|
+
attr_reader :model, :predicate_builder
|
21
21
|
|
22
22
|
end
|
@@ -33,7 +33,7 @@ module ActiveRecord::Filter::PredicateBuilderExtension
|
|
33
33
|
relations << js
|
34
34
|
end
|
35
35
|
end
|
36
|
-
|
36
|
+
elsif reflection = klass._reflections[key.to_sym]
|
37
37
|
if value.is_a?(Hash)
|
38
38
|
relations << if reflection.polymorphic?
|
39
39
|
value = value.dup
|
@@ -65,11 +65,11 @@ module ActiveRecord::Filter::PredicateBuilderExtension
|
|
65
65
|
elsif value != true && value != false && value != 'true' && value != 'false' && !value.nil?
|
66
66
|
relations << key
|
67
67
|
end
|
68
|
-
elsif !klass.columns_hash.has_key?(key.to_s) && key.to_s.end_with?('_ids') && reflection = klass._reflections[key.to_s.gsub(/_ids$/, 's')]
|
68
|
+
elsif !klass.columns_hash.has_key?(key.to_s) && key.to_s.end_with?('_ids') && reflection = klass._reflections[key.to_s.gsub(/_ids$/, 's').to_sym]
|
69
69
|
relations << reflection.name
|
70
70
|
elsif reflection = klass.reflect_on_all_associations(:has_and_belongs_to_many).find {|r| r.join_table == key.to_s && value.keys.first.to_s == r.association_foreign_key.to_s }
|
71
|
-
reflection = klass._reflections[klass._reflections[reflection.name
|
72
|
-
relations << {reflection.name => build_filter_joins(reflection.klass, value)}
|
71
|
+
reflection = klass._reflections[klass._reflections[reflection.name].send(:delegate_reflection).options[:through]]
|
72
|
+
relations << { reflection.name => build_filter_joins(reflection.klass, value) }
|
73
73
|
else
|
74
74
|
{key => value}
|
75
75
|
end
|
@@ -314,9 +314,8 @@ module ActiveRecord::Filter::PredicateBuilderExtension
|
|
314
314
|
|
315
315
|
end
|
316
316
|
|
317
|
-
|
318
317
|
def expand_filter_for_join_table(relation, value, relation_trail, alias_tracker)
|
319
|
-
relation = relation.active_record._reflections[relation.active_record._reflections[relation.name
|
318
|
+
relation = relation.active_record._reflections[relation.active_record._reflections[relation.name].send(:delegate_reflection).options[:through]]
|
320
319
|
builder = self.class.new(ActiveRecord::TableMetadata.new(
|
321
320
|
relation.klass,
|
322
321
|
alias_tracker.aliased_table_for_relation(relation_trail + [relation.name], relation.klass.arel_table) { relation.alias_candidate(table.arel_table.name || relation.klass.arel_table) },
|
@@ -30,7 +30,7 @@ private
|
|
30
30
|
|
31
31
|
joins = joins_values.dup
|
32
32
|
if joins.last.is_a?(ActiveRecord::Associations::JoinDependency)
|
33
|
-
stashed_eager_load = joins.pop if joins.last.base_klass ==
|
33
|
+
stashed_eager_load = joins.pop if joins.last.base_klass == model
|
34
34
|
end
|
35
35
|
|
36
36
|
joins.each_with_index do |join, i|
|
@@ -49,7 +49,7 @@ private
|
|
49
49
|
buckets[:named_join] = select_named_joins(joins, buckets[:stashed_join]) do |join|
|
50
50
|
if join.is_a?(Arel::Nodes::Join)
|
51
51
|
buckets[:join_node] << join
|
52
|
-
elsif join.is_a?(CTEJoin)
|
52
|
+
elsif join.is_a?(ActiveRecord::QueryMethods::CTEJoin)
|
53
53
|
buckets[:join_node] << build_with_join_node(join.name)
|
54
54
|
else
|
55
55
|
raise "unknown class: %s" % join.class.name
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module ActiveRecord::Filter::RelationExtension
|
2
2
|
|
3
|
-
def initialize(
|
3
|
+
def initialize(*, **)
|
4
4
|
@filters = []
|
5
5
|
super
|
6
6
|
end
|
@@ -49,13 +49,22 @@ module ActiveRecord::Filter::RelationExtension
|
|
49
49
|
@filter_clause_factory ||= ActiveRecord::Filter::FilterClauseFactory.new(klass, predicate_builder)
|
50
50
|
end
|
51
51
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
52
|
+
if ActiveRecord.version >= "7.2"
|
53
|
+
def build_arel(connection, aliases = nil)
|
54
|
+
arel = super
|
55
|
+
my_alias_tracker = ActiveRecord::Associations::AliasTracker.create(model.connection_pool, table.name, [])
|
56
|
+
build_filters(arel, my_alias_tracker)
|
57
|
+
arel
|
58
|
+
end
|
59
|
+
else
|
60
|
+
def build_arel(aliases = nil)
|
61
|
+
arel = super
|
62
|
+
my_alias_tracker = ActiveRecord::Associations::AliasTracker.create(connection, table.name, [])
|
63
|
+
build_filters(arel, my_alias_tracker)
|
64
|
+
arel
|
65
|
+
end
|
57
66
|
end
|
58
|
-
|
67
|
+
|
59
68
|
def build_filters(manager, alias_tracker)
|
60
69
|
@filters.each do |filters|
|
61
70
|
manager.where(filter_clause_factory.build(filters, alias_tracker).ast)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-filter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 8.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jon Bracy
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-01-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 7.
|
19
|
+
version: 7.1.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 7.
|
26
|
+
version: 7.1.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: arel-extensions
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 7.0
|
33
|
+
version: 7.1.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 7.0
|
40
|
+
version: 7.1.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: pg
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -232,7 +232,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
232
232
|
- !ruby/object:Gem::Version
|
233
233
|
version: '0'
|
234
234
|
requirements: []
|
235
|
-
rubygems_version: 3.5.
|
235
|
+
rubygems_version: 3.5.21
|
236
236
|
signing_key:
|
237
237
|
specification_version: 4
|
238
238
|
summary: A safe way to accept user parameters and query against your ActiveRecord
|