lokalise_manager 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +3 -0
- data/lib/ext/hash.rb +22 -0
- data/lib/lokalise_manager/global_config.rb +6 -1
- data/lib/lokalise_manager/task_definitions/base.rb +1 -1
- data/lib/lokalise_manager/task_definitions/exporter.rb +1 -1
- data/lib/lokalise_manager/task_definitions/importer.rb +2 -2
- data/lib/lokalise_manager/version.rb +1 -1
- data/lib/lokalise_manager.rb +2 -0
- data/spec/lib/ext/hash_spec.rb +12 -0
- data/spec/lib/lokalise_manager/global_config_spec.rb +5 -0
- data/spec/lib/lokalise_manager/task_definitions/base_spec.rb +5 -0
- data/spec/lib/lokalise_manager/task_definitions/exporter_spec.rb +18 -3
- data/spec/lib/lokalise_manager/task_definitions/importer_spec.rb +31 -3
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 49d525043d80bf4643208f1de37d06bdd12826c04b01cbde07ae566e5ab1e056
|
4
|
+
data.tar.gz: a3f7ea97ae346b93220677342e771f2e916112572d4c54c779664c7a0651f2b3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 59b08352f934330e07762d73066afadcb440478ef3548686b1ef32ab6ae3a0fb645a4da55cb7c75c02ff42d49ea73c82728f8247a6e78531de1154c40573f002
|
7
|
+
data.tar.gz: 98337218aa0519ab6d2982b38ce7582276301692c6cde59f5d2d75039a1951b1d8b7769584d6884ae3994286998299826cedadd8eba9ae3a5f65d87a1a9dabc9
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 1.2.0 (26-Oct-21)
|
4
|
+
|
5
|
+
* Add a new option `:silent_mode` which is `false` by default. When silent mode is enabled, no debug info will be printed out to `$stdout`. The only exception are the "safe mode" messages — you'll still be prompted to continue if the target directory is not empty.
|
6
|
+
* Use `#deep_merge` instead of a simple merge when processing options.
|
7
|
+
|
3
8
|
## 1.1.0 (25-Oct-21)
|
4
9
|
|
5
10
|
* Add a new option `:use_oauth2_token` which is `false` by default. When enabled, you'll be able to provide a token obtained via [OAuth 2 flow](https://docs.lokalise.com/en/articles/5574713-oauth-2) rather than generated via Lokalise profile. The token should still be provided via the `:api_token` option:
|
data/README.md
CHANGED
@@ -15,6 +15,8 @@ If you are looking for a Rails integration, please check [lokalise_rails](https:
|
|
15
15
|
|
16
16
|
This gem requires Ruby 2.5+. You will also need to [setup a Lokalise account](https://app.lokalise.com/signup) and create a [translation project](https://docs.lokalise.com/en/articles/1400460-projects). Finally, you will need to generate a [read/write API token](https://docs.lokalise.com/en/articles/1929556-api-tokens) at your Lokalise profile.
|
17
17
|
|
18
|
+
Alternatively, you can utilize a token obtained via OAuth 2 flow. When using such a token, you'll have to set `:use_oauth2_token` option to `true` (see below).
|
19
|
+
|
18
20
|
### Installation
|
19
21
|
|
20
22
|
Add the gem to your `Gemfile`:
|
@@ -92,6 +94,7 @@ Please don't forget that Lokalise API has rate limiting and you cannot send more
|
|
92
94
|
* `locales_path` (`string`) — path to the directory with your translation files. Defaults to `"#{Dir.getwd}/locales"`.
|
93
95
|
* `branch` (`string`) — Lokalise project branch to use. Defaults to `""` (no branch is provided).
|
94
96
|
* `timeouts` (`hash`) — set [request timeouts for the Lokalise API client](https://lokalise.github.io/ruby-lokalise-api/additional_info/customization#setting-timeouts). By default, requests have no timeouts: `{open_timeout: nil, timeout: nil}`. Both values are in seconds.
|
97
|
+
* `silent_mode` (`boolean`) — whether you would like to output debugging information to `$stdout`. By default, after a task is performed, a short notification message will be printed out to the terminal. When set to `false`, notifications won't be printed. Please note that currently `import_safe_mode` has higher priority. Even if you enable `silent_mode`, and the `import_safe_mode` is enabled as well, you will be prompted to confirm the import operation if the target directory is not empty.
|
95
98
|
|
96
99
|
### Import config
|
97
100
|
|
data/lib/ext/hash.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Taken from https://github.com/rails/rails/blob/83217025a171593547d1268651b446d3533e2019/activesupport/lib/active_support/core_ext/hash/deep_merge.rb
|
4
|
+
|
5
|
+
class Hash
|
6
|
+
def deep_merge(other_hash, &block)
|
7
|
+
dup.deep_merge!(other_hash, &block)
|
8
|
+
end
|
9
|
+
|
10
|
+
# Same as +deep_merge+, but modifies +self+.
|
11
|
+
def deep_merge!(other_hash, &block)
|
12
|
+
merge!(other_hash) do |key, this_val, other_val|
|
13
|
+
if this_val.is_a?(Hash) && other_val.is_a?(Hash)
|
14
|
+
this_val.deep_merge(other_val, &block)
|
15
|
+
elsif block
|
16
|
+
yield(key, this_val, other_val)
|
17
|
+
else
|
18
|
+
other_val
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -7,13 +7,18 @@ module LokaliseManager
|
|
7
7
|
attr_writer :import_opts, :import_safe_mode, :export_opts, :locales_path,
|
8
8
|
:file_ext_regexp, :skip_file_export, :branch, :timeouts,
|
9
9
|
:translations_loader, :translations_converter, :lang_iso_inferer,
|
10
|
-
:max_retries_export, :max_retries_import, :use_oauth2_token
|
10
|
+
:max_retries_export, :max_retries_import, :use_oauth2_token, :silent_mode
|
11
11
|
|
12
12
|
# Main interface to provide configuration options
|
13
13
|
def config
|
14
14
|
yield self
|
15
15
|
end
|
16
16
|
|
17
|
+
# When enabled, won't print any debugging info to $stdout
|
18
|
+
def silent_mode
|
19
|
+
@silent_mode || false
|
20
|
+
end
|
21
|
+
|
17
22
|
# When enabled, will use OAuth 2 Lokalise client and will require to provide a token obtained via OAuth 2 flow
|
18
23
|
# rather than via Lokalise profile
|
19
24
|
def use_oauth2_token
|
@@ -14,13 +14,13 @@ module LokaliseManager
|
|
14
14
|
check_options_errors!
|
15
15
|
|
16
16
|
unless proceed_when_safe_mode?
|
17
|
-
$stdout.print
|
17
|
+
$stdout.print('Task cancelled!') unless config.silent_mode
|
18
18
|
return false
|
19
19
|
end
|
20
20
|
|
21
21
|
open_and_process_zip download_files['bundle_url']
|
22
22
|
|
23
|
-
$stdout.print
|
23
|
+
$stdout.print('Task complete!') unless config.silent_mode
|
24
24
|
true
|
25
25
|
end
|
26
26
|
|
data/lib/lokalise_manager.rb
CHANGED
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
describe Hash do
|
4
|
+
let(:h1) { {a: 100, b: 200, c: {c1: 100}} }
|
5
|
+
let(:h2) { {b: 250, c: {c1: 200}} }
|
6
|
+
|
7
|
+
specify '#deep_merge' do
|
8
|
+
result = h1.deep_merge(h2) { |_key, this_val, other_val| this_val + other_val }
|
9
|
+
expect(result[:b]).to eq(450)
|
10
|
+
expect(result[:c][:c1]).to eq(300)
|
11
|
+
end
|
12
|
+
end
|
@@ -14,6 +14,11 @@ describe LokaliseManager::GlobalConfig do
|
|
14
14
|
fake_class.project_id = '123.abc'
|
15
15
|
end
|
16
16
|
|
17
|
+
it 'is possible to set silent_mode' do
|
18
|
+
allow(fake_class).to receive(:silent_mode=).with(true)
|
19
|
+
fake_class.silent_mode = true
|
20
|
+
end
|
21
|
+
|
17
22
|
it 'is possible to set use_oauth2_token' do
|
18
23
|
allow(fake_class).to receive(:use_oauth2_token=).with(true)
|
19
24
|
fake_class.use_oauth2_token = true
|
@@ -19,6 +19,11 @@ describe LokaliseManager::TaskDefinitions::Base do
|
|
19
19
|
expect(obj.config.project_id).to eq('345')
|
20
20
|
expect(obj.config.token).to eq('fake')
|
21
21
|
end
|
22
|
+
|
23
|
+
it 'tes' do
|
24
|
+
obj = described_class.new import_opts: {filter_langs: ['fr']}
|
25
|
+
puts obj.config
|
26
|
+
end
|
22
27
|
end
|
23
28
|
|
24
29
|
specify '.reset_client!' do
|
@@ -24,9 +24,11 @@ describe LokaliseManager::TaskDefinitions::Exporter do
|
|
24
24
|
|
25
25
|
describe '.export!' do
|
26
26
|
it 'sends a proper API request and handles rate limiting' do
|
27
|
-
process =
|
28
|
-
|
29
|
-
|
27
|
+
process = nil
|
28
|
+
|
29
|
+
VCR.use_cassette('upload_files_multiple') do
|
30
|
+
expect(-> { process = described_object.export!.first }).to output(/complete!/).to_stdout
|
31
|
+
end
|
30
32
|
|
31
33
|
expect(process.project_id).to eq(project_id)
|
32
34
|
expect(process.status).to eq('queued')
|
@@ -58,6 +60,19 @@ describe LokaliseManager::TaskDefinitions::Exporter do
|
|
58
60
|
end
|
59
61
|
|
60
62
|
describe '.export!' do
|
63
|
+
it 'sends a proper API request but does not output anything when silent_mode is enabled' do
|
64
|
+
allow(described_object.config).to receive(:silent_mode).and_return(true)
|
65
|
+
|
66
|
+
process = nil
|
67
|
+
|
68
|
+
VCR.use_cassette('upload_files') do
|
69
|
+
expect(-> { process = described_object.export!.first }).not_to output(/complete!/).to_stdout
|
70
|
+
end
|
71
|
+
|
72
|
+
expect(process.status).to eq('queued')
|
73
|
+
expect(described_object.config).to have_received(:silent_mode).at_most(1).times
|
74
|
+
end
|
75
|
+
|
61
76
|
it 'sends a proper API request' do
|
62
77
|
process = VCR.use_cassette('upload_files') do
|
63
78
|
described_object.export!
|
@@ -103,8 +103,10 @@ describe LokaliseManager::TaskDefinitions::Importer do
|
|
103
103
|
end
|
104
104
|
|
105
105
|
it 'runs import successfully' do
|
106
|
-
result =
|
107
|
-
|
106
|
+
result = nil
|
107
|
+
|
108
|
+
VCR.use_cassette('import') do
|
109
|
+
expect(-> { result = described_object.import! }).to output(/complete!/).to_stdout
|
108
110
|
end
|
109
111
|
|
110
112
|
expect(result).to be true
|
@@ -113,6 +115,20 @@ describe LokaliseManager::TaskDefinitions::Importer do
|
|
113
115
|
expect_file_exist loc_path, 'en.yml'
|
114
116
|
expect_file_exist loc_path, 'ru.yml'
|
115
117
|
end
|
118
|
+
|
119
|
+
it 'runs import successfully but does not provide any output when silent_mode is enabled' do
|
120
|
+
allow(described_object.config).to receive(:silent_mode).and_return(true)
|
121
|
+
result = nil
|
122
|
+
|
123
|
+
VCR.use_cassette('import') do
|
124
|
+
expect(-> { result = described_object.import! }).not_to output(/complete!/).to_stdout
|
125
|
+
end
|
126
|
+
|
127
|
+
expect(result).to be true
|
128
|
+
expect_file_exist loc_path, 'en.yml'
|
129
|
+
expect_file_exist loc_path, 'ru.yml'
|
130
|
+
expect(described_object.config).to have_received(:silent_mode).at_most(1).times
|
131
|
+
end
|
116
132
|
end
|
117
133
|
|
118
134
|
context 'when directory is not empty and safe mode enabled' do
|
@@ -157,9 +173,21 @@ describe LokaliseManager::TaskDefinitions::Importer do
|
|
157
173
|
it 'import halts when a user chooses not to proceed' do
|
158
174
|
allow(safe_mode_obj).to receive(:download_files).at_most(0).times
|
159
175
|
allow($stdin).to receive(:gets).and_return('N')
|
160
|
-
expect(-> { safe_mode_obj.import! }).to output(/
|
176
|
+
expect(-> { safe_mode_obj.import! }).to output(/cancelled/).to_stdout
|
177
|
+
|
178
|
+
expect(safe_mode_obj).not_to have_received(:download_files)
|
179
|
+
expect($stdin).to have_received(:gets)
|
180
|
+
expect(count_translations).to eq(1)
|
181
|
+
end
|
182
|
+
|
183
|
+
it 'import halts when a user chooses not to proceed and debug info is not printed out when silent_mode is enabled' do
|
184
|
+
allow(safe_mode_obj.config).to receive(:silent_mode).and_return(true)
|
185
|
+
allow(safe_mode_obj).to receive(:download_files).at_most(0).times
|
186
|
+
allow($stdin).to receive(:gets).and_return('N')
|
187
|
+
expect(-> { safe_mode_obj.import! }).not_to output(/cancelled/).to_stdout
|
161
188
|
|
162
189
|
expect(safe_mode_obj).not_to have_received(:download_files)
|
190
|
+
expect(safe_mode_obj.config).to have_received(:silent_mode)
|
163
191
|
expect($stdin).to have_received(:gets)
|
164
192
|
expect(count_translations).to eq(1)
|
165
193
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lokalise_manager
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ilya Bodrov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-10-
|
11
|
+
date: 2021-10-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ruby-lokalise-api
|
@@ -181,6 +181,7 @@ files:
|
|
181
181
|
- LICENSE
|
182
182
|
- README.md
|
183
183
|
- Rakefile
|
184
|
+
- lib/ext/hash.rb
|
184
185
|
- lib/lokalise_manager.rb
|
185
186
|
- lib/lokalise_manager/error.rb
|
186
187
|
- lib/lokalise_manager/global_config.rb
|
@@ -189,6 +190,7 @@ files:
|
|
189
190
|
- lib/lokalise_manager/task_definitions/importer.rb
|
190
191
|
- lib/lokalise_manager/version.rb
|
191
192
|
- lokalise_manager.gemspec
|
193
|
+
- spec/lib/ext/hash_spec.rb
|
192
194
|
- spec/lib/lokalise_manager/global_config_spec.rb
|
193
195
|
- spec/lib/lokalise_manager/task_definitions/base_spec.rb
|
194
196
|
- spec/lib/lokalise_manager/task_definitions/exporter_spec.rb
|
@@ -217,11 +219,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
217
219
|
- !ruby/object:Gem::Version
|
218
220
|
version: '0'
|
219
221
|
requirements: []
|
220
|
-
rubygems_version: 3.2.
|
222
|
+
rubygems_version: 3.2.29
|
221
223
|
signing_key:
|
222
224
|
specification_version: 4
|
223
225
|
summary: Lokalise integration for Ruby
|
224
226
|
test_files:
|
227
|
+
- spec/lib/ext/hash_spec.rb
|
225
228
|
- spec/lib/lokalise_manager/global_config_spec.rb
|
226
229
|
- spec/lib/lokalise_manager/task_definitions/base_spec.rb
|
227
230
|
- spec/lib/lokalise_manager/task_definitions/exporter_spec.rb
|