From 3dcba94e68889f3d6603fa5416d54edd08dcf4bd Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 31 Mar 2023 21:37:57 +0200 Subject: Migrate glitch-soc's exclusive user settings --- .../20230215074424_move_glitch_user_settings.rb | 57 ++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 db/migrate/20230215074424_move_glitch_user_settings.rb (limited to 'db/migrate/20230215074424_move_glitch_user_settings.rb') diff --git a/db/migrate/20230215074424_move_glitch_user_settings.rb b/db/migrate/20230215074424_move_glitch_user_settings.rb new file mode 100644 index 000000000..6b5a25925 --- /dev/null +++ b/db/migrate/20230215074424_move_glitch_user_settings.rb @@ -0,0 +1,57 @@ +# frozen_string_literal: true + +class MoveGlitchUserSettings < ActiveRecord::Migration[6.1] + class User < ApplicationRecord; end + + MAPPING = { + favourite_modal: 'web.favourite_modal', + system_emoji_font: 'web.use_system_emoji_font', + hide_followers_count: 'hide_followers_count', + default_content_type: 'default_content_type', + flavour: 'flavour', + skin: 'skin', + notification_emails: { + trending_link: 'notification_emails.link_trends', + trending_status: 'notification_emails.status_trends', + }.freeze, + }.freeze + + class LegacySetting < ApplicationRecord + self.table_name = 'settings' + + def var + self[:var]&.to_sym + end + + def value + YAML.safe_load(self[:value], permitted_classes: [ActiveSupport::HashWithIndifferentAccess]) if self[:value].present? + end + end + + def up + User.find_each do |user| + previous_settings = LegacySetting.where(thing_type: 'User', thing_id: user.id).index_by(&:var) + + user_settings = Oj.load(user.settings || '{}') + user_settings.delete('theme') + + MAPPING.each do |legacy_key, new_key| + value = previous_settings[legacy_key]&.value + + next if value.blank? + + if value.is_a?(Hash) + value.each do |nested_key, nested_value| + user_settings[MAPPING[legacy_key][nested_key.to_sym]] = nested_value + end + else + user_settings[new_key] = value + end + end + + user.update_column('settings', Oj.dump(user_settings)) # rubocop:disable Rails/SkipsModelValidations + end + end + + def down; end +end -- cgit From 251c5ed22e606057b5ca222a579a3fa96d487ad4 Mon Sep 17 00:00:00 2001 From: Claire Date: Sun, 9 Apr 2023 14:48:34 +0200 Subject: [Glitch] Fix user settings migration script failing in some cases --- db/migrate/20230215074424_move_glitch_user_settings.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'db/migrate/20230215074424_move_glitch_user_settings.rb') diff --git a/db/migrate/20230215074424_move_glitch_user_settings.rb b/db/migrate/20230215074424_move_glitch_user_settings.rb index 6b5a25925..76fafdd76 100644 --- a/db/migrate/20230215074424_move_glitch_user_settings.rb +++ b/db/migrate/20230215074424_move_glitch_user_settings.rb @@ -24,7 +24,7 @@ class MoveGlitchUserSettings < ActiveRecord::Migration[6.1] end def value - YAML.safe_load(self[:value], permitted_classes: [ActiveSupport::HashWithIndifferentAccess]) if self[:value].present? + YAML.safe_load(self[:value], permitted_classes: [ActiveSupport::HashWithIndifferentAccess, Symbol]) if self[:value].present? end end -- cgit