json_translate 4.0.0 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/README.md +31 -0
- data/lib/json_translate/translates.rb +5 -5
- data/lib/json_translate/translates/instance_methods.rb +8 -4
- data/lib/json_translate/version.rb +1 -1
- data/test/gemfiles/Gemfile.rails-5.0.x +1 -1
- data/test/gemfiles/Gemfile.rails-6.0.x +6 -0
- data/test/test_helper.rb +4 -3
- data/test/translates_test.rb +27 -23
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 98c9caf9ca99da1bac3fdecdfa8c5249536b9f23fa7f16071efeddd7ad9cd97d
|
4
|
+
data.tar.gz: 13eb7ef35a9f5f322d5798c07cad3373bd7f403980a9edaeb0072e2a70350db2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cf87995f6e6295943f366be9e486f9c8abb2334c238d89d5cc7796e2e58a61e0f28b8b2e18172602de3dd312a0eda99adef29aa51f8a2bb172f6db3d638a358c
|
7
|
+
data.tar.gz: 2c0b99f0e3c2b02c5db293a6e8831fcea11a2afe74d0c8b3e0048f1ffc48962424db88c1e81320382845b73de4b90099c09baa2c9a6bb0d9cfb0a64f1b2a9db4
|
data/README.md
CHANGED
@@ -145,3 +145,34 @@ post.enable_fallback do
|
|
145
145
|
post.title_nl # => This database rocks!
|
146
146
|
end
|
147
147
|
```
|
148
|
+
|
149
|
+
## Enable blank value translations
|
150
|
+
|
151
|
+
By default, empty String values are not stored, instead the locale is deleted.
|
152
|
+
|
153
|
+
```ruby
|
154
|
+
class Post < ActiveRecord::Base
|
155
|
+
translates :title
|
156
|
+
end
|
157
|
+
|
158
|
+
post.title_translations # => { en: 'Hello', fr: 'Bonjour' }
|
159
|
+
post.title_en = ""
|
160
|
+
post.title_translations # => { fr: 'Bonjour' }
|
161
|
+
```
|
162
|
+
|
163
|
+
Activating `allow_blank: true` enables to store empty String values.
|
164
|
+
```ruby
|
165
|
+
class Post < ActiveRecord::Base
|
166
|
+
translates :title, allow_blank: true
|
167
|
+
end
|
168
|
+
|
169
|
+
post.title_translations # => { en: 'Hello', fr: 'Bonjour' }
|
170
|
+
post.title_en = ""
|
171
|
+
post.title_translations # => { en: '', fr: 'Bonjour' }
|
172
|
+
```
|
173
|
+
|
174
|
+
`nil` value delete the locale key/value anyway.
|
175
|
+
```ruby
|
176
|
+
post.title_en = nil
|
177
|
+
post.title_translations # => { fr: 'Bonjour' }
|
178
|
+
```
|
@@ -3,7 +3,7 @@ module JSONTranslate
|
|
3
3
|
SUFFIX = "_translations".freeze
|
4
4
|
MYSQL_ADAPTERS = %w[MySQL Mysql2 Mysql2Spatial]
|
5
5
|
|
6
|
-
def translates(*attrs)
|
6
|
+
def translates(*attrs, allow_blank: false)
|
7
7
|
include InstanceMethods
|
8
8
|
|
9
9
|
class_attribute :translated_attribute_names, :permitted_translated_attributes
|
@@ -19,22 +19,22 @@ module JSONTranslate
|
|
19
19
|
|
20
20
|
attrs.each do |attr_name|
|
21
21
|
define_method attr_name do |**params|
|
22
|
-
read_json_translation(attr_name, params)
|
22
|
+
read_json_translation(attr_name, **params)
|
23
23
|
end
|
24
24
|
|
25
25
|
define_method "#{attr_name}=" do |value|
|
26
|
-
write_json_translation(attr_name, value)
|
26
|
+
write_json_translation(attr_name, value, allow_blank: allow_blank)
|
27
27
|
end
|
28
28
|
|
29
29
|
I18n.available_locales.each do |locale|
|
30
30
|
normalized_locale = locale.to_s.downcase.gsub(/[^a-z]/, '')
|
31
31
|
|
32
32
|
define_method :"#{attr_name}_#{normalized_locale}" do |**params|
|
33
|
-
read_json_translation(attr_name, locale, false, params)
|
33
|
+
read_json_translation(attr_name, locale: locale, fallback: false, **params)
|
34
34
|
end
|
35
35
|
|
36
36
|
define_method "#{attr_name}_#{normalized_locale}=" do |value|
|
37
|
-
write_json_translation(attr_name, value, locale)
|
37
|
+
write_json_translation(attr_name, value, locale: locale, allow_blank: allow_blank)
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
@@ -23,7 +23,7 @@ module JSONTranslate
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
-
def read_json_translation(attr_name, locale
|
26
|
+
def read_json_translation(attr_name, locale: I18n.locale, fallback: true, **params)
|
27
27
|
translations = public_send("#{attr_name}#{SUFFIX}") || {}
|
28
28
|
|
29
29
|
selected_locale = locale
|
@@ -45,11 +45,11 @@ module JSONTranslate
|
|
45
45
|
translation
|
46
46
|
end
|
47
47
|
|
48
|
-
def write_json_translation(attr_name, value, locale
|
49
|
-
value = value.presence
|
48
|
+
def write_json_translation(attr_name, value, locale: I18n.locale, allow_blank:)
|
49
|
+
value = allow_blank ? value : value.presence
|
50
50
|
translation_store = "#{attr_name}#{SUFFIX}"
|
51
51
|
translations = public_send(translation_store) || {}
|
52
|
-
|
52
|
+
translation_store_will_change!(translation_store) unless translations[locale.to_s] == value
|
53
53
|
if value
|
54
54
|
translations[locale.to_s] = value
|
55
55
|
else
|
@@ -59,6 +59,10 @@ module JSONTranslate
|
|
59
59
|
value
|
60
60
|
end
|
61
61
|
|
62
|
+
def translation_store_will_change!(translation_store)
|
63
|
+
public_send("#{translation_store}_will_change!")
|
64
|
+
end
|
65
|
+
|
62
66
|
def toggle_fallback(enabled)
|
63
67
|
if block_given?
|
64
68
|
old_value = @enabled_fallback
|
data/test/test_helper.rb
CHANGED
@@ -11,7 +11,7 @@ class Post < ActiveRecord::Base
|
|
11
11
|
end
|
12
12
|
|
13
13
|
class PostDetailed < Post
|
14
|
-
translates :comment
|
14
|
+
translates :comment, allow_blank: true
|
15
15
|
end
|
16
16
|
|
17
17
|
class JSONTranslate::Test < Minitest::Test
|
@@ -40,8 +40,7 @@ class JSONTranslate::Test < Minitest::Test
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def create_database
|
43
|
-
|
44
|
-
connection = establish_connection(system_config)
|
43
|
+
connection = establish_connection(db_config)
|
45
44
|
connection.create_database(db_config['database']) rescue nil
|
46
45
|
end
|
47
46
|
|
@@ -61,6 +60,8 @@ class JSONTranslate::Test < Minitest::Test
|
|
61
60
|
def setup
|
62
61
|
I18n.available_locales = ['en', 'en-US', 'fr']
|
63
62
|
I18n.config.enforce_available_locales = true
|
63
|
+
I18n::Backend::Simple.include(I18n::Backend::Fallbacks)
|
64
|
+
I18n.fallbacks = I18n.available_locales
|
64
65
|
DatabaseCleaner.start
|
65
66
|
end
|
66
67
|
|
data/test/translates_test.rb
CHANGED
@@ -13,18 +13,15 @@ class TranslatesTest < JSONTranslate::Test
|
|
13
13
|
def test_retrieves_in_current_locale
|
14
14
|
p = Post.new(
|
15
15
|
:title_translations => { "en" => "English Title", "fr" => "Titre français" },
|
16
|
-
:body_1_translations => { "en" => "English Body", "fr" => "Corps
|
16
|
+
:body_1_translations => { "en" => "English Body", "fr" => "Corps français" }
|
17
17
|
)
|
18
18
|
I18n.with_locale(:fr) do
|
19
19
|
assert_equal("Titre français", p.title)
|
20
|
-
assert_equal("Corps
|
20
|
+
assert_equal("Corps français", p.body_1)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
24
|
def test_retrieves_in_current_locale_with_fallbacks
|
25
|
-
I18n::Backend::Simple.include(I18n::Backend::Fallbacks)
|
26
|
-
I18n.default_locale = :"en-US"
|
27
|
-
|
28
25
|
p = Post.new(:title_translations => {"en" => "English Title"}, :body_1_translations => { "en" => "English Body" })
|
29
26
|
I18n.with_locale(:fr) do
|
30
27
|
assert_equal("English Title", p.title)
|
@@ -42,6 +39,31 @@ class TranslatesTest < JSONTranslate::Test
|
|
42
39
|
end
|
43
40
|
end
|
44
41
|
|
42
|
+
def test_assigns_nil_value_as_standard
|
43
|
+
I18n.with_locale(:en) do
|
44
|
+
p = Post.new(:title_translations => { "en" => "English Title" })
|
45
|
+
p.title_fr = ""
|
46
|
+
p.title = ""
|
47
|
+
assert_nil(p.title_translations["fr"])
|
48
|
+
assert_nil(p.title_translations["en"])
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_assigns_blank_value_when_active
|
53
|
+
# when allow_blank: true option is active
|
54
|
+
I18n.with_locale(:en) do
|
55
|
+
p = PostDetailed.new(:comment_translations => { "en" => "English Comment" }, :title_translations => { "en" => "English Comment" })
|
56
|
+
p.comment_fr = ""
|
57
|
+
p.comment = ""
|
58
|
+
p.title_en = nil
|
59
|
+
p.title = nil
|
60
|
+
assert_equal("", p.comment_translations["fr"])
|
61
|
+
assert_equal("", p.comment_translations["en"])
|
62
|
+
assert_nil(p.title_translations["en"])
|
63
|
+
assert_nil(p.title_translations["en"])
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
45
67
|
def test_persists_changes_in_specified_locale
|
46
68
|
I18n.with_locale(:en) do
|
47
69
|
p = Post.create!(:title_translations => { "en" => "Original Text" }, :body_1_translations => { "en" => "Original Body" })
|
@@ -64,9 +86,6 @@ class TranslatesTest < JSONTranslate::Test
|
|
64
86
|
end
|
65
87
|
|
66
88
|
def test_retrieves_in_specified_locale_with_fallbacks
|
67
|
-
I18n::Backend::Simple.include(I18n::Backend::Fallbacks)
|
68
|
-
I18n.default_locale = :"en-US"
|
69
|
-
|
70
89
|
p = Post.new(:title_translations => { "en" => "English Title" }, :body_1_translations => { "en" => "English Body" })
|
71
90
|
I18n.with_locale(:fr) do
|
72
91
|
assert_equal("English Title", p.title)
|
@@ -79,9 +98,6 @@ class TranslatesTest < JSONTranslate::Test
|
|
79
98
|
end
|
80
99
|
|
81
100
|
def test_fallback_from_empty_string
|
82
|
-
I18n::Backend::Simple.include(I18n::Backend::Fallbacks)
|
83
|
-
I18n.default_locale = :"en-US"
|
84
|
-
|
85
101
|
p = Post.new(:title_translations => { "en" => "English Title", "fr" => "" }, :body_1_translations => { "en" => "English Body", "fr" => "" })
|
86
102
|
I18n.with_locale(:fr) do
|
87
103
|
assert_equal("English Title", p.title)
|
@@ -94,9 +110,6 @@ class TranslatesTest < JSONTranslate::Test
|
|
94
110
|
end
|
95
111
|
|
96
112
|
def test_retrieves_in_specified_locale_with_fallback_disabled
|
97
|
-
I18n::Backend::Simple.include(I18n::Backend::Fallbacks)
|
98
|
-
I18n.default_locale = :"en-US"
|
99
|
-
|
100
113
|
p = Post.new(:title_translations => { "en" => "English Title" }, :body_1_translations => { "en" => "English Body" })
|
101
114
|
p.disable_fallback
|
102
115
|
I18n.with_locale(:fr) do
|
@@ -106,9 +119,6 @@ class TranslatesTest < JSONTranslate::Test
|
|
106
119
|
end
|
107
120
|
|
108
121
|
def test_retrieves_in_specified_locale_with_fallback_disabled_using_a_block
|
109
|
-
I18n::Backend::Simple.include(I18n::Backend::Fallbacks)
|
110
|
-
I18n.default_locale = :"en-US"
|
111
|
-
|
112
122
|
p = Post.new(:title_translations => { "en" => "English Title" }, :body_1_translations => { "en" => "English Body" })
|
113
123
|
p.enable_fallback
|
114
124
|
|
@@ -133,9 +143,6 @@ class TranslatesTest < JSONTranslate::Test
|
|
133
143
|
end
|
134
144
|
|
135
145
|
def test_retrieves_in_specified_locale_with_fallback_reenabled
|
136
|
-
I18n::Backend::Simple.include(I18n::Backend::Fallbacks)
|
137
|
-
I18n.default_locale = :"en-US"
|
138
|
-
|
139
146
|
p = Post.new(:title_translations => { "en" => "English Title" }, :body_1_translations => { "en" => "English Body" })
|
140
147
|
p.disable_fallback
|
141
148
|
p.enable_fallback
|
@@ -150,9 +157,6 @@ class TranslatesTest < JSONTranslate::Test
|
|
150
157
|
end
|
151
158
|
|
152
159
|
def test_retrieves_in_specified_locale_with_fallback_reenabled_using_a_block
|
153
|
-
I18n::Backend::Simple.include(I18n::Backend::Fallbacks)
|
154
|
-
I18n.default_locale = :"en-US"
|
155
|
-
|
156
160
|
p = Post.new(:title_translations => { "en" => "English Title" }, :body_1_translations => { "en" => "English Body" })
|
157
161
|
p.disable_fallback
|
158
162
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json_translate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.
|
4
|
+
version: 4.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rob Worley
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-04-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
@@ -84,6 +84,7 @@ files:
|
|
84
84
|
- test/database.yml
|
85
85
|
- test/gemfiles/Gemfile.rails-4.2.x
|
86
86
|
- test/gemfiles/Gemfile.rails-5.0.x
|
87
|
+
- test/gemfiles/Gemfile.rails-6.0.x
|
87
88
|
- test/test_helper.rb
|
88
89
|
- test/translates_test.rb
|
89
90
|
homepage: https://github.com/cfabianski/json_translate
|
@@ -105,13 +106,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
106
|
- !ruby/object:Gem::Version
|
106
107
|
version: '0'
|
107
108
|
requirements: []
|
108
|
-
|
109
|
-
rubygems_version: 2.6.14
|
109
|
+
rubygems_version: 3.1.2
|
110
110
|
signing_key:
|
111
111
|
specification_version: 4
|
112
112
|
summary: Rails I18n library for ActiveRecord model/data translation using PostgreSQL's
|
113
113
|
JSONB datatype.
|
114
114
|
test_files:
|
115
|
+
- test/gemfiles/Gemfile.rails-6.0.x
|
115
116
|
- test/gemfiles/Gemfile.rails-5.0.x
|
116
117
|
- test/gemfiles/Gemfile.rails-4.2.x
|
117
118
|
- test/database.yml
|