From 8ac1724b51459295c339e2ed3c2e911cd8003715 Mon Sep 17 00:00:00 2001 From: Paarth Madan Date: Wed, 26 Jan 2022 10:25:58 -0500 Subject: [PATCH 1/2] Conditionally assert load_json returns symbolized data --- lib/i18n/backend/base.rb | 2 +- test/backend/simple_test.rb | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/i18n/backend/base.rb b/lib/i18n/backend/base.rb index 9f9df168..07f9bbd7 100644 --- a/lib/i18n/backend/base.rb +++ b/lib/i18n/backend/base.rb @@ -255,7 +255,7 @@ def load_yml(filename) def load_json(filename) begin # Use #load_file as a proxy for a version of JSON where symbolize_names and freeze are supported. - if JSON.respond_to?(:load_file) + if ::JSON.respond_to?(:load_file) [::JSON.load_file(filename, symbolize_names: true, freeze: true), true] else [::JSON.parse(File.read(filename)), false] diff --git a/test/backend/simple_test.rb b/test/backend/simple_test.rb index ce9762dc..5c5955c3 100644 --- a/test/backend/simple_test.rb +++ b/test/backend/simple_test.rb @@ -97,10 +97,12 @@ def setup test "simple load_json: loads data from a JSON file" do data, _ = I18n.backend.send(:load_json, "#{locales_dir}/en.json") - assert_equal({ :en => { :foo => { :bar => 'baz' } } }, data) if JSON.respond_to?(:load_file) + assert_equal({ :en => { :foo => { :bar => 'baz' } } }, data) assert_predicate data.dig(:en, :foo, :bar), :frozen? + else + assert_equal({ 'en' => { 'foo' => { 'bar' => 'baz' } } }, data) end end From 0fda789ea745cd462658a8948ee085201aba5c6f Mon Sep 17 00:00:00 2001 From: Paarth Madan Date: Wed, 3 Nov 2021 12:33:12 -0400 Subject: [PATCH 2/2] Symbolize and freeze keys when loading from YAML --- lib/i18n/backend/base.rb | 2 +- test/backend/simple_test.rb | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/i18n/backend/base.rb b/lib/i18n/backend/base.rb index 07f9bbd7..b78a6af1 100644 --- a/lib/i18n/backend/base.rb +++ b/lib/i18n/backend/base.rb @@ -240,7 +240,7 @@ def load_rb(filename) def load_yml(filename) begin if YAML.respond_to?(:unsafe_load_file) # Psych 4.0 way - [YAML.unsafe_load_file(filename), false] + [YAML.unsafe_load_file(filename, symbolize_names: true, freeze: true), true] else [YAML.load_file(filename), false] end diff --git a/test/backend/simple_test.rb b/test/backend/simple_test.rb index 5c5955c3..23de4864 100644 --- a/test/backend/simple_test.rb +++ b/test/backend/simple_test.rb @@ -92,7 +92,12 @@ def setup test "simple load_yml: loads data from a YAML file" do data, _ = I18n.backend.send(:load_yml, "#{locales_dir}/en.yml") - assert_equal({ 'en' => { 'foo' => { 'bar' => 'baz' } } }, data) + if ::YAML.respond_to?(:unsafe_load_file) + assert_equal({ :en => { :foo => { :bar => 'baz' } } }, data) + assert_predicate data.dig(:en, :foo, :bar), :frozen? + else + assert_equal({ 'en' => { 'foo' => { 'bar' => 'baz' } } }, data) + end end test "simple load_json: loads data from a JSON file" do