mastodon/db/migrate/20180707193142_migrate_filt...

55 lines
1.6 KiB
Ruby

class MigrateFilters < ActiveRecord::Migration[5.2]
class GlitchKeywordMute < ApplicationRecord
# Dummy class, as we removed Glitch::KeywordMute
belongs_to :account, required: true
validates_presence_of :keyword
end
class CustomFilter < ApplicationRecord
# Dummy class, in case CustomFilter gets altered in the future
belongs_to :account
validates :phrase, :context, presence: true
before_validation :clean_up_contexts
private
def clean_up_contexts
self.context = Array(context).map(&:strip).map(&:presence).compact
end
end
disable_ddl_transaction!
def up
GlitchKeywordMute.find_each do |filter|
filter.account.custom_filters.create!(
phrase: filter.keyword,
context: filter.apply_to_mentions ? %w(home public notifications) : %w(home public),
whole_word: filter.whole_word,
irreversible: true)
end
end
def down
unless table_exists? :glitch_keyword_mutes
create_table :glitch_keyword_mutes do |t|
t.references :account, null: false
t.string :keyword, null: false
t.boolean :whole_word, default: true, null: false
t.boolean :apply_to_mentions, default: true, null: false
t.timestamps
end
safety_assured { add_foreign_key :glitch_keyword_mutes, :accounts, on_delete: :cascade }
end
CustomFilter.where(irreversible: true).find_each do |filter|
GlitchKeywordMute.where(account: filter.account).create!(
keyword: filter.phrase,
whole_word: filter.whole_word,
apply_to_mentions: filter.context.include?('notifications'))
end
end
end