/artists: add search params: has_tag, name/other_names/group_name/any_name/url_matches.

This commit is contained in:
evazion
2017-04-25 10:55:16 -05:00
parent 13189e60b8
commit d1188d8184
2 changed files with 45 additions and 1 deletions

View File

@@ -430,6 +430,26 @@ class Artist < ActiveRecord::Base
q = q.any_name_matches(params[:name])
end
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
if params[:any_name_matches].present?
q = q.any_name_matches(params[:any_name_matches])
end
if params[:url_matches].present?
q = q.url_matches(params[:url_matches])
end
params[:order] ||= params.delete(:sort)
case params[:order]
when "name"
@@ -466,8 +486,15 @@ class Artist < ActiveRecord::Base
q = q.where("creator_id = ?", params[:creator_id].to_i)
end
# XXX deprecated, remove at some point.
if params[:empty_only] == "true"
q = q.joins(:tag).where("tags.post_count = 0")
params[:has_tag] = "false"
end
if params[:has_tag] == "true"
q = q.joins(:tag).where("tags.post_count > 0")
elsif params[:has_tag] == "false"
q = q.includes(:tag).where("tags.name IS NULL OR tags.post_count <= 0").references(:tags)
end
q

View File

@@ -291,6 +291,8 @@ class ArtistTest < ActiveSupport::TestCase
should "search on its name should return results" do
artist = FactoryGirl.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(:any_name_matches => "artist").first)
end
should "search on other names should return matches" do
@@ -300,6 +302,9 @@ class ArtistTest < ActiveSupport::TestCase
assert_not_nil(Artist.other_names_match("ccc_ddd").first)
assert_not_nil(Artist.search(:name => "other:aaa").first)
assert_not_nil(Artist.search(:name => "aaa").first)
assert_not_nil(Artist.search(:other_names_match => "aaa").first)
assert_not_nil(Artist.search(:any_name_matches => "aaa").first)
end
should "search on group name and return matches" do
@@ -308,6 +313,18 @@ class ArtistTest < ActiveSupport::TestCase
cat_or_fish.reload
assert_equal("yuu", cat_or_fish.member_names)
assert_not_nil(Artist.search(:name => "group:cat_or_fish").first)
assert_not_nil(Artist.search(:group_name_matches => "cat_or_fish").first)
assert_not_nil(Artist.search(:any_name_matches => "cat_or_fish").first)
end
should "search on has_tag and return matches" do
post = FactoryGirl.create(:post, tag_string: "bkub")
bkub = FactoryGirl.create(:artist, name: "bkub")
none = FactoryGirl.create(:artist, name: "none")
assert_equal(bkub.id, Artist.search(has_tag: "true").first.id)
assert_equal(none.id, Artist.search(has_tag: "false").first.id)
end
should "revert to prior versions" do