From 5e5b07a317b988c2b6f76adff59fdb8c77c65b81 Mon Sep 17 00:00:00 2001 From: Sergio Rivas Date: Thu, 30 Jan 2020 17:31:36 +0800 Subject: [PATCH 1/4] disable translations --- .../translates/instance_methods.rb | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/lib/json_translate/translates/instance_methods.rb b/lib/json_translate/translates/instance_methods.rb index 68c2f19..1c1ffe4 100644 --- a/lib/json_translate/translates/instance_methods.rb +++ b/lib/json_translate/translates/instance_methods.rb @@ -11,9 +11,19 @@ def enable_fallback yield if block_given? end + def disable_translations + toggle_translations(false) + yield if block_given? + end + + def enable_translations + toggle_translations(true) + yield if block_given? + end + protected - attr_reader :enabled_fallback + attr_reader :enabled_fallback, :enabled_translations def json_translate_fallback_locales(locale) if enabled_fallback != false && I18n.respond_to?(:fallbacks) @@ -24,6 +34,8 @@ def json_translate_fallback_locales(locale) end def read_json_translation(attr_name, locale = I18n.locale, fallback = true, **params) + return attributes["#{attr_name}"] unless enabled_translations + translations = public_send("#{attr_name}#{SUFFIX}") || {} selected_locale = locale @@ -72,6 +84,20 @@ def toggle_fallback(enabled) @enabled_fallback = enabled end end + + def toggle_translations(enabled) + if block_given? + old_value = @enabled_translations + begin + @enabled_translations = enabled + yield + ensure + @enabled_translations = old_value + end + else + @enabled_translations = enabled + end + end end end end From 9f55e5beefdfcddae5b949109f59a237e9c5cab1 Mon Sep 17 00:00:00 2001 From: Sergio Rivas Date: Thu, 30 Jan 2020 17:39:37 +0800 Subject: [PATCH 2/4] add enable/disable logic to read/write method --- lib/json_translate/translates/instance_methods.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/json_translate/translates/instance_methods.rb b/lib/json_translate/translates/instance_methods.rb index 1c1ffe4..3fd9bbd 100644 --- a/lib/json_translate/translates/instance_methods.rb +++ b/lib/json_translate/translates/instance_methods.rb @@ -58,6 +58,8 @@ def read_json_translation(attr_name, locale = I18n.locale, fallback = true, **pa end def write_json_translation(attr_name, value, locale = I18n.locale) + return assign_attributes({attr_name => value}) unless enabled_translations + value = value.presence translation_store = "#{attr_name}#{SUFFIX}" translations = public_send(translation_store) || {} From 344bd4d10cec7e60f718e57764af28ad6cd36999 Mon Sep 17 00:00:00 2001 From: Sergio Rivas Date: Thu, 30 Jan 2020 17:41:48 +0800 Subject: [PATCH 3/4] default unaffected --- lib/json_translate/translates/instance_methods.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/json_translate/translates/instance_methods.rb b/lib/json_translate/translates/instance_methods.rb index 3fd9bbd..b679bc8 100644 --- a/lib/json_translate/translates/instance_methods.rb +++ b/lib/json_translate/translates/instance_methods.rb @@ -34,7 +34,7 @@ def json_translate_fallback_locales(locale) end def read_json_translation(attr_name, locale = I18n.locale, fallback = true, **params) - return attributes["#{attr_name}"] unless enabled_translations + return attributes["#{attr_name}"] if enabled_translations == false translations = public_send("#{attr_name}#{SUFFIX}") || {} @@ -58,7 +58,7 @@ def read_json_translation(attr_name, locale = I18n.locale, fallback = true, **pa end def write_json_translation(attr_name, value, locale = I18n.locale) - return assign_attributes({attr_name => value}) unless enabled_translations + return assign_attributes({attr_name => value}) if enabled_translations == false value = value.presence translation_store = "#{attr_name}#{SUFFIX}" From bf3399958ccaa7859afb08712fc3395e3804d84c Mon Sep 17 00:00:00 2001 From: Sergio Rivas Date: Thu, 30 Jan 2020 18:27:14 +0800 Subject: [PATCH 4/4] added readme documentation for enable/disable translations --- README.md | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/README.md b/README.md index da0c092..f29636a 100644 --- a/README.md +++ b/README.md @@ -145,3 +145,55 @@ post.enable_fallback do post.title_nl # => This database rocks! end ``` + +## Temporarily disable translations / Migrating Data + +If you are integrating this gem to an application with existing data, you are probably concerned about how to migrate your data from the untranslated column to your new `attr_translations` column. You can easily disable translations to do what you need when migrating the data over. + +Older Schema: +```ruby +class CreatePosts < ActiveRecord::Migration + def up + create_table :posts do |t| + t.column :title, :string + t.timestamps + end + end + def down + drop_table :posts + end +end +``` +Let's say you originally had something important saved in `title`: +```ruby +post.title = "something important" +``` + +You might think it disappeared, but with disable_translations you can still get the old data. + +From: + +```ruby +post.title # => nil +``` + +To: + +```ruby +post.title # => nil +post.disable_translations +post.title # => "something important" +``` + +To migrate data, you could do something like: + +```ruby +post.disable_translations +migrated_title = post.title +post.enable_translations + +I18n.locale = :en +post.title = migrated_title +``` + +