diff --git a/app/models/artist.rb b/app/models/artist.rb index be25cfdfc..7d27dfbe4 100644 --- a/app/models/artist.rb +++ b/app/models/artist.rb @@ -455,24 +455,6 @@ class Artist < ApplicationRecord end module SearchMethods - def other_names_match(string) - if string =~ /\*/ && CurrentUser.is_builder? - where("artists.other_names ILIKE ? ESCAPE E'\\\\'", string.to_escaped_for_sql_like) - else - where("artists.other_names_index @@ to_tsquery('danbooru', E?)", Artist.normalize_name(string).to_escaped_for_tsquery) - end - end - - def group_name_matches(name) - stripped_name = normalize_name(name).to_escaped_for_sql_like - where("artists.group_name LIKE ? ESCAPE E'\\\\'", stripped_name) - end - - def name_matches(name) - stripped_name = normalize_name(name).to_escaped_for_sql_like - where("artists.name LIKE ? ESCAPE E'\\\\'", stripped_name) - end - def named(name) where(name: normalize_name(name)) end @@ -487,21 +469,12 @@ class Artist < ApplicationRecord end end - def search(params) q = super - if params[:name_matches].present? - q = q.name_matches(params[:name_matches]) - end - - if params[:other_names_match].present? - q = q.other_names_match(params[:other_names_match]) - end - - if params[:group_name_matches].present? - q = q.group_name_matches(params[:group_name_matches]) - end + q = q.search_text_attribute(:name, params) + q = q.search_text_attribute(:other_names, params) + q = q.search_text_attribute(:group_name, params) if params[:any_name_matches].present? q = q.any_name_matches(params[:any_name_matches]) diff --git a/test/unit/artist_test.rb b/test/unit/artist_test.rb index f2c0db7a8..ecb2cf3e6 100644 --- a/test/unit/artist_test.rb +++ b/test/unit/artist_test.rb @@ -399,30 +399,32 @@ class ArtistTest < ActiveSupport::TestCase should "search on its name should return results" do artist = FactoryBot.create(:artist, :name => "artist") + assert_not_nil(Artist.search(:name => "artist").first) - assert_not_nil(Artist.search(:name_matches => "artist").first) + assert_not_nil(Artist.search(:name_like => "artist").first) assert_not_nil(Artist.search(:any_name_matches => "artist").first) + assert_not_nil(Artist.search(:any_name_matches => "/art/").first) end should "search on other names should return matches" do artist = FactoryBot.create(:artist, :name => "artist", :other_names_comma => "aaa, ccc ddd") - assert_nil(Artist.other_names_match("artist").first) - assert_not_nil(Artist.other_names_match("aaa").first) - assert_not_nil(Artist.other_names_match("ccc_ddd").first) - assert_not_nil(Artist.search(:name => "artist").first) - assert_not_nil(Artist.search(:other_names_match => "aaa").first) + assert_nil(Artist.search(other_names_like: "*artist*").first) + assert_not_nil(Artist.search(other_names_like: "*aaa*").first) + assert_not_nil(Artist.search(other_names_like: "*ccc_ddd*").first) + assert_not_nil(Artist.search(name: "artist").first) assert_not_nil(Artist.search(:any_name_matches => "aaa").first) + assert_not_nil(Artist.search(:any_name_matches => "/a/").first) end should "search on group name and return matches" do cat_or_fish = FactoryBot.create(:artist, :name => "cat_or_fish") yuu = FactoryBot.create(:artist, :name => "yuu", :group_name => "cat_or_fish") - cat_or_fish.reload - assert_equal("yuu", cat_or_fish.member_names) - assert_not_nil(Artist.search(:group_name_matches => "cat_or_fish").first) + assert_equal("yuu", cat_or_fish.member_names) + assert_not_nil(Artist.search(:group_name => "cat_or_fish").first) assert_not_nil(Artist.search(:any_name_matches => "cat_or_fish").first) + assert_not_nil(Artist.search(:any_name_matches => "/cat/").first) end should "search on has_tag and return matches" do