0
0
Fork 0

Fix tag normalization and migration not removing duplicate tags (#11441)

Fix #11428
This commit is contained in:
Eugen Rochko 2019-07-29 20:40:21 +02:00 committed by GitHub
parent aefeb65656
commit e136112ab7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 51 additions and 4 deletions

View file

@ -65,7 +65,7 @@ class Tag < ApplicationRecord
class << self
def find_or_create_by_names(name_or_names)
Array(name_or_names).map(&method(:normalize)).uniq.map do |normalized_name|
Array(name_or_names).map(&method(:normalize)).uniq { |str| str.mb_chars.downcase.to_s }.map do |normalized_name|
tag = matching_name(normalized_name).first || create(name: normalized_name)
yield tag if block_given?
@ -77,7 +77,7 @@ class Tag < ApplicationRecord
def search_for(term, limit = 5, offset = 0)
pattern = sanitize_sql_like(normalize(term.strip)) + '%'
Tag.where(arel_table[:name].lower.matches(pattern.downcase))
Tag.where(arel_table[:name].lower.matches(pattern.mb_chars.downcase.to_s))
.order(:name)
.limit(limit)
.offset(offset)
@ -92,7 +92,7 @@ class Tag < ApplicationRecord
end
def matching_name(name_or_names)
names = Array(name_or_names).map { |name| normalize(name).downcase }
names = Array(name_or_names).map { |name| normalize(name).mb_chars.downcase.to_s }
if names.size == 1
where(arel_table[:name].lower.eq(names.first))
@ -104,7 +104,7 @@ class Tag < ApplicationRecord
private
def normalize(str)
str.gsub(/\A#/, '').mb_chars.to_s
str.gsub(/\A#/, '')
end
end