lokalise_rails 1.3.1 → 1.4.0
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 +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +1 -0
- data/lib/lokalise_rails.rb +1 -0
- data/lib/lokalise_rails/error.rb +10 -0
- data/lib/lokalise_rails/task_definition/base.rb +5 -4
- data/lib/lokalise_rails/task_definition/exporter.rb +2 -7
- data/lib/lokalise_rails/task_definition/importer.rb +4 -9
- data/lib/lokalise_rails/version.rb +1 -1
- data/lib/tasks/lokalise_rails_tasks.rake +4 -0
- data/lokalise_rails.gemspec +1 -1
- data/spec/lib/lokalise_rails/task_definition/base_spec.rb +5 -9
- data/spec/lib/lokalise_rails/task_definition/exporter_spec.rb +5 -10
- data/spec/lib/lokalise_rails/task_definition/importer_spec.rb +8 -8
- data/spec/lib/tasks/export_task_spec.rb +37 -0
- data/spec/lib/tasks/import_task_spec.rb +13 -0
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6448a3718185d09a6712428f671e02121e59c967199ae6e24f27b8623f12b280
|
4
|
+
data.tar.gz: c0f2501d9c937b26088ee23a6603a842121cb6a88516ae19d09d40abe1968161
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: be178f379eb4abbb4d50c4f3817422c665bed0c8a75f256c083b0229a57594956ca8c42648fe98be40ed1c4183f0e00fd51fcaf153a87ed408279c1d2ac152ec
|
7
|
+
data.tar.gz: db7dd0efdb0d9a7b72116adba959a04b899e41d5ccd89181f48e2ec2e1d097ebfebb732e6592c725b831cebf89134e77e0639deb8591876267306583064efa96
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 1.4.0 (29-Jun-21)
|
4
|
+
|
5
|
+
* Re-worked exception handling. Now when something goes wrong during the import or export process, this gem will re-raise all such errors (previously it just printed out some errors to the `$stdout`). If you run a Rake task, it will exit with a status code `1` and the actual error message. If you run a task programattically, you'll get an exception.
|
6
|
+
* Dropped support for Ruby 2.5
|
7
|
+
* Test against Ruby 3
|
8
|
+
|
3
9
|
## 1.3.1 (01-Apr-21)
|
4
10
|
|
5
11
|
* A bit better exception handling
|
data/README.md
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|

