Extract method do update I18n contents
This way we can test it properly, which will be helpful when fixing bugs.
This commit is contained in:
@@ -7,24 +7,7 @@ class Admin::SiteCustomization::InformationTextsController < Admin::SiteCustomiz
|
|||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
content_params.each do |content|
|
I18nContent.update(content_params, enabled_translations)
|
||||||
values = content[:values].slice(*translation_params)
|
|
||||||
|
|
||||||
unless values.empty?
|
|
||||||
values.each do |key, value|
|
|
||||||
locale = key.split("_").last
|
|
||||||
|
|
||||||
if value == t(content[:id], locale: locale) || value.match(/translation missing/)
|
|
||||||
next
|
|
||||||
else
|
|
||||||
text = I18nContent.find_or_create_by!(key: content[:id])
|
|
||||||
Globalize.with_locale(locale) do
|
|
||||||
text.update!(value: value)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
redirect_to admin_site_customization_information_texts_path,
|
redirect_to admin_site_customization_information_texts_path,
|
||||||
notice: t("flash.actions.update.translation")
|
notice: t("flash.actions.update.translation")
|
||||||
@@ -48,12 +31,6 @@ class Admin::SiteCustomization::InformationTextsController < Admin::SiteCustomiz
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def translation_params
|
|
||||||
I18nContent.translated_attribute_names.product(enabled_translations).map do |attr_name, loc|
|
|
||||||
I18nContent.localized_attr_name_for(attr_name, loc)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def enabled_translations
|
def enabled_translations
|
||||||
params.fetch(:enabled_translations, {}).select { |_, v| v == "1" }.keys
|
params.fetch(:enabled_translations, {}).select { |_, v| v == "1" }.keys
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -118,4 +118,31 @@ class I18nContent < ApplicationRecord
|
|||||||
end.to_h
|
end.to_h
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.update(contents, enabled_translations = I18n.available_locales)
|
||||||
|
contents.each do |content|
|
||||||
|
values = content[:values].slice(*translation_params(enabled_translations))
|
||||||
|
|
||||||
|
unless values.empty?
|
||||||
|
values.each do |key, value|
|
||||||
|
locale = key.split("_").last
|
||||||
|
|
||||||
|
if value == I18n.t(content[:id], locale: locale) || value.match(/translation missing/)
|
||||||
|
next
|
||||||
|
else
|
||||||
|
text = I18nContent.find_or_create_by!(key: content[:id])
|
||||||
|
Globalize.with_locale(locale) do
|
||||||
|
text.update!(value: value)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.translation_params(enabled_translations)
|
||||||
|
translated_attribute_names.product(enabled_translations).map do |attr_name, loc|
|
||||||
|
localized_attr_name_for(attr_name, loc)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -133,4 +133,26 @@ RSpec.describe I18nContent, type: :model do
|
|||||||
expect(I18nContent.translations_hash(:en)["great"]).to be nil
|
expect(I18nContent.translations_hash(:en)["great"]).to be nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe ".update" do
|
||||||
|
it "stores new keys with a different translation" do
|
||||||
|
I18nContent.update([{ id: "shared.yes", values: { "value_en" => "Oh, yeah" }}])
|
||||||
|
|
||||||
|
expect(I18nContent.count).to eq 1
|
||||||
|
expect(I18nContent.first.translations.count).to eq 1
|
||||||
|
expect(I18nContent.first.value).to eq "Oh, yeah"
|
||||||
|
end
|
||||||
|
|
||||||
|
it "does not store new keys with the default translation" do
|
||||||
|
I18nContent.update([{ id: "shared.yes", values: { "value_en" => "Yes" }}])
|
||||||
|
|
||||||
|
expect(I18nContent.all).to be_empty
|
||||||
|
end
|
||||||
|
|
||||||
|
it "does not store new keys for disabled translations" do
|
||||||
|
I18nContent.update([{ id: "shared.yes", values: { "value_en" => "Oh, yeah" }}], [:es])
|
||||||
|
|
||||||
|
expect(I18nContent.all).to be_empty
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user