diff --git a/app/controllers/saved_searches_controller.rb b/app/controllers/saved_searches_controller.rb index 67c41c4c7..4880e8b5b 100644 --- a/app/controllers/saved_searches_controller.rb +++ b/app/controllers/saved_searches_controller.rb @@ -17,11 +17,7 @@ class SavedSearchesController < ApplicationController end def labels - @labels = SavedSearch.labels_for(CurrentUser.user.id) - if params[:label] - regexp = Regexp.compile(Regexp.escape(params[:label])) - @labels = @labels.grep(regexp) - end + @labels = SavedSearch.search_labels(CurrentUser.id, params[:search]) respond_with(@labels) end diff --git a/app/models/saved_search.rb b/app/models/saved_search.rb index 23b8b0c6e..49805d8f4 100644 --- a/app/models/saved_search.rb +++ b/app/models/saved_search.rb @@ -62,6 +62,19 @@ class SavedSearch < ApplicationRecord label.to_s.strip.downcase.gsub(/[[:space:]]/, "_") end + def self.search_labels(user_id, params) + labels = labels_for(user_id) + + if params[:label].present? + query = Regexp.escape(params[:label]).gsub("\\*", ".*") + query = ".*#{query}.*" unless query.include?("*") + query = /\A#{query}\z/ + labels = labels.grep(query) + end + + labels + end + def self.labels_for(user_id) Cache.get(cache_key(user_id)) do SavedSearch.where(user_id: user_id).order("label").pluck("distinct unnest(labels) as label")