|
4
4
|
[](https://travis-ci.com/github/bodrovis/lokalise_rails)
|
5
5
|
[](https://codecov.io/gh/bodrovis/lokalise_rails)
|
6
|
+

|
6
7
|
|
7
8
|
This gem provides [Lokalise](http://lokalise.com) integration for Ruby on Rails and allows to exchange translation files easily. It relies on [ruby-lokalise-api](https://lokalise.github.io/ruby-lokalise-api) to send APIv2 requests.
|
8
9
|
|
data/lib/lokalise_rails.rb
CHANGED
@@ -25,11 +25,12 @@ module LokaliseRails
|
|
25
25
|
# Checks task options
|
26
26
|
#
|
27
27
|
# @return Array
|
28
|
-
def
|
28
|
+
def check_options_errors!
|
29
29
|
errors = []
|
30
|
-
errors << 'Project ID is not set!
|
31
|
-
errors << 'Lokalise API token is not set!
|
32
|
-
|
30
|
+
errors << 'Project ID is not set!' if LokaliseRails.project_id.nil? || LokaliseRails.project_id.empty?
|
31
|
+
errors << 'Lokalise API token is not set!' if LokaliseRails.api_token.nil? || LokaliseRails.api_token.empty?
|
32
|
+
|
33
|
+
raise(LokaliseRails::Error, errors.join(' ')) if errors.any?
|
33
34
|
end
|
34
35
|
|
35
36
|
private
|
@@ -10,12 +10,7 @@ module LokaliseRails
|
|
10
10
|
#
|
11
11
|
# @return [Array]
|
12
12
|
def export!
|
13
|
-
|
14
|
-
|
15
|
-
if errors.any?
|
16
|
-
errors.each { |e| $stdout.puts e }
|
17
|
-
return errors
|
18
|
-
end
|
13
|
+
check_options_errors!
|
19
14
|
|
20
15
|
queued_processes = []
|
21
16
|
each_file do |full_path, relative_path|
|
@@ -23,7 +18,7 @@ module LokaliseRails
|
|
23
18
|
project_id_with_branch, opts(full_path, relative_path)
|
24
19
|
)
|
25
20
|
rescue StandardError => e
|
26
|
-
|
21
|
+
raise e.class, "Error while trying to upload #{full_path}: #{e.message}"
|
27
22
|
end
|
28
23
|
|
29
24
|
$stdout.print 'Task complete!'
|
@@ -13,12 +13,7 @@ module LokaliseRails
|
|
13
13
|
#
|
14
14
|
# @return [Boolean]
|
15
15
|
def import!
|
16
|
-
|
17
|
-
|
18
|
-
if errors.any?
|
19
|
-
errors.each { |e| $stdout.puts e }
|
20
|
-
return false
|
21
|
-
end
|
16
|
+
check_options_errors!
|
22
17
|
|
23
18
|
unless proceed_when_safe_mode?
|
24
19
|
$stdout.print 'Task cancelled!'
|
@@ -39,7 +34,7 @@ module LokaliseRails
|
|
39
34
|
|
40
35
|
api_client.download_files project_id_with_branch, opts
|
41
36
|
rescue StandardError => e
|
42
|
-
|
37
|
+
raise e.class, "There was an error when trying to download files: #{e.message}"
|
43
38
|
end
|
44
39
|
|
45
40
|
# Opens ZIP archive (local or remote) with translations and processes its entries
|
@@ -50,7 +45,7 @@ module LokaliseRails
|
|
50
45
|
fetch_zip_entries(zip) { |entry| process!(entry) }
|
51
46
|
end
|
52
47
|
rescue StandardError => e
|
53
|
-
|
48
|
+
raise e.class, "There was an error when trying to process the downloaded files: #{e.message}"
|
54
49
|
end
|
55
50
|
|
56
51
|
# Iterates over ZIP entries. Each entry may be a file or folder.
|
@@ -75,7 +70,7 @@ module LokaliseRails
|
|
75
70
|
f.write LokaliseRails.translations_converter.call(data)
|
76
71
|
end
|
77
72
|
rescue StandardError => e
|
78
|
-
|
73
|
+
raise e.class, "Error when trying to process #{zip_entry&.name}: #{e.message}"
|
79
74
|
end
|
80
75
|
|
81
76
|
# Checks whether the user wishes to proceed when safe mode is enabled and the target directory is not empty
|
@@ -6,9 +6,13 @@ require "#{Rails.root}/config/lokalise_rails"
|
|
6
6
|
namespace :lokalise_rails do
|
7
7
|
task :import do
|
8
8
|
LokaliseRails::TaskDefinition::Importer.import!
|
9
|
+
rescue StandardError => e
|
10
|
+
abort e.inspect
|
9
11
|
end
|
10
12
|
|
11
13
|
task :export do
|
12
14
|
LokaliseRails::TaskDefinition::Exporter.export!
|
15
|
+
rescue StandardError => e
|
16
|
+
abort e.inspect
|
13
17
|
end
|
14
18
|
end
|
data/lokalise_rails.gemspec
CHANGED
@@ -37,7 +37,7 @@ Gem::Specification.new do |spec|
|
|
37
37
|
spec.add_development_dependency 'rspec', '~> 3.6'
|
38
38
|
spec.add_development_dependency 'rubocop', '~> 1.0'
|
39
39
|
spec.add_development_dependency 'rubocop-performance', '~> 1.5'
|
40
|
-
spec.add_development_dependency 'rubocop-rspec', '~> 2.
|
40
|
+
spec.add_development_dependency 'rubocop-rspec', '~> 2.4.0'
|
41
41
|
spec.add_development_dependency 'simplecov', '~> 0.16'
|
42
42
|
spec.add_development_dependency 'vcr', '~> 6.0'
|
43
43
|
end
|
@@ -34,22 +34,18 @@ describe LokaliseRails::TaskDefinition::Base do
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
-
describe '.
|
38
|
-
it '
|
37
|
+
describe '.check_options_errors!' do
|
38
|
+
it 'raises an error when the API key is not set' do
|
39
39
|
allow(LokaliseRails).to receive(:api_token).and_return(nil)
|
40
|
-
|
40
|
+
|
41
|
+
expect(-> { described_class.check_options_errors! }).to raise_error(LokaliseRails::Error, /API token is not set/i)
|
41
42
|
|
42
43
|
expect(LokaliseRails).to have_received(:api_token)
|
43
|
-
expect(errors.length).to eq(1)
|
44
|
-
expect(errors.first).to include('API token is not set')
|
45
44
|
end
|
46
45
|
|
47
46
|
it 'returns an error when the project_id is not set' do
|
48
47
|
allow_project_id nil do
|
49
|
-
|
50
|
-
|
51
|
-
expect(errors.length).to eq(1)
|
52
|
-
expect(errors.first).to include('Project ID is not set')
|
48
|
+
expect(-> { described_class.check_options_errors! }).to raise_error(LokaliseRails::Error, /ID is not set/i)
|
53
49
|
end
|
54
50
|
end
|
55
51
|
end
|
@@ -44,13 +44,13 @@ describe LokaliseRails::TaskDefinition::Exporter do
|
|
44
44
|
it 'halts when the API key is not set' do
|
45
45
|
allow(LokaliseRails).to receive(:api_token).and_return(nil)
|
46
46
|
|
47
|
-
expect(-> { described_class.export! }).to
|
47
|
+
expect(-> { described_class.export! }).to raise_error(LokaliseRails::Error, /API token is not set/i)
|
48
48
|
expect(LokaliseRails).to have_received(:api_token)
|
49
49
|
end
|
50
50
|
|
51
51
|
it 'halts when the project_id is not set' do
|
52
52
|
allow_project_id nil do
|
53
|
-
expect(-> { described_class.export! }).to
|
53
|
+
expect(-> { described_class.export! }).to raise_error(LokaliseRails::Error, /ID is not set/i)
|
54
54
|
end
|
55
55
|
end
|
56
56
|
end
|
@@ -107,17 +107,12 @@ describe LokaliseRails::TaskDefinition::Exporter do
|
|
107
107
|
end
|
108
108
|
|
109
109
|
describe '.export!' do
|
110
|
-
it '
|
110
|
+
it 're-raises export errors' do
|
111
111
|
allow_project_id
|
112
112
|
|
113
|
-
|
114
|
-
described_class.export!
|
113
|
+
VCR.use_cassette('upload_files_error') do
|
114
|
+
expect { described_class.export! }.to raise_error(Lokalise::Error::BadRequest, /Unknown `lang_iso`/)
|
115
115
|
end
|
116
|
-
|
117
|
-
expect(processes.length).to eq(1)
|
118
|
-
process = processes.first
|
119
|
-
expect(process.project_id).to eq(LokaliseRails.project_id)
|
120
|
-
expect(process.status).to eq('queued')
|
121
116
|
end
|
122
117
|
end
|
123
118
|
|
@@ -4,14 +4,14 @@ describe LokaliseRails::TaskDefinition::Importer do
|
|
4
4
|
describe '.open_and_process_zip' do
|
5
5
|
let(:faulty_trans) { "#{Rails.root}/public/faulty_trans.zip" }
|
6
6
|
|
7
|
-
it '
|
7
|
+
it 're-raises errors during file processing' do
|
8
8
|
expect(-> { described_class.open_and_process_zip(faulty_trans) }).
|
9
|
-
to
|
9
|
+
to raise_error(Psych::DisallowedClass, /Error when trying to process fail\.yml/)
|
10
10
|
end
|
11
11
|
|
12
|
-
it '
|
12
|
+
it 're-raises errors during file opening' do
|
13
13
|
expect(-> { described_class.open_and_process_zip('http://fake.url/wrong/path.zip') }).
|
14
|
-
to
|
14
|
+
to raise_error(SocketError, /Failed to open TCP connection/)
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
@@ -27,11 +27,11 @@ describe LokaliseRails::TaskDefinition::Importer do
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
it '
|
30
|
+
it 're-raises errors during file download' do
|
31
31
|
allow_project_id 'invalid'
|
32
32
|
VCR.use_cassette('download_files_error') do
|
33
33
|
expect(-> { described_class.download_files }).
|
34
|
-
to
|
34
|
+
to raise_error(Lokalise::Error::BadRequest, /Invalid `project_id` parameter/)
|
35
35
|
end
|
36
36
|
end
|
37
37
|
end
|
@@ -39,14 +39,14 @@ describe LokaliseRails::TaskDefinition::Importer do
|
|
39
39
|
describe '.import!' do
|
40
40
|
it 'halts when the API key is not set' do
|
41
41
|
allow(LokaliseRails).to receive(:api_token).and_return(nil)
|
42
|
-
expect(-> { described_class.import! }).to
|
42
|
+
expect(-> { described_class.import! }).to raise_error(LokaliseRails::Error, /API token is not set/i)
|
43
43
|
expect(LokaliseRails).to have_received(:api_token)
|
44
44
|
expect(count_translations).to eq(0)
|
45
45
|
end
|
46
46
|
|
47
47
|
it 'halts when the project_id is not set' do
|
48
48
|
allow_project_id nil do
|
49
|
-
expect(-> { described_class.import! }).to
|
49
|
+
expect(-> { described_class.import! }).to raise_error(LokaliseRails::Error, /ID is not set/i)
|
50
50
|
expect(count_translations).to eq(0)
|
51
51
|
end
|
52
52
|
end
|
@@ -1,7 +1,44 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
RSpec.describe LokaliseRails do
|
4
|
+
it 'halts when the API key is not set' do
|
5
|
+
allow(described_class).to receive(:api_token).and_return(nil)
|
6
|
+
|
7
|
+
expect(export_executor).to raise_error(SystemExit, /API token is not set/i)
|
8
|
+
expect(described_class).to have_received(:api_token)
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'halts when the project ID is not set' do
|
12
|
+
allow_project_id nil do
|
13
|
+
expect(export_executor).to raise_error(SystemExit, /ID is not set/i)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
4
17
|
it 'runs export rake task properly' do
|
5
18
|
expect(export_executor).to output(/complete!/).to_stdout
|
6
19
|
end
|
20
|
+
|
21
|
+
context 'with two translation files' do
|
22
|
+
let(:filename_ru) { 'ru.yml' }
|
23
|
+
let(:path_ru) { "#{Rails.root}/config/locales/#{filename_ru}" }
|
24
|
+
let(:relative_name_ru) { filename_ru }
|
25
|
+
|
26
|
+
before :all do
|
27
|
+
add_translation_files! with_ru: true
|
28
|
+
end
|
29
|
+
|
30
|
+
after :all do
|
31
|
+
rm_translation_files
|
32
|
+
end
|
33
|
+
|
34
|
+
describe '.export!' do
|
35
|
+
it 're-raises export errors' do
|
36
|
+
allow_project_id
|
37
|
+
|
38
|
+
VCR.use_cassette('upload_files_error') do
|
39
|
+
expect(export_executor).to raise_error(SystemExit, /Unknown `lang_iso`/)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
7
44
|
end
|
@@ -7,6 +7,19 @@ RSpec.describe LokaliseRails do
|
|
7
7
|
let(:local_trans) { "#{Rails.root}/public/trans.zip" }
|
8
8
|
let(:remote_trans) { 'https://github.com/bodrovis/lokalise_rails/blob/master/spec/dummy/public/trans.zip?raw=true' }
|
9
9
|
|
10
|
+
it 'halts when the API key is not set' do
|
11
|
+
allow(described_class).to receive(:api_token).and_return(nil)
|
12
|
+
|
13
|
+
expect(import_executor).to raise_error(SystemExit, /API token is not set/i)
|
14
|
+
expect(described_class).to have_received(:api_token)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'halts when the project ID is not set' do
|
18
|
+
allow_project_id nil do
|
19
|
+
expect(import_executor).to raise_error(SystemExit, /ID is not set/i)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
10
23
|
context 'when directory is empty' do
|
11
24
|
before do
|
12
25
|
mkdir_locales
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lokalise_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.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-
|
11
|
+
date: 2021-07-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ruby-lokalise-api
|
@@ -142,14 +142,14 @@ dependencies:
|
|
142
142
|
requirements:
|
143
143
|
- - "~>"
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version: 2.
|
145
|
+
version: 2.4.0
|
146
146
|
type: :development
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
150
|
- - "~>"
|
151
151
|
- !ruby/object:Gem::Version
|
152
|
-
version: 2.
|
152
|
+
version: 2.4.0
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: simplecov
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -198,6 +198,7 @@ files:
|
|
198
198
|
- lib/generators/lokalise_rails/install_generator.rb
|
199
199
|
- lib/generators/templates/lokalise_rails_config.rb
|
200
200
|
- lib/lokalise_rails.rb
|
201
|
+
- lib/lokalise_rails/error.rb
|
201
202
|
- lib/lokalise_rails/railtie.rb
|
202
203
|
- lib/lokalise_rails/task_definition/base.rb
|
203
204
|
- lib/lokalise_rails/task_definition/exporter.rb
|
@@ -258,7 +259,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
258
259
|
- !ruby/object:Gem::Version
|
259
260
|
version: '0'
|
260
261
|
requirements: []
|
261
|
-
rubygems_version: 3.2.
|
262
|
+
rubygems_version: 3.2.24
|
262
263
|
signing_key:
|
263
264
|
specification_version: 4
|
264
265
|
summary: Lokalise integration for Ruby on Rails
|