lokalise_rails 2.0.0 → 3.0.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.
@@ -4,102 +4,4 @@ describe LokaliseRails do
4
4
  it 'returns a proper version' do
5
5
  expect(LokaliseRails::VERSION).to be_a(String)
6
6
  end
7
-
8
- it 'is possible to provide config options' do
9
- described_class.config do |c|
10
- expect(c).to eq(described_class)
11
- end
12
- end
13
-
14
- describe 'parameters' do
15
- let(:fake_class) { class_double('LokaliseRails') }
16
-
17
- it 'is possible to set project_id' do
18
- allow(fake_class).to receive(:project_id=).with('123.abc')
19
- fake_class.project_id = '123.abc'
20
- end
21
-
22
- it 'is possible to set file_ext_regexp' do
23
- allow(fake_class).to receive(:file_ext_regexp=).with(Regexp.new('.*'))
24
- fake_class.file_ext_regexp = Regexp.new('.*')
25
- end
26
-
27
- it 'is possible to set import_opts' do
28
- allow(fake_class).to receive(:import_opts=).with(duck_type(:each))
29
- fake_class.import_opts = {
30
- format: 'json',
31
- indentation: '8sp'
32
- }
33
- end
34
-
35
- it 'is possible to set export_opts' do
36
- allow(fake_class).to receive(:export_opts=).with(duck_type(:each))
37
- fake_class.export_opts = {
38
- convert_placeholders: true,
39
- detect_icu_plurals: true
40
- }
41
- end
42
-
43
- it 'is possible to set branch' do
44
- allow(fake_class).to receive(:branch=).with('custom')
45
- fake_class.branch = 'custom'
46
- end
47
-
48
- it 'is possible to set timeouts' do
49
- allow(fake_class).to receive(:timeouts=).with(duck_type(:each))
50
- fake_class.timeouts = {
51
- open_timeout: 100,
52
- timeout: 500
53
- }
54
- end
55
-
56
- it 'is possible to set import_safe_mode' do
57
- allow(fake_class).to receive(:import_safe_mode=).with(true)
58
- fake_class.import_safe_mode = true
59
- end
60
-
61
- it 'is possible to set max_retries_export' do
62
- allow(fake_class).to receive(:max_retries_export=).with(10)
63
- fake_class.max_retries_export = 10
64
- end
65
-
66
- it 'is possible to set max_retries_import' do
67
- allow(fake_class).to receive(:max_retries_import=).with(10)
68
- fake_class.max_retries_import = 10
69
- end
70
-
71
- it 'is possible to set api_token' do
72
- allow(fake_class).to receive(:api_token=).with('abc')
73
- fake_class.api_token = 'abc'
74
- end
75
-
76
- it 'is possible to override locales_path' do
77
- allow(fake_class).to receive(:locales_path=).with('/demo/path')
78
- fake_class.locales_path = '/demo/path'
79
- end
80
-
81
- it 'is possible to set skip_file_export' do
82
- cond = ->(f) { f.nil? }
83
- allow(fake_class).to receive(:skip_file_export=).with(cond)
84
- fake_class.skip_file_export = cond
85
- end
86
-
87
- it 'is possible to set translations_loader' do
88
- runner = ->(f) { f.to_json }
89
- allow(fake_class).to receive(:translations_loader=).with(runner)
90
- fake_class.translations_loader = runner
91
- end
92
-
93
- it 'is possible to set translations_converter' do
94
- runner = ->(f) { f.to_json }
95
- allow(fake_class).to receive(:translations_converter=).with(runner)
96
- fake_class.translations_converter = runner
97
- end
98
-
99
- it 'is possible to set lang_iso_inferer' do
100
- runner = ->(f) { f.to_json }
101
- allow(fake_class).to receive(:lang_iso_inferer=).with(runner)
102
- fake_class.lang_iso_inferer = runner
103
- end
104
- end
105
7
  end
@@ -1,27 +1,26 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- RSpec.describe LokaliseRails do
3
+ RSpec.describe 'Export Rake task' do
4
+ let(:global_config) { LokaliseRails::GlobalConfig }
5
+
4
6
  it 'halts when the API key is not set' do
5
- allow(described_class).to receive(:api_token).and_return(nil)
7
+ allow(global_config).to receive(:api_token).and_return(nil)
6
8
 
7
9
  expect(export_executor).to raise_error(SystemExit, /API token is not set/i)
8
- expect(described_class).to have_received(:api_token)
10
+ expect(global_config).to have_received(:api_token)
9
11
  end
10
12
 
11
13
  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
