From be52b85a061ef9f26ad68fc340e7556c65b2483f Mon Sep 17 00:00:00 2001 From: Anton Khorev Date: Wed, 14 May 2025 16:51:28 +0300 Subject: [PATCH] Change user.preferred_language to user.default_diary_language supporting preferences --- .rubocop_todo.yml | 2 +- app/controllers/diary_entries_controller.rb | 5 +-- app/models/user.rb | 13 +++++--- test/models/user_test.rb | 36 ++++++++++++++++++--- 4 files changed, 42 insertions(+), 14 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index f14480baa..4b830aaa8 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -66,7 +66,7 @@ Metrics/BlockNesting: # Offense count: 26 # Configuration parameters: CountComments, CountAsOne. Metrics/ClassLength: - Max: 321 + Max: 330 # Offense count: 58 # Configuration parameters: AllowedMethods, AllowedPatterns. diff --git a/app/controllers/diary_entries_controller.rb b/app/controllers/diary_entries_controller.rb index 1625d2ef0..036d02081 100644 --- a/app/controllers/diary_entries_controller.rb +++ b/app/controllers/diary_entries_controller.rb @@ -86,12 +86,9 @@ class DiaryEntriesController < ApplicationController def new @title = t ".title" + @diary_entry = DiaryEntry.new(entry_params.reverse_merge(:language_code => current_user.default_diary_language)) - diary_language_preference = current_user.preferences.find_by(:k => "diary.default_language") - lang_code = diary_language_preference ? diary_language_preference.v : current_user.preferred_language - @diary_entry = DiaryEntry.new(entry_params.reverse_merge(:language_code => lang_code)) set_map_location - render :action => "new" end def edit diff --git a/app/models/user.rb b/app/models/user.rb index 48093ddba..31fb0d051 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -250,14 +250,19 @@ class User < ApplicationRecord self[:languages] = languages.join(",") end - def preferred_language - languages.find { |l| Language.exists?(:code => l) } - end - def preferred_languages @preferred_languages ||= Locale.list(languages) end + def default_diary_language + diary_language_preference = preferences.find_by(:k => "diary.default_language") + if diary_language_preference + diary_language_preference.v + else + languages.find { |l| Language.exists?(:code => l) } + end + end + def home_location? home_lat && home_lon end diff --git a/test/models/user_test.rb b/test/models/user_test.rb index 1bcdec44d..8c1cee290 100644 --- a/test/models/user_test.rb +++ b/test/models/user_test.rb @@ -243,21 +243,47 @@ class UserTest < ActiveSupport::TestCase end def test_languages - create(:language, :code => "en") - create(:language, :code => "de") - create(:language, :code => "sl") - user = create(:user, :languages => ["en"]) assert_equal ["en"], user.languages user.languages = %w[de fr en] assert_equal %w[de fr en], user.languages user.languages = %w[fr de sl] - assert_equal "de", user.preferred_language assert_equal %w[fr de sl], user.preferred_languages.map(&:to_s) user = create(:user, :languages => %w[en de]) assert_equal %w[en de], user.languages end + def test_default_diary_language_undefined + create(:language, :code => "en") + user = create(:user, :languages => []) + assert_nil user.default_diary_language + end + + def test_default_diary_language_known + create(:language, :code => "en") + user = create(:user, :languages => ["en"]) + assert_equal "en", user.default_diary_language + end + + def test_default_diary_language_known_with_fallback + create(:language, :code => "en") + create(:language, :code => "fr") + user = create(:user, :languages => ["fr en"]) + assert_equal "fr", user.default_diary_language + end + + def test_default_diary_language_unknown + create(:language, :code => "en") + user = create(:user, :languages => ["unknown"]) + assert_nil user.default_diary_language + end + + def test_default_diary_language_unknown_with_known_fallback + create(:language, :code => "en") + user = create(:user, :languages => ["unknown en"]) + assert_equal "en", user.default_diary_language + end + def test_visible? assert_predicate build(:user, :pending), :visible? assert_predicate build(:user, :active), :visible? -- 2.39.5