[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
This commit is contained in:
Alex 2020-08-06 10:00:01 -04:00 committed by GitHub
parent 5daf162629
commit c988481004
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 22 additions and 25 deletions

View file

@ -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

View file

@ -12,7 +12,7 @@
<%= form_tag users_update_language_settings_path, class: "grid gap-4" do |f| %>
<% Languages::LIST.each do |code, name| %>
<label class="crayons-field crayons-field--checkbox">
<%= check_box_tag "user[preferred_languages][]", code, @user.preferred_languages_array.include?(code), class: "crayons-checkbox" %>
<%= check_box_tag "user[preferred_languages][]", code, @user.preferred_languages_array&.include?(code), class: "crayons-checkbox" %>
<div class="crayons-field__label"><%= name %></div>
</label>
<% end %>

View file

@ -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

View file

@ -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