14
+ allow(global_config).to receive(:project_id).and_return(nil)
15
+
16
+ expect(export_executor).to raise_error(SystemExit, /ID is not set/i)
16
17
 
17
- it 'runs export rake task properly' do
18
- expect(export_executor).to output(/complete!/).to_stdout
18
+ expect(global_config).to have_received(:project_id)
19
19
  end
20
20
 
21
21
  context 'with two translation files' do
22
22
  let(:filename_ru) { 'ru.yml' }
23
23
  let(:path_ru) { "#{Rails.root}/config/locales/#{filename_ru}" }
24
- let(:relative_name_ru) { filename_ru }
25
24
 
26
25
  before :all do
27
26
  add_translation_files! with_ru: true
@@ -31,12 +30,20 @@ RSpec.describe LokaliseRails do
31
30
  rm_translation_files
32
31
  end
33
32
 
34
- describe '.export!' do
35
- it 're-raises export errors' do
36
- allow_project_id
33
+ describe 'export' do
34
+ it 'is callable' do
35
+ allow_project_id global_config, ENV['LOKALISE_PROJECT_ID'] do
36
+ VCR.use_cassette('upload_files') do
37
+ expect(export_executor).to output(/complete!/).to_stdout
38
+ end
39
+ end
40
+ end
37
41
 
38
- VCR.use_cassette('upload_files_error') do
39
- expect(export_executor).to raise_error(SystemExit, /Unknown `lang_iso`/)
42
+ it 're-raises export errors' do
43
+ allow_project_id global_config, '542886116159f798720dc4.94769464' do
44
+ VCR.use_cassette('upload_files_error') do
45
+ expect(export_executor).to raise_error(SystemExit, /Unknown `lang_iso`/)
46
+ end
40
47
  end
41
48
  end
42
49
  end
@@ -2,120 +2,57 @@
2
2
 
3
3
  require 'fileutils'
4
4
 
5
- RSpec.describe LokaliseRails do
6
- let(:loc_path) { described_class.locales_path }
7
- let(:local_trans) { "#{Rails.root}/public/trans.zip" }
8
- let(:remote_trans) { 'https://github.com/bodrovis/lokalise_rails/blob/master/spec/dummy/public/trans.zip?raw=true' }
5
+ RSpec.describe 'Import Rake task' do
6
+ let(:global_config) { LokaliseRails::GlobalConfig }
7
+ let(:loc_path) { global_config.locales_path }
9
8
 
10
9
  it 'halts when the API key is not set' do
11
- allow(described_class).to receive(:api_token).and_return(nil)
10
+ allow(global_config).to receive(:api_token).and_return(nil)
12
11
 
13
12
  expect(import_executor).to raise_error(SystemExit, /API token is not set/i)
14
- expect(described_class).to have_received(:api_token)
13
+ expect(global_config).to have_received(:api_token)
15
14
  end
16
15
 
17
16
  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
-
23
- context 'when directory is empty' do
24
- before do
25
- mkdir_locales
26
- rm_translation_files
27
- end
28
-
29
- after :all do
30
- rm_translation_files
31
- end
32
-
33
- it 'import rake task is callable' do
34
- allow(LokaliseRails::TaskDefinition::Importer).to receive(
35
- :download_files
36
- ).and_return(
37
- {
38
- 'project_id' => '123.abc',
39
- 'bundle_url' => local_trans
40
- }
41
- )
42
-
43
- expect(import_executor).to output(/complete!/).to_stdout
17
+ allow(global_config).to receive(:project_id).and_return(nil)
44
18
 
45
- expect(count_translations).to eq(4)
46
- expect(LokaliseRails::TaskDefinition::Importer).to have_received(:download_files)
47
- expect_file_exist loc_path, 'en/nested/main_en.yml'
48
- expect_file_exist loc_path, 'en/nested/deep/secondary_en.yml'
49
- expect_file_exist loc_path, 'ru/main_ru.yml'
50
- end
51
-
52
- it 'import rake task downloads ZIP archive properly' do
53
- allow(LokaliseRails::TaskDefinition::Importer).to receive(
54
- :download_files
55
- ).and_return(
56
- {
57
- 'project_id' => '123.abc',
58
- 'bundle_url' => remote_trans
59
- }
60
- )
19
+ expect(import_executor).to raise_error(SystemExit, /ID is not set/i)
61
20
 
62
- expect(import_executor).to output(/complete!/).to_stdout
63
-
64
- expect(LokaliseRails::TaskDefinition::Importer).to have_received(:download_files)
65
- expect(count_translations).to eq(4)
66
- expect_file_exist loc_path, 'en/nested/main_en.yml'
67
- expect_file_exist loc_path, 'en/nested/deep/secondary_en.yml'
68
- expect_file_exist loc_path, 'ru/main_ru.yml'
69
- end
21
+ expect(global_config).to have_received(:project_id)
70
22
  end
