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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/lib/sql_handler.rb +25 -9
  4. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 163e11eed3a64c95ca420d49bd6ade5d62bfeaeaff693b3b9586a387f89b7ae1
4
- data.tar.gz: adb762be25ea2e2672d400667764728ca051df3dba97604610f4a5fe43f7d64b
3
+ metadata.gz: 359d3f0db9c1b924fbe313abf4a30bf796442a9785fd6914457f3b387a692e8f
4
+ data.tar.gz: d4f5f198779e95ee3bd60d5143f0ff89be4978429d718a1660eca7aafe221abe
5
5
  SHA512:
6
- metadata.gz: d5f332112cbb55e5d966c4d0bba3044a19f56b0923ccc7f256b59fdcdee2d0e83d3708db5ffc718910b7fbe241c3f6480e5503be02ceb967603443ae5942dff7
7
- data.tar.gz: 765ce655040b6488cb7137fa56afdc9fa3abcee70ca718f6972e0a9f8317ccb794cef9834b071638fc5a96689a22a217fd09c894787ba7d970b6df9a4a0b7ad1
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.0.
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
- debugger
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
- @joins[asso_table] =[@join_count, asso_table, "#{base_table_alias}.#{asso_ref.foreign_key} = #{asso_table_alias}.#{asso_ref.klass.primary_key}"]
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
- until association_fields.empty?
132
- association_fields[0] = base_class.reflect_on_association(association_fields[0].to_sym)
133
- insert_join(base_class, association_fields[0], new_asso_chain)
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)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails-simple-search
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yi Zhang