From 0b63dd32d1747fcbfce3f54eb4ead45269f37e24 Mon Sep 17 00:00:00 2001 From: evazion Date: Tue, 28 Mar 2017 20:44:09 -0500 Subject: [PATCH] saved searches: don't change tag ordering within queries. Normalize queries aside from the tag ordering when they're saved. Normalize queries including ordering when they're sent to listbooru. This way tag ordering within searches is kept in the /saved_searches listing. --- app/models/saved_search.rb | 14 +++++++------- app/models/tag.rb | 9 +++++++++ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/app/models/saved_search.rb b/app/models/saved_search.rb index 2360caae8..a8d83d7e4 100644 --- a/app/models/saved_search.rb +++ b/app/models/saved_search.rb @@ -74,14 +74,18 @@ class SavedSearch < ActiveRecord::Base def self.queries_for(user_id, label = nil, options = {}) if label - SavedSearch.where(user_id: user_id).labeled(label).pluck("distinct query") + SavedSearch.where(user_id: user_id).labeled(label).map(&:normalized_query).sort.uniq else - SavedSearch.where(user_id: user_id).pluck("distinct query") + SavedSearch.where(user_id: user_id).map(&:normalized_query).sort.uniq end end + def normalized_query + Tag.normalize_query(query, sort: true) + end + def normalize - self.query = query_array.sort.join(" ") + self.query = Tag.normalize_query(query, sort: false) self.labels = labels.map {|x| SavedSearch.normalize_label(x)}.reject {|x| x.blank?} end @@ -103,10 +107,6 @@ class SavedSearch < ActiveRecord::Base end end - def query_array - Tag.scan_tags(query) - end - def label_string labels.join(" ") end diff --git a/app/models/tag.rb b/app/models/tag.rb index 303ad692b..3f1d9448d 100644 --- a/app/models/tag.rb +++ b/app/models/tag.rb @@ -236,6 +236,15 @@ class Tag < ActiveRecord::Base query.to_s.gsub(/\u3000/, " ").strip end + def normalize_query(query, sort: true) + tags = Tag.scan_query(query.to_s) + tags = tags.map { |t| Tag.normalize_name(t) } + tags = TagAlias.to_aliased(tags) + tags = tags.sort if sort + tags = tags.uniq + tags.join(" ") + end + def scan_query(query) tagstr = normalize(query) list = tagstr.scan(/-?source:".*?"/) || []