71
23
 
72
- context 'when directory is not empty and safe mode enabled' do
73
- before :all do
74
- mkdir_locales
75
- described_class.import_safe_mode = true
76
- end
77
-
24
+ context 'when directory is empty' do
78
25
  before do
26
+ mkdir_locales
79
27
  rm_translation_files
80
- add_translation_files!
81
28
  end
82
29
 
83
30
  after :all do
84
31
  rm_translation_files
85
- described_class.import_safe_mode = false
86
32
  end
87
33
 
88
- it 'import proceeds when the user agrees' do
89
- allow(LokaliseRails::TaskDefinition::Importer).to receive(
90
- :download_files
91
- ).and_return(
92
- {
93
- 'project_id' => '123.abc',
94
- 'bundle_url' => local_trans
95
- }
96
- )
97
-
98
- allow($stdin).to receive(:gets).and_return('Y')
99
- expect(import_executor).to output(/is not empty/).to_stdout
100
-
101
- expect(count_translations).to eq(5)
102
- expect($stdin).to have_received(:gets)
103
- expect(LokaliseRails::TaskDefinition::Importer).to have_received(:download_files)
104
- expect_file_exist loc_path, 'en/nested/main_en.yml'
105
- expect_file_exist loc_path, 'en/nested/deep/secondary_en.yml'
106
- expect_file_exist loc_path, 'ru/main_ru.yml'
107
- end
108
-
109
- it 'import halts when a user chooses not to proceed' do
110
- allow(LokaliseRails::TaskDefinition::Importer).to receive(
111
- :download_files
112
- ).at_most(0).times
113
- allow($stdin).to receive(:gets).and_return('N')
114
- expect(import_executor).to output(/is not empty/).to_stdout
115
-
116
- expect(LokaliseRails::TaskDefinition::Importer).not_to have_received(:download_files)
117
- expect($stdin).to have_received(:gets)
118
- expect(count_translations).to eq(1)
34
+ describe 'import' do
35
+ it 'is callable' do
36
+ allow_project_id global_config, ENV['LOKALISE_PROJECT_ID'] do
37
+ VCR.use_cassette('download_files') do
38
+ expect(import_executor).to output(/complete!/).to_stdout
39
+ end
40
+
41
+ expect(count_translations).to eq(4)
42
+
43
+ expect_file_exist loc_path, 'en.yml'
44
+ expect_file_exist loc_path, 'ru.yml'
45
+ expect_file_exist loc_path, 'yo.yml'
46
+ end
47
+ end
48
+
49
+ it 're-raises export errors' do
50
+ allow_project_id global_config, 'fake' do
51
+ VCR.use_cassette('download_files_error') do
52
+ expect(import_executor).to raise_error(SystemExit, /Invalid `project_id` parameter/)
53
+ end
54
+ end
55
+ end
119
56
  end
120
57
  end
121
58
  end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe LokaliseRails::Utils do
4
+ describe '.rails_root' do
5
+ it 'returns RAILS_ROOT if defined' do
6
+ allow(::Rails).to receive(:root).and_return(nil)
7
+ stub_const('RAILS_ROOT', '/stub')
8
+ expect(described_class.rails_root).to eq('/stub')
9
+ end
10
+
11
+ it 'fallbacks if neither roots are present' do
12
+ allow(::Rails).to receive(:root).and_return(nil)
13
+ expect(described_class.rails_root).to be_nil
14
+ end
15
+ end
16
+ end
data/spec/spec_helper.rb CHANGED
@@ -7,7 +7,6 @@ SimpleCov.start 'rails' do
7
7
  add_filter 'spec/'
8
8
  add_filter '.github/'
9
9
  add_filter 'lib/generators/templates/'
10
- add_filter 'lib/lokalise_rails/version'
11
10
  end
12
11
 
13
12
  if ENV['CI'] == 'true'
@@ -3,13 +3,8 @@
3
3
  require 'fileutils'
4
4
 
5
5
  module FileManager
6
- def expect_file_exist(path, file)
7
- file_path = File.join path, file
8
- expect(File.file?(file_path)).to be true
9
- end
10
-
11
6
  def mkdir_locales
12
- FileUtils.mkdir_p(LokaliseRails.locales_path) unless File.directory?(LokaliseRails.locales_path)
7
+ FileUtils.mkdir_p(LokaliseRails::GlobalConfig.locales_path) unless File.directory?(LokaliseRails::GlobalConfig.locales_path)
13
8
  end
