54 lines
1.6 KiB
Ruby
54 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
|