discourse/db/migrate/20160225050317_add_user_options.rb
Sam Saffron 30990006a9 DEV: enable frozen string literal on all files
This reduces chances of errors where consumers of strings mutate inputs
and reduces memory usage of the app.

Test suite passes now, but there may be some stuff left, so we will run
a few sites on a branch prior to merging
2019-05-13 09:31:32 +08:00

79 lines
2.7 KiB
Ruby

# frozen_string_literal: true
class AddUserOptions < ActiveRecord::Migration[4.2]
def up
create_table :user_options, id: false do |t|
t.integer :user_id, null: false
t.boolean :email_always, null: false, default: false
t.boolean :mailing_list_mode, null: false, default: false
t.boolean :email_digests
t.boolean :email_direct, null: false, default: true
t.boolean :email_private_messages, null: false, default: true
t.boolean :external_links_in_new_tab, null: false, default: false
t.boolean :enable_quoting, null: false, default: true
t.boolean :dynamic_favicon, null: false, default: false
t.boolean :disable_jump_reply, null: false, default: false
t.boolean :edit_history_public, null: false, default: false
t.boolean :automatically_unpin_topics, null: false, default: true
t.integer :digest_after_days
end
add_index :user_options, [:user_id], unique: true
execute <<SQL
INSERT INTO user_options (
user_id,
email_always,
mailing_list_mode,
email_digests,
email_direct,
email_private_messages,
external_links_in_new_tab,
enable_quoting,
dynamic_favicon,
disable_jump_reply,
edit_history_public,
automatically_unpin_topics,
digest_after_days
)
SELECT id,
email_always,
mailing_list_mode,
email_digests,
email_direct,
COALESCE(email_private_messages,true),
external_links_in_new_tab,
enable_quoting,
dynamic_favicon,
disable_jump_reply,
edit_history_public,
automatically_unpin_topics,
digest_after_days
FROM users
SQL
# these can not be removed until a bit later
# if we remove them now all currently running unicorns will start erroring out
#
# remove_column :users, :email_always
# remove_column :users, :mailing_list_mode
# remove_column :users, :email_digests
# remove_column :users, :email_direct
# remove_column :users, :email_private_messages
# remove_column :users, :external_links_in_new_tab
# remove_column :users, :enable_quoting
# remove_column :users, :dynamic_favicon
# remove_column :users, :disable_jump_reply
# remove_column :users, :edit_history_public
# remove_column :users, :automatically_unpin_topics
# remove_column :users, :digest_after_days
end
def down
# we can not move backwards here cause columns
# get removed an hour after the migration
raise ActiveRecord::IrreversibleMigration
end
end