14
9
 
15
10
  def rm_translation_files
@@ -17,7 +12,7 @@ module FileManager
17
12
  end
18
13
 
19
14
  def locales_dir
20
- Dir["#{LokaliseRails.locales_path}/**/*"]
15
+ Dir["#{LokaliseRails::GlobalConfig.locales_path}/**/*"]
21
16
  end
22
17
 
23
18
  def count_translations
@@ -41,15 +36,15 @@ module FileManager
41
36
  end
42
37
  end
43
38
 
44
- def add_config!
39
+ def add_config!(custom_text = '')
45
40
  data = <<~DATA
46
- require 'lokalise_rails'
47
- LokaliseRails.config do |c|
41
+ LokaliseRails::GlobalConfig.config do |c|
48
42
  c.api_token = ENV['LOKALISE_API_TOKEN']
49
43
  c.project_id = ENV['LOKALISE_PROJECT_ID']
50
- end
51
44
  DATA
52
45
 
46
+ data += custom_text
47
+ data += "\nend"
53
48
  open_and_write('config/lokalise_rails.rb') { |f| f.write data }
54
49
  end
55
50
 
@@ -1,11 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SpecAddons
4
- def allow_project_id(value = '189934715f57a162257d74.88352370')
5
- allow(LokaliseRails).to receive(:project_id).and_return(value)
4
+ def expect_file_exist(path, file)
5
+ file_path = File.join path, file
6
+ expect(File.file?(file_path)).to be true
7
+ end
8
+
9
+ def allow_project_id(obj, value)
10
+ allow(obj).to receive(:project_id).and_return(value)
6
11
  return unless block_given?
7
12
 
8
13
  yield
9
- expect(LokaliseRails).to have_received(:project_id)
14
+ expect(obj).to have_received(:project_id)
10
15
  end
11
16
  end
metadata CHANGED
@@ -1,43 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lokalise_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 3.0.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-08-19 00:00:00.000000000 Z
11
+ date: 2021-10-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: ruby-lokalise-api
14
+ name: lokalise_manager
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '4.0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '4.0'
27
- - !ruby/object:Gem::Dependency
28
- name: rubyzip
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '2.3'
19
+ version: '1.0'
34
20
  type: :runtime
35
21
  prerelease: false
36
22
  version_requirements: !ruby/object:Gem::Requirement
37
23
  requirements:
38
24
  - - "~>"
39
25
  - !ruby/object:Gem::Version
40
- version: '2.3'
26
+ version: '1.0'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: codecov
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -72,14 +58,14 @@ dependencies:
72
58
  requirements:
73
59
  - - "~>"
74
60
  - !ruby/object:Gem::Version
75
- version: 6.1.0
61
+ version: 6.1.4
76
62
  type: :development
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
66
  - - "~>"
81
67
  - !ruby/object:Gem::Version
82
- version: 6.1.0
68
+ version: 6.1.4
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: rake
85
71
  requirement: !ruby/object:Gem::Requirement
@@ -142,14 +128,14 @@ dependencies:
142
128
  requirements:
143
129
  - - "~>"
144
130
  - !ruby/object:Gem::Version
145
- version: 2.4.0
131
+ version: 2.5.0
146
132
  type: :development
147
133
  prerelease: false
148
134
  version_requirements: !ruby/object:Gem::Requirement
149
135
  requirements:
150
136
  - - "~>"
151
137
  - !ruby/object:Gem::Version
152
- version: 2.4.0
138
+ version: 2.5.0
153
139
  - !ruby/object:Gem::Dependency
154
140
  name: simplecov
155
141
  requirement: !ruby/object:Gem::Requirement
@@ -198,11 +184,9 @@ files:
198
184
  - lib/generators/lokalise_rails/install_generator.rb
199
185
  - lib/generators/templates/lokalise_rails_config.rb
200
186
  - lib/lokalise_rails.rb
201
- - lib/lokalise_rails/error.rb
187
+ - lib/lokalise_rails/global_config.rb
202
188
  - lib/lokalise_rails/railtie.rb
203
- - lib/lokalise_rails/task_definition/base.rb
204
- - lib/lokalise_rails/task_definition/exporter.rb
205
- - lib/lokalise_rails/task_definition/importer.rb
189
+ - lib/lokalise_rails/utils.rb
206
190
  - lib/lokalise_rails/version.rb
207
191
  - lib/tasks/lokalise_rails_tasks.rake
208
192
  - lokalise_rails.gemspec
