rails-simple-search 1.2.1 → 1.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.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/sql_handler.rb +25 -9
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 359d3f0db9c1b924fbe313abf4a30bf796442a9785fd6914457f3b387a692e8f
|
4
|
+
data.tar.gz: d4f5f198779e95ee3bd60d5143f0ff89be4978429d718a1660eca7aafe221abe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c66d51b2845ad96dbf656e523a4867e6ea320836cd642b322387846cda18067a567063a3ce59f7f2d09bb4919e37604025ff414f850e8529e660366cd632e749
|
7
|
+
data.tar.gz: 2334fa8f8b7ed85fe3558355e292843eb6c6a05c49b880af47589143e749eff08658683545120b09503979e90cec2a6078e48128e3263fb41d95e1d4a7ffa810
|
data/README.md
CHANGED
@@ -188,7 +188,7 @@ From version 1.1.0 on, we started to support the "or" relation, e.g., we can use
|
|
188
188
|
|
189
189
|
From version 1.1.3 on, we started to support Rails 5.
|
190
190
|
|
191
|
-
For Rails 7, please use version 1.2.
|
191
|
+
For Rails 7, please use version 1.2.2.
|
192
192
|
|
193
193
|
## License
|
194
194
|
|
data/lib/sql_handler.rb
CHANGED
@@ -80,10 +80,10 @@ module RailsSimpleSearch
|
|
80
80
|
format('A%02d', @joins[table_name][0])
|
81
81
|
end
|
82
82
|
|
83
|
-
def insert_join(base_class, asso_ref, new_asso_chain)
|
84
|
-
|
83
|
+
def insert_join(base_class, asso_ref, new_asso_chain, poly_asso_type_class=nil)
|
84
|
+
return if asso_ref.polymorphic? && poly_asso_type_class.blank?
|
85
85
|
base_table = base_class.table_name
|
86
|
-
asso_table = asso_ref.klass.table_name
|
86
|
+
asso_table = poly_asso_type_class&.table_name || asso_ref.klass.table_name
|
87
87
|
|
88
88
|
@join_count ||= 0
|
89
89
|
return if base_table == asso_table
|
@@ -94,12 +94,17 @@ module RailsSimpleSearch
|
|
94
94
|
asso_table_alias = format('A%02d', @join_count)
|
95
95
|
|
96
96
|
if asso_ref.belongs_to?
|
97
|
-
|
97
|
+
if asso_ref.polymorphic?
|
98
|
+
join_cond = "#{base_table_alias}.#{asso_ref.foreign_key} = #{asso_table_alias}.#{poly_asso_type_class.primary_key}"
|
99
|
+
join_cond = "#{base_table_alias}.#{asso_ref.foreign_type} = '#{poly_asso_type_class.name}' and #{join_cond}"
|
100
|
+
else
|
101
|
+
join_cond = "#{base_table_alias}.#{asso_ref.foreign_key} = #{asso_table_alias}.#{asso_ref.klass.primary_key}"
|
102
|
+
end
|
98
103
|
else
|
99
104
|
join_cond = "#{base_table_alias}.#{base_class.primary_key} = #{asso_table_alias}.#{asso_ref.foreign_key}"
|
100
105
|
join_cond = "#{asso_table_alias}.#{asso_ref.type} = '#{base_class.name}' and #{join_cond}" if asso_ref.type
|
101
|
-
@joins[asso_table] = [@join_count, asso_table, join_cond]
|
102
106
|
end
|
107
|
+
@joins[asso_table] = [@join_count, asso_table, join_cond]
|
103
108
|
end
|
104
109
|
|
105
110
|
# This method parse a search parameter and its value
|
@@ -128,11 +133,22 @@ module RailsSimpleSearch
|
|
128
133
|
|
129
134
|
base_class = @model_class
|
130
135
|
new_asso_chain = true
|
131
|
-
|
132
|
-
|
133
|
-
|
136
|
+
while (current_association_string = association_fields.shift)
|
137
|
+
# polymorphic association with solid target table_name
|
138
|
+
# such as 'commentable:post'
|
139
|
+
if current_association_string.include?(':')
|
140
|
+
poly_asso_name, poly_asso_type = current_association_string.split(':')
|
141
|
+
current_association = base_class.reflect_on_association(poly_asso_name.to_sym)
|
142
|
+
poly_asso_type_class = poly_asso_type.downcase.camelize.constantize
|
143
|
+
insert_join(base_class, current_association, new_asso_chain, poly_asso_type_class)
|
144
|
+
base_class = poly_asso_type_class
|
145
|
+
else
|
146
|
+
current_association = base_class.reflect_on_association(current_association_string.to_sym)
|
147
|
+
insert_join(base_class, current_association, new_asso_chain)
|
148
|
+
base_class = current_association.klass
|
149
|
+
end
|
150
|
+
|
134
151
|
new_asso_chain = false
|
135
|
-
base_class = association_fields.shift.klass
|
136
152
|
end
|
137
153
|
|
138
154
|
association_alias = table_name_to_alias(base_class.table_name)
|