copy_tuner_client 0.4.3 → 0.4.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/Gemfile.lock +2 -2
- data/features/rails.feature +1 -1
- data/lib/copy_tuner_client/cache.rb +12 -1
- data/lib/copy_tuner_client/i18n_backend.rb +6 -3
- data/lib/copy_tuner_client/version.rb +1 -1
- data/spec/copy_tuner_client/cache_spec.rb +9 -0
- data/spec/copy_tuner_client/i18n_backend_spec.rb +42 -2
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0cb55c2bd2d4429781a893a3aab0ad71c0655701
|
4
|
+
data.tar.gz: 498fa6bcaad92bd1145f530aa5f2ce9820bd63ef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0bc675e3c354496f98ebd709e2abe80f85681a3eab511a4e2645127c46f112991aac078f62ff0681a484e3a3d1f68f1f54ad606315e527c7db61af8020cb1160
|
7
|
+
data.tar.gz: a9a276d4fd2e1c520a0293014648b70d8025ff0b72092a60cd768abcc3b71de98162399c76baeeff3d57a525896cde52720ce07e5f692a18871069259de072df
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
copy_tuner_client (0.4.
|
4
|
+
copy_tuner_client (0.4.4)
|
5
5
|
i18n (>= 0.5.0)
|
6
6
|
json
|
7
7
|
|
@@ -78,7 +78,7 @@ GEM
|
|
78
78
|
activesupport (>= 4.1.0)
|
79
79
|
hashdiff (0.3.2)
|
80
80
|
i18n (0.8.1)
|
81
|
-
json (2.0
|
81
|
+
json (2.1.0)
|
82
82
|
loofah (2.0.3)
|
83
83
|
nokogiri (>= 1.5.9)
|
84
84
|
mail (2.6.4)
|
data/features/rails.feature
CHANGED
@@ -245,7 +245,7 @@ Feature: Using copy_tuner in a rails app
|
|
245
245
|
When I wait for changes to be synchronized
|
246
246
|
Then the "abc123" project should have the following error blurbs:
|
247
247
|
| key | draft content |
|
248
|
-
| user.attributes.name.blank |
|
248
|
+
| user.attributes.name.blank | |
|
249
249
|
|
250
250
|
Scenario: ensure keys are synced with short lived processes
|
251
251
|
When I configure the copy_tuner client to have a polling delay of 86400 seconds
|
@@ -147,10 +147,21 @@ module CopyTunerClient
|
|
147
147
|
end
|
148
148
|
|
149
149
|
if changes_to_push
|
150
|
-
yield changes_to_push
|
150
|
+
yield nil_value_to_empty(changes_to_push)
|
151
151
|
end
|
152
152
|
end
|
153
153
|
|
154
|
+
def nil_value_to_empty(hash)
|
155
|
+
hash.each do |k, v|
|
156
|
+
if v.nil?
|
157
|
+
hash[k] = ''.freeze
|
158
|
+
elsif v.is_a?(Hash)
|
159
|
+
nil_value_to_empty(v)
|
160
|
+
end
|
161
|
+
end
|
162
|
+
hash
|
163
|
+
end
|
164
|
+
|
154
165
|
def lock(&block)
|
155
166
|
@mutex.synchronize &block
|
156
167
|
end
|
@@ -62,7 +62,7 @@ module CopyTunerClient
|
|
62
62
|
parts = I18n.normalize_keys(locale, key, scope, options[:separator])
|
63
63
|
key_with_locale = parts.join('.')
|
64
64
|
content = cache[key_with_locale] || super
|
65
|
-
cache[key_with_locale] =
|
65
|
+
cache[key_with_locale] = nil if content.nil?
|
66
66
|
content
|
67
67
|
end
|
68
68
|
|
@@ -86,8 +86,11 @@ module CopyTunerClient
|
|
86
86
|
content = super(locale, object, subject, options)
|
87
87
|
if content.respond_to?(:to_str)
|
88
88
|
parts = I18n.normalize_keys(locale, object, options[:scope], options[:separator])
|
89
|
-
|
90
|
-
|
89
|
+
# NOTE: ActionView::Helpers::TranslationHelper#translate wraps default String in an Array
|
90
|
+
if subject.is_a?(String) || (subject.is_a?(Array) && subject.size == 1 && subject.first.is_a?(String))
|
91
|
+
key = parts.join('.')
|
92
|
+
cache[key] = content.to_str
|
93
|
+
end
|
91
94
|
end
|
92
95
|
content
|
93
96
|
end
|
@@ -46,6 +46,15 @@ describe CopyTunerClient::Cache do
|
|
46
46
|
expect(client.uploaded).to eq({ 'test.key' => 'test value' })
|
47
47
|
end
|
48
48
|
|
49
|
+
it "uploads empties when nil is assigned" do
|
50
|
+
cache = build_cache
|
51
|
+
cache['test.key'] = nil
|
52
|
+
|
53
|
+
cache.flush
|
54
|
+
|
55
|
+
expect(client.uploaded).to eq({ 'test.key' => '' })
|
56
|
+
end
|
57
|
+
|
49
58
|
it 'upload without locale filter' do
|
50
59
|
cache = build_cache
|
51
60
|
cache['en.test.key'] = 'uploaded en'
|
@@ -58,11 +58,20 @@ describe CopyTunerClient::I18nBackend do
|
|
58
58
|
expect(cache['en.test.key']).to eq(default)
|
59
59
|
end
|
60
60
|
|
61
|
+
it "queues missing keys with default string in an array" do
|
62
|
+
default = 'default value'
|
63
|
+
|
64
|
+
expect(subject.translate('en', 'test.key', :default => [default])).to eq(default)
|
65
|
+
|
66
|
+
expect(cache['en.test.key']).to eq(default)
|
67
|
+
end
|
68
|
+
|
61
69
|
it "queues missing keys without default" do
|
62
70
|
expect { subject.translate('en', 'test.key') }.
|
63
71
|
to throw_symbol(:exception)
|
64
72
|
|
65
|
-
expect(cache
|
73
|
+
expect(cache).to have_key 'en.test.key'
|
74
|
+
expect(cache['en.test.key']).to be_nil
|
66
75
|
end
|
67
76
|
|
68
77
|
it "queues missing keys with scope" do
|
@@ -74,6 +83,36 @@ describe CopyTunerClient::I18nBackend do
|
|
74
83
|
expect(cache['en.test.key']).to eq(default)
|
75
84
|
end
|
76
85
|
|
86
|
+
it "does not queues missing keys with a symbol of default" do
|
87
|
+
cache['en.key.one'] = "Expected"
|
88
|
+
|
89
|
+
expect(subject.translate('en', 'key.three', :default => :"key.one")).to eq 'Expected'
|
90
|
+
|
91
|
+
expect(cache).to have_key 'en.key.three'
|
92
|
+
expect(cache['en.key.three']).to be_nil
|
93
|
+
|
94
|
+
expect(subject.translate('en', 'key.three', :default => :"key.one")).to eq 'Expected'
|
95
|
+
end
|
96
|
+
|
97
|
+
it "does not queues missing keys with an array of default" do
|
98
|
+
cache['en.key.one'] = "Expected"
|
99
|
+
|
100
|
+
expect(subject.translate('en', 'key.three', :default => [:"key.two", :"key.one"])).to eq 'Expected'
|
101
|
+
|
102
|
+
expect(cache).to have_key 'en.key.three'
|
103
|
+
expect(cache['en.key.three']).to be_nil
|
104
|
+
|
105
|
+
expect(subject.translate('en', 'key.three', :default => [:"key.two", :"key.one"])).to eq 'Expected'
|
106
|
+
end
|
107
|
+
|
108
|
+
it "queues missing keys with interpolation" do
|
109
|
+
default = 'default %{interpolate}'
|
110
|
+
|
111
|
+
expect(subject.translate('en', 'test.key', :default => default, :interpolate => 'interpolated')).to eq 'default interpolated'
|
112
|
+
|
113
|
+
expect(cache['en.test.key']).to eq 'default %{interpolate}'
|
114
|
+
end
|
115
|
+
|
77
116
|
it "marks strings as html safe" do
|
78
117
|
cache['en.test.key'] = FakeHtmlSafeString.new("Hello")
|
79
118
|
backend = build_backend
|
@@ -152,7 +191,8 @@ describe CopyTunerClient::I18nBackend do
|
|
152
191
|
|
153
192
|
# default と Fallbacks を併用した場合、キャッシュにデフォルト値は入らない仕様に変えた
|
154
193
|
# その仕様にしないと、うまく Fallbacks の処理が動かないため
|
155
|
-
expect(cache
|
194
|
+
expect(cache).to have_key 'en.test.key'
|
195
|
+
expect(cache['en.test.key']).to be_nil
|
156
196
|
end
|
157
197
|
end
|
158
198
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: copy_tuner_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- SonicGarden
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-09-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: i18n
|
@@ -319,7 +319,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
319
319
|
version: '0'
|
320
320
|
requirements: []
|
321
321
|
rubyforge_project:
|
322
|
-
rubygems_version: 2.
|
322
|
+
rubygems_version: 2.6.13
|
323
323
|
signing_key:
|
324
324
|
specification_version: 4
|
325
325
|
summary: Client for the CopyTuner copy management service
|