@@ -229,12 +213,11 @@ files:
229
213
  - spec/dummy/config/routes.rb
230
214
  - spec/dummy/db/seeds.rb
231
215
  - spec/lib/generators/lokalise_rails/install_generator_spec.rb
232
- - spec/lib/lokalise_rails/task_definition/base_spec.rb
233
- - spec/lib/lokalise_rails/task_definition/exporter_spec.rb
234
- - spec/lib/lokalise_rails/task_definition/importer_spec.rb
216
+ - spec/lib/lokalise_rails/global_config_spec.rb
235
217
  - spec/lib/lokalise_rails_spec.rb
236
218
  - spec/lib/tasks/export_task_spec.rb
237
219
  - spec/lib/tasks/import_task_spec.rb
220
+ - spec/lib/utils_spec.rb
238
221
  - spec/spec_helper.rb
239
222
  - spec/support/file_manager.rb
240
223
  - spec/support/rake_utils.rb
@@ -259,7 +242,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
259
242
  - !ruby/object:Gem::Version
260
243
  version: '0'
261
244
  requirements: []
262
- rubygems_version: 3.2.25
245
+ rubygems_version: 3.2.26
263
246
  signing_key:
264
247
  specification_version: 4
265
248
  summary: Lokalise integration for Ruby on Rails
@@ -287,12 +270,11 @@ test_files:
287
270
  - spec/dummy/config/routes.rb
288
271
  - spec/dummy/db/seeds.rb
289
272
  - spec/lib/generators/lokalise_rails/install_generator_spec.rb
290
- - spec/lib/lokalise_rails/task_definition/base_spec.rb
291
- - spec/lib/lokalise_rails/task_definition/exporter_spec.rb
292
- - spec/lib/lokalise_rails/task_definition/importer_spec.rb
273
+ - spec/lib/lokalise_rails/global_config_spec.rb
293
274
  - spec/lib/lokalise_rails_spec.rb
294
275
  - spec/lib/tasks/export_task_spec.rb
295
276
  - spec/lib/tasks/import_task_spec.rb
277
+ - spec/lib/utils_spec.rb
296
278
  - spec/spec_helper.rb
297
279
  - spec/support/file_manager.rb
298
280
  - spec/support/rake_utils.rb
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module LokaliseRails
4
- class Error < StandardError
5
- # Initializes a new Error object
6
- def initialize(message = '')
7
- super(message)
8
- end
9
- end
10
- end
@@ -1,80 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'ruby-lokalise-api'
4
- require 'pathname'
5
-
6
- module LokaliseRails
7
- module TaskDefinition
8
- class Base
9
- class << self
10
- attr_writer :api_client
11
-
12
- # Creates a Lokalise API client
13
- #
14
- # @return [Lokalise::Client]
15
- def api_client
16
- @api_client ||= ::Lokalise.client LokaliseRails.api_token, {enable_compression: true}.merge(LokaliseRails.timeouts)
17
- end
18
-
19
- # Resets API client
20
- def reset_api_client!
21
- Lokalise.reset_client!
22
- @api_client = nil
23
- end
24
-
25
- # Checks task options
26
- #
27
- # @return Array
28
- def check_options_errors!
29
- errors = []
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?
34
- end
35
-
36
- private
37
-
38
- # Checks whether the provided file has a proper extension as dictated by the `file_ext_regexp` option
39
- #
40
- # @return Boolean
41
- # @param raw_path [String, Pathname]
42
- def proper_ext?(raw_path)
43
- path = raw_path.is_a?(Pathname) ? raw_path : Pathname.new(raw_path)
44
- LokaliseRails.file_ext_regexp.match? path.extname
45
- end
46
-
47
- # Returns directory and filename for the given entry
48
- #
49
- # @return Array
50
- # @param entry [String]
51
- def subdir_and_filename_for(entry)
52
- Pathname.new(entry).split
53
- end
54
-
55
- # Returns Lokalise project ID and branch, semicolumn separated
56
- #
57
- # @return [String]
58
- def project_id_with_branch
59
- "#{LokaliseRails.project_id}:#{LokaliseRails.branch}"
60
- end
61
-
62
- # Sends request with exponential backoff mechanism
63
- def with_exp_backoff(max_retries)
64
- return unless block_given?
65
-
66
- retries = 0
67
- begin
68
- yield
69
- rescue Lokalise::Error::TooManyRequests => e
70
- raise(e.class, "Gave up after #{retries} retries") if retries >= max_retries
71
-
72
- sleep 2**retries
73
- retries += 1
74
- retry
75
- end
76
- end
77
- end
78
- end
79
- end
80
- end