rails-simple-search 1.2.2 → 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 (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/sql_handler.rb +25 -8
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c6310535f7e545c8b29ca69421df5a8f23efca79dab7ccec6311ed00c632c51d
4
- data.tar.gz: 5379c314d28a7e06acf4e12ec23d78799e81b89843d1abf2717122e2f90cbbfc
3
+ metadata.gz: 359d3f0db9c1b924fbe313abf4a30bf796442a9785fd6914457f3b387a692e8f
4
+ data.tar.gz: d4f5f198779e95ee3bd60d5143f0ff89be4978429d718a1660eca7aafe221abe
5
5
  SHA512:
6
- metadata.gz: 25829545f58e17b7234400719ef2707369cc2a5dbd608d3527c1aafd9a41cf7a5189e4f04857ea263887307faaaa66cce9850c8af024e450fd98095c95ea2989
7
- data.tar.gz: 47bc9c46c5c56017bc1b6c468e811987f1738e1f38c4379217d77f474c62c640bbf1d9e154d7eaa099905b3337f7819d937718964b441af2c6c87958eb169259
6
+ metadata.gz: c66d51b2845ad96dbf656e523a4867e6ea320836cd642b322387846cda18067a567063a3ce59f7f2d09bb4919e37604025ff414f850e8529e660366cd632e749
7
+ data.tar.gz: 2334fa8f8b7ed85fe3558355e292843eb6c6a05c49b880af47589143e749eff08658683545120b09503979e90cec2a6078e48128e3263fb41d95e1d4a7ffa810
data/lib/sql_handler.rb CHANGED
@@ -80,9 +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)
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?
84
85
  base_table = base_class.table_name
85
- asso_table = asso_ref.klass.table_name
86
+ asso_table = poly_asso_type_class&.table_name || asso_ref.klass.table_name
86
87
 
87
88
  @join_count ||= 0
88
89
  return if base_table == asso_table
@@ -93,12 +94,17 @@ module RailsSimpleSearch
93
94
  asso_table_alias = format('A%02d', @join_count)
94
95
 
95
96
  if asso_ref.belongs_to?
96
- @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
97
103
  else
98
104
  join_cond = "#{base_table_alias}.#{base_class.primary_key} = #{asso_table_alias}.#{asso_ref.foreign_key}"
99
105
  join_cond = "#{asso_table_alias}.#{asso_ref.type} = '#{base_class.name}' and #{join_cond}" if asso_ref.type
100
- @joins[asso_table] = [@join_count, asso_table, join_cond]
101
106
  end
107
+ @joins[asso_table] = [@join_count, asso_table, join_cond]
102
108
  end
103
109
 
104
110
  # This method parse a search parameter and its value
@@ -127,11 +133,22 @@ module RailsSimpleSearch
127
133
 
128
134
  base_class = @model_class
129
135
  new_asso_chain = true
130
- until association_fields.empty?
131
- association_fields[0] = base_class.reflect_on_association(association_fields[0].to_sym)
132
- 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
+
133
151
  new_asso_chain = false
134
- base_class = association_fields.shift.klass
135
152
  end
136
153
 
137
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.2
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yi Zhang