Skip to content

Commit bc1e26b

Browse files
committed
Added option to make autocomplete case sensitive
1 parent 88af3f2 commit bc1e26b

File tree

3 files changed

+12
-6
lines changed

3 files changed

+12
-6
lines changed

lib/rails-jquery-autocomplete/orm/active_record.rb

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,15 @@ def get_autocomplete_select_clause(model, method, options)
5050
def get_autocomplete_where_clause(model, term, method, options)
5151
table_name = model.table_name
5252
is_full_search = options[:full]
53-
like_clause = (postgres?(model) ? 'ILIKE' : 'LIKE')
53+
is_case_sensitive_search = options[:case_sensitive]
54+
like_clause = (postgres?(model) && !is_case_sensitive_search ? 'ILIKE' : 'LIKE')
55+
column_transform = is_case_sensitive_search ? '' : 'LOWER'
5456
if options[:hstore]
55-
["LOWER(#{table_name}.#{method} -> '#{options[:hstore][:key]}') LIKE ?", "#{(is_full_search ? '%' : '')}#{term.downcase}%"]
57+
["#{column_transform}(#{table_name}.#{method} -> '#{options[:hstore][:key]}') LIKE #{column_transform}(?)", "#{(is_full_search ? '%' : '')}#{term}%"]
5658
elsif sqlite?
57-
["LOWER(#{method}) #{like_clause} ?", "#{(is_full_search ? '%' : '')}#{term.downcase}%"]
59+
["#{column_transform}(#{method}) #{like_clause} #{column_transform}(?)", "#{(is_full_search ? '%' : '')}#{term}%"]
5860
else
59-
["LOWER(#{table_name}.#{method}) #{like_clause} ?", "#{(is_full_search ? '%' : '')}#{term.downcase}%"]
61+
["#{column_transform}(#{table_name}.#{method}) #{like_clause} #{column_transform}(?)", "#{(is_full_search ? '%' : '')}#{term}%"]
6062
end
6163
end
6264

lib/rails-jquery-autocomplete/orm/mongo_mapper.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,14 @@ def mongo_mapper_get_autocomplete_items(parameters)
1818
method = parameters[:method]
1919
options = parameters[:options]
2020
is_full_search = options[:full]
21+
is_case_sensitive_search = options[:case_sensitive]
2122
term = parameters[:term]
2223
limit = get_autocomplete_limit(options)
2324
order = mongo_mapper_get_autocomplete_order(method, options)
2425

2526
search = (is_full_search ? '.*' : '^') + term + '.*'
26-
items = model.where(method.to_sym => /#{search}/i).limit(limit).sort(order)
27+
search = Regexp.new(search, !is_case_sensitive_search)
28+
items = model.where(method.to_sym => search).limit(limit).sort(order)
2729
end
2830
end
2931
end

lib/rails-jquery-autocomplete/orm/mongoid.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ def mongoid_get_autocomplete_items(parameters)
1818
method = parameters[:method]
1919
options = parameters[:options]
2020
is_full_search = options[:full]
21+
is_case_sensitive_search = options[:case_sensitive]
2122
term = parameters[:term]
2223
limit = get_autocomplete_limit(options)
2324
order = mongoid_get_autocomplete_order(method, options)
@@ -27,7 +28,8 @@ def mongoid_get_autocomplete_items(parameters)
2728
else
2829
search = '^' + Regexp.escape(term)
2930
end
30-
items = model.where(method.to_sym => /#{search}/i).limit(limit).order_by(order)
31+
search = Regexp.new(search, !is_case_sensitive_search)
32+
items = model.where(method.to_sym => search).limit(limit).order_by(order)
3133
end
3234
end
3335
end

0 commit comments

Comments
 (0)