Просмотр исходного кода

Make custom emoji domains case insensitive #9351 (#9474)

* Make custom emoji domains case sensitive #9351

* Fixup style in downcase_domain to comply with codeclimate.

* switch if! to unless

* Don't use transactions, operate in batches.

Also revert spurious schema change.
master
Adam Copp 5 лет назад
committed by Eugen Rochko
Родитель
Сommit
7d00e4edbd
5 измененных файлов: 24 добавлений и 2 удалений
  1. +6
    -0
      app/models/custom_emoji.rb
  2. +1
    -1
      app/models/custom_emoji_filter.rb
  3. +7
    -0
      db/migrate/20181207011115_downcase_custom_emoji_domains.rb
  4. +1
    -1
      db/schema.rb
  5. +9
    -0
      spec/models/custom_emoji_spec.rb

+ 6
- 0
app/models/custom_emoji.rb Просмотреть файл

@@ -31,6 +31,8 @@ class CustomEmoji < ApplicationRecord

has_attached_file :image, styles: { static: { format: 'png', convert_options: '-coalesce -strip' } }

before_validation :downcase_domain

validates_attachment :image, content_type: { content_type: 'image/png' }, presence: true, size: { less_than: LIMIT }
validates :shortcode, uniqueness: { scope: :domain }, format: { with: /\A#{SHORTCODE_RE_FRAGMENT}\z/ }, length: { minimum: 2 }

@@ -73,4 +75,8 @@ class CustomEmoji < ApplicationRecord
def remove_entity_cache
Rails.cache.delete(EntityCache.instance.to_key(:emoji, shortcode, domain))
end

def downcase_domain
self.domain = domain.downcase unless domain.nil?
end
end

+ 1
- 1
app/models/custom_emoji_filter.rb Просмотреть файл

@@ -26,7 +26,7 @@ class CustomEmojiFilter
when 'remote'
CustomEmoji.remote
when 'by_domain'
CustomEmoji.where(domain: value)
CustomEmoji.where(domain: value.downcase)
when 'shortcode'
CustomEmoji.search(value)
else


+ 7
- 0
db/migrate/20181207011115_downcase_custom_emoji_domains.rb Просмотреть файл

@@ -0,0 +1,7 @@
class DowncaseCustomEmojiDomains < ActiveRecord::Migration[5.2]
disable_ddl_transaction!

def change
CustomEmoji.in_batches.update_all('domain = lower(domain)')
end
end

+ 1
- 1
db/schema.rb Просмотреть файл

@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.

ActiveRecord::Schema.define(version: 2018_12_04_215309) do
ActiveRecord::Schema.define(version: 2018_12_07_011115) do

# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"


+ 9
- 0
spec/models/custom_emoji_spec.rb Просмотреть файл

@@ -75,4 +75,13 @@ RSpec.describe CustomEmoji, type: :model do
end
end
end

describe 'pre_validation' do
let(:custom_emoji) { Fabricate(:custom_emoji, domain: 'wWw.MaStOdOn.CoM') }

it 'should downcase' do
custom_emoji.valid?
expect(custom_emoji.domain).to eq('www.mastodon.com')
end
end
end

Загрузка…
Отмена
Сохранить