diff --git a/.gitignore b/.gitignore index ea8628bb..3ceb11ad 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ pkg .bundle .rvmrc Gemfile.lock +gemfiles/*.lock diff --git a/gemfiles/Gemfile.rails-3.2.x b/gemfiles/Gemfile.rails-3.2.x index 50bd10ee..071554fb 100644 --- a/gemfiles/Gemfile.rails-3.2.x +++ b/gemfiles/Gemfile.rails-3.2.x @@ -7,3 +7,4 @@ gem 'mocha' gem 'test_declarative' gem 'rake' gem 'minitest' +gem 'oj' diff --git a/gemfiles/Gemfile.rails-4.0.x b/gemfiles/Gemfile.rails-4.0.x index 33e634b5..cc527e77 100644 --- a/gemfiles/Gemfile.rails-4.0.x +++ b/gemfiles/Gemfile.rails-4.0.x @@ -7,3 +7,4 @@ gem 'mocha' gem 'test_declarative' gem 'rake' gem 'minitest' +gem 'oj' diff --git a/gemfiles/Gemfile.rails-4.1.x b/gemfiles/Gemfile.rails-4.1.x index 49093b07..68268553 100644 --- a/gemfiles/Gemfile.rails-4.1.x +++ b/gemfiles/Gemfile.rails-4.1.x @@ -7,3 +7,4 @@ gem 'mocha' gem 'test_declarative' gem 'rake' gem 'minitest' +gem 'oj' diff --git a/gemfiles/Gemfile.rails-4.2.x b/gemfiles/Gemfile.rails-4.2.x index 8d0dc309..68b886c3 100644 --- a/gemfiles/Gemfile.rails-4.2.x +++ b/gemfiles/Gemfile.rails-4.2.x @@ -7,3 +7,4 @@ gem 'mocha' gem 'test_declarative' gem 'rake' gem 'minitest' +gem 'oj' diff --git a/gemfiles/Gemfile.rails-5.0.x b/gemfiles/Gemfile.rails-5.0.x index bddfa474..16345377 100644 --- a/gemfiles/Gemfile.rails-5.0.x +++ b/gemfiles/Gemfile.rails-5.0.x @@ -7,3 +7,4 @@ gem 'mocha' gem 'test_declarative' gem 'rake' gem 'minitest' +gem 'oj' diff --git a/gemfiles/Gemfile.rails-5.1.x b/gemfiles/Gemfile.rails-5.1.x index b8b1cbfa..d8fc5685 100644 --- a/gemfiles/Gemfile.rails-5.1.x +++ b/gemfiles/Gemfile.rails-5.1.x @@ -7,3 +7,4 @@ gem 'mocha' gem 'test_declarative' gem 'rake' gem 'minitest' +gem 'oj' diff --git a/gemfiles/Gemfile.rails-master b/gemfiles/Gemfile.rails-master index 0fef9099..b0ae1ce9 100644 --- a/gemfiles/Gemfile.rails-master +++ b/gemfiles/Gemfile.rails-master @@ -7,3 +7,4 @@ gem 'mocha' gem 'test_declarative' gem 'rake' gem 'minitest' +gem 'oj' diff --git a/lib/i18n/backend/key_value.rb b/lib/i18n/backend/key_value.rb index a79fc1aa..b26cedf6 100644 --- a/lib/i18n/backend/key_value.rb +++ b/lib/i18n/backend/key_value.rb @@ -1,7 +1,24 @@ require 'i18n/backend/base' -require 'active_support/json' module I18n + + begin + require 'oj' + class JSON + class << self + def encode(value) + Oj::Rails.encode(value) + end + def decode(value) + Oj.load(value) + end + end + end + rescue LoadError + require 'active_support/json' + JSON = ActiveSupport::JSON + end + module Backend # This is a basic backend for key value stores. It receives on # initialization the store, which should respond to three methods: @@ -65,14 +82,14 @@ def store_translations(locale, data, options = {}) case value when Hash if @subtrees && (old_value = @store[key]) - old_value = ActiveSupport::JSON.decode(old_value) + old_value = JSON.decode(old_value) value = old_value.deep_symbolize_keys.deep_merge!(value) if old_value.is_a?(Hash) end when Proc raise "Key-value stores cannot handle procs" end - @store[key] = ActiveSupport::JSON.encode(value) unless value.is_a?(Symbol) + @store[key] = JSON.encode(value) unless value.is_a?(Symbol) end end @@ -89,7 +106,7 @@ def available_locales def lookup(locale, key, scope = [], options = {}) key = normalize_flat_keys(locale, key, scope, options[:separator]) value = @store["#{locale}.#{key}"] - value = ActiveSupport::JSON.decode(value) if value + value = JSON.decode(value) if value value.is_a?(Hash) ? value.deep_symbolize_keys : value end end