This commit is contained in:
Matt Jankowski 2025-09-03 20:07:43 +00:00 committed by GitHub
commit d04d387615
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 8 additions and 2 deletions

View File

@ -67,6 +67,8 @@ class Tag < ApplicationRecord
} }
scope :matches_name, ->(term) { where(arel_table[:name].lower.matches(arel_table.lower("#{sanitize_sql_like(Tag.normalize(term))}%"), nil, true)) } # Search with case-sensitive to use B-tree index scope :matches_name, ->(term) { where(arel_table[:name].lower.matches(arel_table.lower("#{sanitize_sql_like(Tag.normalize(term))}%"), nil, true)) } # Search with case-sensitive to use B-tree index
normalizes :display_name, with: ->(value) { value.gsub(HASHTAG_INVALID_CHARS_RE, '') }
update_index('tags', :self) update_index('tags', :self)
def to_param def to_param
@ -112,8 +114,7 @@ class Tag < ApplicationRecord
names = Array(name_or_names).map { |str| [normalize(str), str] }.uniq(&:first) names = Array(name_or_names).map { |str| [normalize(str), str] }.uniq(&:first)
names.map do |(normalized_name, display_name)| names.map do |(normalized_name, display_name)|
tag = matching_name(normalized_name).first || create(name: normalized_name, tag = matching_name(normalized_name).first || create(name: normalized_name, display_name:)
display_name: display_name.gsub(HASHTAG_INVALID_CHARS_RE, ''))
yield tag if block_given? yield tag if block_given?

View File

@ -57,6 +57,11 @@ RSpec.describe Tag do
end end
end end
describe 'Normalizations' do
it { is_expected.to normalize(:display_name).from('#HelloWorld').to('HelloWorld') }
it { is_expected.to normalize(:display_name).from('Hello❤World').to('HelloWorld') }
end
describe 'HASHTAG_RE' do describe 'HASHTAG_RE' do
subject { described_class::HASHTAG_RE } subject { described_class::HASHTAG_RE }