copy_tuner_client 0.4.12 → 0.5.0.pre
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/.travis.yml +10 -10
- data/CHANGELOG.md +9 -0
- data/Gemfile.lock +2 -2
- data/README.md +1 -1
- data/copy_tuner_client.gemspec +1 -0
- data/gemfiles/{4.1.gemfile → 5.0.gemfile} +1 -1
- data/gemfiles/{4.2.gemfile → 5.1.gemfile} +1 -1
- data/gemfiles/{4.0.gemfile → 5.2.gemfile} +1 -1
- data/lib/copy_tuner_client/cache.rb +14 -29
- data/lib/copy_tuner_client/client.rb +4 -2
- data/lib/copy_tuner_client/configuration.rb +1 -15
- data/lib/copy_tuner_client/dotted_hash.rb +32 -0
- data/lib/copy_tuner_client/engine.rb +0 -4
- data/lib/copy_tuner_client/version.rb +1 -1
- data/lib/tasks/copy_tuner_client_tasks.rake +12 -0
- data/spec/copy_tuner_client/cache_spec.rb +26 -44
- data/spec/copy_tuner_client/dotted_hash_spec.rb +96 -0
- metadata +12 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6fe18af1c45ea03ac6fe080c00f4121c4c447db6
|
4
|
+
data.tar.gz: fa4cedc35cd14f755ec8d75fd3e2b16c2bcd7aed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b15c3fc421a0393bb0aa7e8fd8efe71c9fe91c19b1ba8a41d479058ca044726a06d227425ce6e03997c94b9a0fc5d0d8afefe4784903649bff39cd205e48546a
|
7
|
+
data.tar.gz: 2f347762328d8d2e1dbe528508c5a86c3714c1c0cb98c3fc39c1101950758a6e5c71abca7f7c8f21c0d346715cdc5a658984e146fa99e247caaecfb29ae63ace
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.4.6
|
data/.travis.yml
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
rvm:
|
2
|
-
- 2.
|
3
|
-
- 2.
|
4
|
-
- 2.
|
2
|
+
- 2.4.6
|
3
|
+
- 2.5.5
|
4
|
+
- 2.6.3
|
5
5
|
|
6
6
|
gemfile:
|
7
|
-
- gemfiles/
|
8
|
-
- gemfiles/
|
9
|
-
- gemfiles/
|
7
|
+
- gemfiles/5.0.gemfile
|
8
|
+
- gemfiles/5.1.gemfile
|
9
|
+
- gemfiles/5.2.gemfile
|
10
10
|
|
11
11
|
matrix:
|
12
12
|
exclude:
|
13
|
-
- rvm: 2.
|
14
|
-
gemfile: gemfiles/
|
15
|
-
- rvm: 2.
|
16
|
-
gemfile: gemfiles/
|
13
|
+
- rvm: 2.6.3
|
14
|
+
gemfile: gemfiles/5.0.gemfile
|
15
|
+
- rvm: 2.6.3
|
16
|
+
gemfile: gemfiles/5.1.gemfile
|
17
17
|
|
18
18
|
before_install:
|
19
19
|
- gem update bundler
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
## 0.5.0
|
2
|
+
- Not support ruby 2.3
|
3
|
+
- Add copy_tuner:detect_conflict_keys task
|
4
|
+
- Do not re-upload empty keys
|
5
|
+
- Fix dual loading tasks
|
6
|
+
- Remove config.copyray_js_injection_regexp_for_debug
|
7
|
+
- Remove config.copyray_js_injection_regexp_for_precompiled
|
8
|
+
- Download translation when initialization
|
9
|
+
|
1
10
|
## 0.4.11
|
2
11
|
- changes
|
3
12
|
- Fix hide toggle button on mobile device.
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
copy_tuner_client (0.
|
4
|
+
copy_tuner_client (0.5.0.pre)
|
5
5
|
i18n (>= 0.5.0)
|
6
6
|
json
|
7
7
|
|
@@ -76,7 +76,7 @@ GEM
|
|
76
76
|
activesupport (>= 4.1.0)
|
77
77
|
hashdiff (0.3.2)
|
78
78
|
i18n (0.8.1)
|
79
|
-
json (2.
|
79
|
+
json (2.2.0)
|
80
80
|
loofah (2.0.3)
|
81
81
|
nokogiri (>= 1.5.9)
|
82
82
|
mail (2.6.4)
|
data/README.md
CHANGED
@@ -17,6 +17,7 @@ Create config/initializers/copy_tuner.rb
|
|
17
17
|
CopyTunerClient.configure do |config|
|
18
18
|
config.api_key = 'YOUR-API-KEY'
|
19
19
|
config.host = 'COPY-TUNER-HOST-NAME'
|
20
|
+
config.html_escape = true
|
20
21
|
|
21
22
|
# I18n keys and messages will be sent to server if the locale matches
|
22
23
|
config.locales = [:ja, :en]
|
@@ -72,4 +73,3 @@ $ npm run build # Compile to a <script> containing a self-executing function
|
|
72
73
|
$ bundle exec rake build # build gem to pkg/ dir
|
73
74
|
$ bundle exec rake install # install to local gem
|
74
75
|
$ bundle exec rake release # release gem to rubygems.org
|
75
|
-
|
data/copy_tuner_client.gemspec
CHANGED
@@ -3,6 +3,7 @@ $LOAD_PATH.push File.expand_path('../lib', __FILE__)
|
|
3
3
|
require 'copy_tuner_client/version'
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
|
+
s.required_ruby_version = '>= 2.4.0'
|
6
7
|
s.add_dependency 'i18n', '>= 0.5.0'
|
7
8
|
s.add_dependency 'json'
|
8
9
|
s.add_development_dependency 'appraisal', '~> 2.1'
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'thread'
|
2
2
|
require 'copy_tuner_client/client'
|
3
|
+
require 'copy_tuner_client/dotted_hash'
|
3
4
|
|
4
5
|
module CopyTunerClient
|
5
6
|
# Manages synchronization of copy between {I18nBackend} and {Client}. Acts
|
@@ -20,6 +21,7 @@ module CopyTunerClient
|
|
20
21
|
@locales = Array(options[:locales]).map(&:to_s)
|
21
22
|
# mutable states
|
22
23
|
@blurbs = {}
|
24
|
+
@blank_keys = Set.new
|
23
25
|
@queued = {}
|
24
26
|
@started = false
|
25
27
|
@downloaded = false
|
@@ -37,9 +39,12 @@ module CopyTunerClient
|
|
37
39
|
# @param key [String] the key of the blurb to update
|
38
40
|
# @param value [String] the new contents of the blurb
|
39
41
|
def []=(key, value)
|
40
|
-
return if
|
42
|
+
return if @exclude_key_regexp && key.match?(@exclude_key_regexp)
|
41
43
|
return if @locales.present? && !@locales.member?(key.split('.').first)
|
42
|
-
lock
|
44
|
+
lock do
|
45
|
+
return if @blank_keys.member?(key)
|
46
|
+
@queued[key] = value
|
47
|
+
end
|
43
48
|
end
|
44
49
|
|
45
50
|
# Keys for all blurbs stored on the server.
|
@@ -51,30 +56,7 @@ module CopyTunerClient
|
|
51
56
|
# Yaml representation of all blurbs
|
52
57
|
# @return [String] yaml
|
53
58
|
def export
|
54
|
-
|
55
|
-
lock do
|
56
|
-
@blurbs.sort.each do |(blurb_key, value)|
|
57
|
-
current = keys
|
58
|
-
yaml_keys = blurb_key.split('.')
|
59
|
-
|
60
|
-
0.upto(yaml_keys.size - 2) do |i|
|
61
|
-
key = yaml_keys[i]
|
62
|
-
|
63
|
-
# Overwrite en.key with en.sub.key
|
64
|
-
unless current[key].class == Hash
|
65
|
-
current[key] = {}
|
66
|
-
end
|
67
|
-
|
68
|
-
current = current[key]
|
69
|
-
end
|
70
|
-
|
71
|
-
current[yaml_keys.last] = value
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
unless keys.size < 1
|
76
|
-
keys.to_yaml
|
77
|
-
end
|
59
|
+
lock { @blurbs.present? ? DottedHash.to_h(@blurbs).to_yaml : nil }
|
78
60
|
end
|
79
61
|
|
80
62
|
# Waits until the first download has finished.
|
@@ -108,8 +90,11 @@ module CopyTunerClient
|
|
108
90
|
@started = true
|
109
91
|
|
110
92
|
res = client.download do |downloaded_blurbs|
|
111
|
-
downloaded_blurbs.
|
112
|
-
lock
|
93
|
+
blank_blurbs, blurbs = downloaded_blurbs.partition { |_key, value| value == '' }
|
94
|
+
lock do
|
95
|
+
@blank_keys = Set.new(blank_blurbs.to_h.keys)
|
96
|
+
@blurbs = blurbs.to_h
|
97
|
+
end
|
113
98
|
end
|
114
99
|
|
115
100
|
@last_downloaded_at = Time.now.utc
|
@@ -127,7 +112,7 @@ module CopyTunerClient
|
|
127
112
|
flush
|
128
113
|
end
|
129
114
|
|
130
|
-
attr_reader :last_downloaded_at, :last_uploaded_at, :queued
|
115
|
+
attr_reader :last_downloaded_at, :last_uploaded_at, :queued, :blurbs
|
131
116
|
|
132
117
|
def inspect
|
133
118
|
"#<CopyTunerClient::Cache:#{object_id}>"
|
@@ -16,6 +16,8 @@ module CopyTunerClient
|
|
16
16
|
Net::ProtocolError, SocketError, OpenSSL::SSL::SSLError,
|
17
17
|
Errno::ECONNREFUSED]
|
18
18
|
|
19
|
+
USER_AGENT = "copy_tuner_client #{CopyTunerClient::VERSION}"
|
20
|
+
|
19
21
|
# Usually instantiated from {Configuration#apply}. Copies options.
|
20
22
|
# @param options [Hash]
|
21
23
|
# @option options [String] :api_key API key of the project to connect to
|
@@ -67,7 +69,7 @@ module CopyTunerClient
|
|
67
69
|
# @raise [ConnectionError] if the connection fails
|
68
70
|
def upload(data)
|
69
71
|
connect(host) do |http|
|
70
|
-
response = http.post(uri('draft_blurbs'), data.to_json, 'Content-Type' => 'application/json')
|
72
|
+
response = http.post(uri('draft_blurbs'), data.to_json, 'Content-Type' => 'application/json', 'User-Agent' => USER_AGENT)
|
71
73
|
check response
|
72
74
|
log 'Uploaded missing translations'
|
73
75
|
end
|
@@ -77,7 +79,7 @@ module CopyTunerClient
|
|
77
79
|
# @raise [ConnectionError] if the connection fails
|
78
80
|
def deploy
|
79
81
|
connect(host) do |http|
|
80
|
-
response = http.post(uri('deploys'), '')
|
82
|
+
response = http.post(uri('deploys'), '', 'User-Agent' => USER_AGENT)
|
81
83
|
check response
|
82
84
|
log 'Deployed'
|
83
85
|
end
|
@@ -119,12 +119,6 @@ module CopyTunerClient
|
|
119
119
|
# @return [String] The S3 host to connect to (defaults to +copy-tuner-us.s3.amazonaws.com+).
|
120
120
|
attr_accessor :s3_host
|
121
121
|
|
122
|
-
# @return [Regexp] Copyray js injection pattern for debug
|
123
|
-
attr_accessor :copyray_js_injection_regexp_for_debug
|
124
|
-
|
125
|
-
# @return [Regexp] Copyray js injection pattern for precompiled
|
126
|
-
attr_accessor :copyray_js_injection_regexp_for_precompiled
|
127
|
-
|
128
122
|
# @return [Boolean] To disable Copyray comment injection, set true
|
129
123
|
attr_accessor :disable_copyray_comment_injection
|
130
124
|
|
@@ -136,14 +130,6 @@ module CopyTunerClient
|
|
136
130
|
|
137
131
|
alias_method :secure?, :secure
|
138
132
|
|
139
|
-
def copyray_js_injection_regexp_for_debug=(value)
|
140
|
-
logger.warn 'DEPRECATION WARNING: copyray_js_injection_regexp_for_debug is deprecated'
|
141
|
-
end
|
142
|
-
|
143
|
-
def copyray_js_injection_regexp_for_precompiled=(value)
|
144
|
-
logger.warn 'DEPRECATION WARNING: copyray_js_injection_regexp_for_precompiled is deprecated'
|
145
|
-
end
|
146
|
-
|
147
133
|
# Instantiated from {CopyTunerClient.configure}. Sets defaults.
|
148
134
|
def initialize
|
149
135
|
self.client_name = 'CopyTuner Client'
|
@@ -269,7 +255,7 @@ module CopyTunerClient
|
|
269
255
|
process_guard.start
|
270
256
|
end
|
271
257
|
|
272
|
-
if test?
|
258
|
+
if !(test? && disable_test_translation)
|
273
259
|
logger.info "Download translation now"
|
274
260
|
cache.download
|
275
261
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module CopyTunerClient
|
2
|
+
module DottedHash
|
3
|
+
def to_h(dotted_hash)
|
4
|
+
hash = {}
|
5
|
+
dotted_hash.to_h.transform_keys(&:to_s).sort.each do |key, value|
|
6
|
+
_hash = key.split('.').reverse.inject(value) { |memo, key| { key => memo } }
|
7
|
+
hash.deep_merge!(_hash)
|
8
|
+
end
|
9
|
+
hash
|
10
|
+
end
|
11
|
+
|
12
|
+
def conflict_keys(dotted_hash)
|
13
|
+
all_keys = dotted_hash.keys.sort
|
14
|
+
results = {}
|
15
|
+
|
16
|
+
all_keys.each_with_index do |key, index|
|
17
|
+
prefix = "#{key}."
|
18
|
+
conflict_keys = ((index + 1)..Float::INFINITY)
|
19
|
+
.take_while { |i| all_keys[i]&.start_with?(prefix) }
|
20
|
+
.map { |i| all_keys[i] }
|
21
|
+
|
22
|
+
if conflict_keys.present?
|
23
|
+
results[key] = conflict_keys
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
results
|
28
|
+
end
|
29
|
+
|
30
|
+
module_function :to_h, :conflict_keys
|
31
|
+
end
|
32
|
+
end
|
@@ -17,4 +17,16 @@ namespace :copy_tuner do
|
|
17
17
|
raise "No blurbs have been cached."
|
18
18
|
end
|
19
19
|
end
|
20
|
+
|
21
|
+
desc "Detect invalid keys."
|
22
|
+
task :detect_conflict_keys => :environment do
|
23
|
+
conflict_keys = CopyTunerClient::DottedHash.conflict_keys(CopyTunerClient.cache.blurbs)
|
24
|
+
|
25
|
+
if conflict_keys.empty?
|
26
|
+
puts 'All success'
|
27
|
+
else
|
28
|
+
pp conflict_keys
|
29
|
+
raise 'Exists invalid keys'
|
30
|
+
end
|
31
|
+
end
|
20
32
|
end
|
@@ -95,6 +95,20 @@ describe CopyTunerClient::Cache do
|
|
95
95
|
expect(cache['test.key']).to eq('test value')
|
96
96
|
end
|
97
97
|
|
98
|
+
it "download included empty keys" do
|
99
|
+
client['en.test.key'] = 'test value'
|
100
|
+
client['en.test.empty'] = ''
|
101
|
+
cache = build_cache
|
102
|
+
|
103
|
+
cache.download
|
104
|
+
|
105
|
+
expect(cache['en.test.key']).to eq('test value')
|
106
|
+
expect(cache['en.test.empty']).to eq(nil)
|
107
|
+
|
108
|
+
cache['en.test.empty'] = ''
|
109
|
+
expect(cache.queued).to be_empty
|
110
|
+
end
|
111
|
+
|
98
112
|
it "handles connection errors when flushing" do
|
99
113
|
failure = "server is napping"
|
100
114
|
logger = FakeLogger.new
|
@@ -248,65 +262,33 @@ describe CopyTunerClient::Cache do
|
|
248
262
|
end
|
249
263
|
|
250
264
|
describe "#export" do
|
251
|
-
|
252
|
-
save_blurbs
|
253
|
-
@cache = build_cache
|
254
|
-
@cache.download
|
255
|
-
end
|
265
|
+
subject { cache.export }
|
256
266
|
|
257
|
-
let(:
|
267
|
+
let(:cache) do
|
268
|
+
cache = build_cache
|
269
|
+
cache.download
|
270
|
+
cache
|
271
|
+
end
|
258
272
|
|
259
273
|
it "can be invoked from the top-level constant" do
|
260
274
|
CopyTunerClient.configure do |config|
|
261
|
-
config.cache =
|
275
|
+
config.cache = cache
|
262
276
|
end
|
263
|
-
expect(
|
264
|
-
|
277
|
+
expect(cache).to receive(:export)
|
265
278
|
CopyTunerClient.export
|
266
279
|
end
|
267
280
|
|
268
|
-
it
|
269
|
-
|
281
|
+
it 'returns no yaml with no blurb keys' do
|
282
|
+
is_expected.to eq nil
|
270
283
|
end
|
271
284
|
|
272
285
|
context "with single-level blurb keys" do
|
273
|
-
|
286
|
+
before do
|
274
287
|
client['key'] = 'test value'
|
275
288
|
client['other_key'] = 'other test value'
|
276
289
|
end
|
277
290
|
|
278
|
-
it "
|
279
|
-
exported = YAML.load(@cache.export)
|
280
|
-
expect(exported['key']).to eq('test value')
|
281
|
-
expect(exported['other_key']).to eq('other test value')
|
282
|
-
end
|
283
|
-
end
|
284
|
-
|
285
|
-
context "with multi-level blurb keys" do
|
286
|
-
let(:save_blurbs) do
|
287
|
-
client['en.test.key'] = 'en test value'
|
288
|
-
client['en.test.other_key'] = 'en other test value'
|
289
|
-
client['fr.test.key'] = 'fr test value'
|
290
|
-
end
|
291
|
-
|
292
|
-
it "returns blurbs as yaml" do
|
293
|
-
exported = YAML.load(@cache.export)
|
294
|
-
expect(exported['en']['test']['key']).to eq('en test value')
|
295
|
-
expect(exported['en']['test']['other_key']).to eq('en other test value')
|
296
|
-
expect(exported['fr']['test']['key']).to eq('fr test value')
|
297
|
-
end
|
298
|
-
end
|
299
|
-
|
300
|
-
context "with conflicting blurb keys" do
|
301
|
-
let(:save_blurbs) do
|
302
|
-
client['en.test'] = 'test value'
|
303
|
-
client['en.test.key'] = 'other test value'
|
304
|
-
end
|
305
|
-
|
306
|
-
it "retains the new key" do
|
307
|
-
exported = YAML.load(@cache.export)
|
308
|
-
expect(exported['en']['test']['key']).to eq('other test value')
|
309
|
-
end
|
291
|
+
it { is_expected.to eq "---\nkey: test value\nother_key: other test value\n" }
|
310
292
|
end
|
311
293
|
end
|
312
294
|
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe CopyTunerClient::DottedHash do
|
4
|
+
describe ".to_h" do
|
5
|
+
subject { CopyTunerClient::DottedHash.to_h(dotted_hash) }
|
6
|
+
|
7
|
+
context 'empty keys' do
|
8
|
+
let(:dotted_hash) { {} }
|
9
|
+
|
10
|
+
it { is_expected.to eq({}) }
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'with single-level keys' do
|
14
|
+
let(:dotted_hash) { { 'key' => 'test value', other_key: 'other value' } }
|
15
|
+
|
16
|
+
it { is_expected.to eq({ 'key' => 'test value', 'other_key' => 'other value' }) }
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'array of key value pairs' do
|
20
|
+
let(:dotted_hash) { [['key', 'test value'], ['other_key', 'other value']] }
|
21
|
+
|
22
|
+
it { is_expected.to eq({ 'key' => 'test value', 'other_key' => 'other value' }) }
|
23
|
+
end
|
24
|
+
|
25
|
+
context "with multi-level blurb keys" do
|
26
|
+
let(:dotted_hash) do
|
27
|
+
{
|
28
|
+
'en.test.key' => 'en test value',
|
29
|
+
'en.test.other_key' => 'en other test value',
|
30
|
+
'fr.test.key' => 'fr test value',
|
31
|
+
}
|
32
|
+
end
|
33
|
+
|
34
|
+
it do
|
35
|
+
is_expected.to eq({
|
36
|
+
'en' => {
|
37
|
+
'test' => {
|
38
|
+
'key' => 'en test value',
|
39
|
+
'other_key' => 'en other test value',
|
40
|
+
},
|
41
|
+
},
|
42
|
+
'fr' => {
|
43
|
+
'test' => {
|
44
|
+
'key' => 'fr test value',
|
45
|
+
},
|
46
|
+
},
|
47
|
+
})
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
context "with conflicting keys" do
|
52
|
+
let(:dotted_hash) do
|
53
|
+
{
|
54
|
+
'en.test' => 'invalid value',
|
55
|
+
'en.test.key' => 'en test value',
|
56
|
+
}
|
57
|
+
end
|
58
|
+
|
59
|
+
it { is_expected.to eq({ 'en' => { 'test' => { 'key' => 'en test value' } } }) }
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe ".conflict_keys" do
|
64
|
+
subject { CopyTunerClient::DottedHash.conflict_keys(dotted_hash) }
|
65
|
+
|
66
|
+
context 'valid keys' do
|
67
|
+
let(:dotted_hash) do
|
68
|
+
{
|
69
|
+
'ja.hoge.test' => 'test',
|
70
|
+
'ja.hoge.fuga' => 'test',
|
71
|
+
}
|
72
|
+
end
|
73
|
+
|
74
|
+
it { is_expected.to eq({}) }
|
75
|
+
end
|
76
|
+
|
77
|
+
context 'invalid keys' do
|
78
|
+
let(:dotted_hash) do
|
79
|
+
{
|
80
|
+
'ja.hoge.test' => 'test',
|
81
|
+
'ja.hoge.test.hoge' => 'test',
|
82
|
+
'ja.hoge.test.fuga' => 'test',
|
83
|
+
'ja.fuga.test.hoge' => 'test',
|
84
|
+
'ja.fuga.test' => 'test',
|
85
|
+
}
|
86
|
+
end
|
87
|
+
|
88
|
+
it do
|
89
|
+
is_expected.to eq({
|
90
|
+
'ja.fuga.test' => %w[ja.fuga.test.hoge],
|
91
|
+
'ja.hoge.test' => %w[ja.hoge.test.fuga ja.hoge.test.hoge],
|
92
|
+
})
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
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
|
+
version: 0.5.0.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- SonicGarden
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-06-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: i18n
|
@@ -233,9 +233,9 @@ files:
|
|
233
233
|
- features/step_definitions/rails_steps.rb
|
234
234
|
- features/support/env.rb
|
235
235
|
- features/support/rails_server.rb
|
236
|
-
- gemfiles/
|
237
|
-
- gemfiles/
|
238
|
-
- gemfiles/
|
236
|
+
- gemfiles/5.0.gemfile
|
237
|
+
- gemfiles/5.1.gemfile
|
238
|
+
- gemfiles/5.2.gemfile
|
239
239
|
- init.rb
|
240
240
|
- lib/copy_tuner_client.rb
|
241
241
|
- lib/copy_tuner_client/cache.rb
|
@@ -243,6 +243,7 @@ files:
|
|
243
243
|
- lib/copy_tuner_client/configuration.rb
|
244
244
|
- lib/copy_tuner_client/copyray.rb
|
245
245
|
- lib/copy_tuner_client/copyray_middleware.rb
|
246
|
+
- lib/copy_tuner_client/dotted_hash.rb
|
246
247
|
- lib/copy_tuner_client/engine.rb
|
247
248
|
- lib/copy_tuner_client/errors.rb
|
248
249
|
- lib/copy_tuner_client/i18n_backend.rb
|
@@ -263,6 +264,7 @@ files:
|
|
263
264
|
- spec/copy_tuner_client/client_spec.rb
|
264
265
|
- spec/copy_tuner_client/configuration_spec.rb
|
265
266
|
- spec/copy_tuner_client/copyray_spec.rb
|
267
|
+
- spec/copy_tuner_client/dotted_hash_spec.rb
|
266
268
|
- spec/copy_tuner_client/i18n_backend_spec.rb
|
267
269
|
- spec/copy_tuner_client/poller_spec.rb
|
268
270
|
- spec/copy_tuner_client/prefixed_logger_spec.rb
|
@@ -299,15 +301,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
299
301
|
requirements:
|
300
302
|
- - ">="
|
301
303
|
- !ruby/object:Gem::Version
|
302
|
-
version:
|
304
|
+
version: 2.4.0
|
303
305
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
304
306
|
requirements:
|
305
|
-
- - "
|
307
|
+
- - ">"
|
306
308
|
- !ruby/object:Gem::Version
|
307
|
-
version:
|
309
|
+
version: 1.3.1
|
308
310
|
requirements: []
|
309
311
|
rubyforge_project:
|
310
|
-
rubygems_version: 2.
|
312
|
+
rubygems_version: 2.6.14.4
|
311
313
|
signing_key:
|
312
314
|
specification_version: 4
|
313
315
|
summary: Client for the CopyTuner copy management service
|
@@ -321,6 +323,7 @@ test_files:
|
|
321
323
|
- spec/copy_tuner_client/client_spec.rb
|
322
324
|
- spec/copy_tuner_client/configuration_spec.rb
|
323
325
|
- spec/copy_tuner_client/copyray_spec.rb
|
326
|
+
- spec/copy_tuner_client/dotted_hash_spec.rb
|
324
327
|
- spec/copy_tuner_client/i18n_backend_spec.rb
|
325
328
|
- spec/copy_tuner_client/poller_spec.rb
|
326
329
|
- spec/copy_tuner_client/prefixed_logger_spec.rb
|