artists: normalize group names.
Normalize artist group names following the same rules as artist other names. This means artist group names now use underscores instead of spaces. It also means extra space characters at the beginning and end of names is stripped, and Unicode characters are normalized. Fixes #4647, which was caused by users accidentally replacing group names with a single space character when trying to remove a group.
This commit is contained in:
@@ -9,6 +9,7 @@ class Artist < ApplicationRecord
|
||||
deletable
|
||||
|
||||
normalize :name, :normalize_name
|
||||
normalize :group_name, :normalize_other_name
|
||||
normalize :other_names, :normalize_other_names
|
||||
array_attribute :other_names # XXX must come after `normalize :other_names`
|
||||
|
||||
|
||||
17
script/fixes/092_normalize_artist_group_names.rb
Executable file
17
script/fixes/092_normalize_artist_group_names.rb
Executable file
@@ -0,0 +1,17 @@
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
require_relative "base"
|
||||
|
||||
with_confirmation do
|
||||
CurrentUser.scoped(User.system) do
|
||||
Artist.where.not(group_name: "").find_each do |artist|
|
||||
artist.update!(group_name: artist.group_name) # forces normalization
|
||||
|
||||
if artist.saved_changes?
|
||||
puts "id=#{artist.id} name=#{artist.name} oldgroup=`#{artist.group_name_before_last_save}` newgroup=`#{artist.group_name}`"
|
||||
end
|
||||
rescue ActiveRecord::RecordInvalid
|
||||
puts "id=#{artist.id} name=#{artist.name} error=#{artist.errors.full_messages.join}"
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -412,6 +412,22 @@ class ArtistTest < ActiveSupport::TestCase
|
||||
should normalize_attribute(:other_names).from("_foo_ Bar").to(["_foo_", "Bar"])
|
||||
end
|
||||
|
||||
context "group name" do
|
||||
should normalize_attribute(:group_name).from(" ").to("")
|
||||
should normalize_attribute(:group_name).from(" foo").to("foo")
|
||||
should normalize_attribute(:group_name).from("foo ").to("foo")
|
||||
should normalize_attribute(:group_name).from("___foo").to("___foo")
|
||||
should normalize_attribute(:group_name).from("foo___").to("foo___")
|
||||
should normalize_attribute(:group_name).from("foo\n").to("foo")
|
||||
should normalize_attribute(:group_name).from("foo bar").to("foo_bar")
|
||||
should normalize_attribute(:group_name).from("foo bar").to("foo_bar")
|
||||
should normalize_attribute(:group_name).from("foo___bar").to("foo___bar")
|
||||
should normalize_attribute(:group_name).from(" _Foo Bar_ ").to("_Foo_Bar_")
|
||||
should normalize_attribute(:group_name).from("_foo_ Bar").to("_foo__Bar")
|
||||
should normalize_attribute(:group_name).from("pokémon".unicode_normalize(:nfd)).to("pokémon".unicode_normalize(:nfkc))
|
||||
should normalize_attribute(:group_name).from("🏳️🌈").to("🏳️🌈")
|
||||
end
|
||||
|
||||
should "search on its name should return results" do
|
||||
artist = FactoryBot.create(:artist, :name => "artist")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user