From c988481004f6d5008eda5e8d881a04b4c05e8b1c Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 6 Aug 2020 10:00:01 -0400 Subject: [PATCH] [deploy] Cleanup preferred_languages language_settings for users (#9641) * Cleanup language settings for users * Remove logic for old language format * Make preferred_langagues_array.include? nil safe --- app/models/user.rb | 13 +------------ app/views/users/_language_settings.html.erb | 2 +- ...200805171911_clean_up_language_settings.rb | 19 +++++++++++++++++++ spec/models/user_spec.rb | 13 +------------ 4 files changed, 22 insertions(+), 25 deletions(-) create mode 100644 lib/data_update_scripts/20200805171911_clean_up_language_settings.rb diff --git a/app/models/user.rb b/app/models/user.rb index cf6dd679a..b9acfbf07 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -245,21 +245,10 @@ class User < ApplicationRecord end end - # handles both old (prefer_language_*) and new (Array of language codes) formats def preferred_languages_array return @preferred_languages_array if defined?(@preferred_languages_array) - if language_settings["preferred_languages"].present? - @preferred_languages_array = language_settings["preferred_languages"].to_a - else - languages = [] - language_settings.each_key do |setting| - to_split = language_settings[setting] && setting.include?("prefer_language_") - languages << setting.split("prefer_language_")[1] if to_split - end - @preferred_languages_array = languages - end - @preferred_languages_array + @preferred_languages_array = language_settings["preferred_languages"] end def processed_website_url diff --git a/app/views/users/_language_settings.html.erb b/app/views/users/_language_settings.html.erb index 6ba831fdd..900293421 100644 --- a/app/views/users/_language_settings.html.erb +++ b/app/views/users/_language_settings.html.erb @@ -12,7 +12,7 @@ <%= form_tag users_update_language_settings_path, class: "grid gap-4" do |f| %> <% Languages::LIST.each do |code, name| %> <% end %> diff --git a/lib/data_update_scripts/20200805171911_clean_up_language_settings.rb b/lib/data_update_scripts/20200805171911_clean_up_language_settings.rb new file mode 100644 index 000000000..caf198819 --- /dev/null +++ b/lib/data_update_scripts/20200805171911_clean_up_language_settings.rb @@ -0,0 +1,19 @@ +module DataUpdateScripts + class CleanUpLanguageSettings + def run + User.where("(language_settings->'preferred_languages') IS null").find_each do |user| + language_settings = user.language_settings + language_settings["preferred_languages"] = [] + + language_settings["preferred_languages"] << "en" if language_settings["prefer_language_en"] + language_settings["preferred_languages"] << "es" if language_settings["prefer_language_es"] + language_settings["preferred_languages"] << "fr" if language_settings["prefer_language_fr"] + language_settings["preferred_languages"] << "it" if language_settings["prefer_language_it"] + language_settings["preferred_languages"] << "ja" if language_settings["prefer_language_ja"] + language_settings["preferred_languages"] << "pt" if language_settings["prefer_language_pt"] + + user.update(language_settings: language_settings) + end + end + end +end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 3ed5e475d..bea1c47ea 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -670,22 +670,11 @@ RSpec.describe User, type: :model do expect(user.reload.preferred_languages_array).to eq(%w[en ja]) end - it "returns a correct array when language settings are in a new format" do + it "returns a correct array for language settings" do language_settings = { estimated_default_language: "en", preferred_languages: %w[en ru it] } user = build(:user, language_settings: language_settings) expect(user.preferred_languages_array).to eq(%w[en ru it]) end - - it "returns a correct array when language settings are in the old format" do - language_settings = { - estimated_default_language: "en", - prefer_language_en: true, - prefer_language_ja: false, - prefer_language_es: true - } - user = build(:user, language_settings: language_settings) - expect(user.preferred_languages_array).to eq(%w[en es]) - end end end