lokalise_rails 0.2.0 → 1.3.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.
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ describe LokaliseRails::TaskDefinition::Importer do
4
+ describe '.open_and_process_zip' do
5
+ let(:faulty_trans) { "#{Rails.root}/public/faulty_trans.zip" }
6
+
7
+ it 'rescues from errors during file processing' do
8
+ expect(-> { described_class.open_and_process_zip(faulty_trans) }).
9
+ to output(/Psych::DisallowedClass/).to_stdout
10
+ end
11
+ end
12
+
13
+ describe '.download_files' do
14
+ it 'returns a proper download URL' do
15
+ allow_project_id '189934715f57a162257d74.88352370' do
16
+ response = VCR.use_cassette('download_files') do
17
+ described_class.download_files
18
+ end
19
+
20
+ expect(response['project_id']).to eq('189934715f57a162257d74.88352370')
21
+ expect(response['bundle_url']).to include('s3-eu-west-1.amazonaws.com')
22
+ end
23
+ end
24
+
25
+ it 'rescues from errors during file download' do
26
+ allow_project_id 'invalid'
27
+ VCR.use_cassette('download_files_error') do
28
+ expect(-> { described_class.download_files }).
29
+ to output(/Lokalise::Error::BadRequest/).to_stdout
30
+ end
31
+ end
32
+ end
33
+
34
+ describe '.import!' do
35
+ it 'halts when the API key is not set' do
36
+ allow(LokaliseRails).to receive(:api_token).and_return(nil)
37
+ expect(-> { described_class.import! }).to output(/API token is not set/).to_stdout
38
+ expect(LokaliseRails).to have_received(:api_token)
39
+ expect(count_translations).to eq(0)
40
+ end
41
+
42
+ it 'halts when the project_id is not set' do
43
+ allow_project_id nil do
44
+ expect(-> { described_class.import! }).to output(/Project ID is not set/).to_stdout
45
+ expect(count_translations).to eq(0)
46
+ end
47
+ end
48
+ end
49
+ end
@@ -1,40 +1,95 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  describe LokaliseRails do
4
- it 'should return a proper version' do
4
+ it 'returns a proper version' do
5
5
  expect(LokaliseRails::VERSION).to be_a(String)
6
6
  end
7
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
+
8
14
  describe 'parameters' do
9
15
  let(:fake_class) { class_double('LokaliseRails') }
10
16
 
11
17
  it 'is possible to set project_id' do
12
- expect(fake_class).to receive(:project_id=).with('123.abc')
18
+ allow(fake_class).to receive(:project_id=).with('123.abc')
13
19
  fake_class.project_id = '123.abc'
14
20
  end
15
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
+
16
27
  it 'is possible to set import_opts' do
17
- expect(fake_class).to receive(:import_opts=).with(duck_type(:each))
28
+ allow(fake_class).to receive(:import_opts=).with(duck_type(:each))
18
29
  fake_class.import_opts = {
19
30
  format: 'json',
20
31
  indentation: '8sp'
21
32
  }
22
33
  end
23
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
+
24
56
  it 'is possible to set import_safe_mode' do
25
- expect(fake_class).to receive(:import_safe_mode=).with(true)
57
+ allow(fake_class).to receive(:import_safe_mode=).with(true)
26
58
  fake_class.import_safe_mode = true
27
59
  end
28
60
 
29
61
  it 'is possible to set api_token' do
30
- expect(fake_class).to receive(:api_token=).with('abc')
62
+ allow(fake_class).to receive(:api_token=).with('abc')
31
63
  fake_class.api_token = 'abc'
32
64
  end
33
65
 
34
66
  it 'is possible to override locales_path' do
35
- expect(fake_class).to receive(:locales_path).and_return('/demo/path')
67
+ allow(fake_class).to receive(:locales_path=).with('/demo/path')
68
+ fake_class.locales_path = '/demo/path'
69
+ end
70
+
71
+ it 'is possible to set skip_file_export' do
72
+ cond = ->(f) { f.nil? }
73
+ allow(fake_class).to receive(:skip_file_export=).with(cond)
74
+ fake_class.skip_file_export = cond
75
+ end
76
+
77
+ it 'is possible to set translations_loader' do
78
+ runner = ->(f) { f.to_json }
79
+ allow(fake_class).to receive(:translations_loader=).with(runner)
80
+ fake_class.translations_loader = runner
81
+ end
82
+
83
+ it 'is possible to set translations_converter' do
84
+ runner = ->(f) { f.to_json }
85
+ allow(fake_class).to receive(:translations_converter=).with(runner)
86
+ fake_class.translations_converter = runner
87
+ end
36
88
 
37
- expect(fake_class.locales_path).to eq('/demo/path')
89
+ it 'is possible to set lang_iso_inferer' do
90
+ runner = ->(f) { f.to_json }
91
+ allow(fake_class).to receive(:lang_iso_inferer=).with(runner)
92
+ fake_class.lang_iso_inferer = runner
38
93
  end
39
94
  end
40
95
  end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe LokaliseRails do
4
+ it 'runs export rake task properly' do
5
+ expect(export_executor).to output(/complete!/).to_stdout
6
+ end
7
+ end
@@ -3,6 +3,10 @@
3
3
  require 'fileutils'
4
4
 
5
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' }
9
+
6
10
  context 'when directory is empty' do
7
11
  before do
8
12
  mkdir_locales
@@ -13,70 +17,92 @@ RSpec.describe LokaliseRails do
13
17
  rm_translation_files
14
18
  end
15
19
 
16
- it 'is callable' do
17
- expect(LokaliseRails::TaskDefinition::Importer).to receive(
20
+ it 'import rake task is callable' do
21
+ allow(LokaliseRails::TaskDefinition::Importer).to receive(
18
22
  :download_files
19
23
  ).and_return(
20
24
  {
21
25
  'project_id' => '123.abc',
22
- 'bundle_url' => "#{Rails.root}/public/translations.zip"
26
+ 'bundle_url' => local_trans
23
27
  }
24
28
  )
25
29
 
26
30
  expect(import_executor).to output(/complete!/).to_stdout
27
31
 
28
32
  expect(count_translations).to eq(4)
29
-
30
- main_en = File.join described_class.locales_path, 'main_en.yml'
31
- expect(File.file?(main_en)).to be true
33
+ expect(LokaliseRails::TaskDefinition::Importer).to have_received(:download_files)
34
+ expect_file_exist loc_path, 'en/nested/main_en.yml'
35
+ expect_file_exist loc_path, 'en/nested/deep/secondary_en.yml'
36
+ expect_file_exist loc_path, 'ru/main_ru.yml'
32
37
  end
33
38
 
34
- it 'downloads ZIP archive properly' do
35
- expect(LokaliseRails::TaskDefinition::Importer).to receive(
39
+ it 'import rake task downloads ZIP archive properly' do
40
+ allow(LokaliseRails::TaskDefinition::Importer).to receive(
36
41
  :download_files
37
42
  ).and_return(
38
43
  {
39
44
  'project_id' => '123.abc',
40
- 'bundle_url' => 'https://github.com/bodrovis/lokalise_rails/blob/master/spec/dummy/public/translations.zip?raw=true'
45
+ 'bundle_url' => remote_trans
41
46
  }
42
47
  )
43
48
 
44
49
  expect(import_executor).to output(/complete!/).to_stdout
45
50
 
51
+ expect(LokaliseRails::TaskDefinition::Importer).to have_received(:download_files)
46
52
  expect(count_translations).to eq(4)
47
-
48
- main_en = File.join described_class.locales_path, 'main_en.yml'
49
- expect(File.file?(main_en)).to be true
53
+ expect_file_exist loc_path, 'en/nested/main_en.yml'
54
+ expect_file_exist loc_path, 'en/nested/deep/secondary_en.yml'
55
+ expect_file_exist loc_path, 'ru/main_ru.yml'
50
56
  end
51
57
  end
52
58
 
53
- context 'when directory is not empty' do
59
+ context 'when directory is not empty and safe mode enabled' do
54
60
  before :all do
55
61
  mkdir_locales
56
- rm_translation_files
57
- temp_file = File.join described_class.locales_path, 'kill.me'
58
- File.open(temp_file, 'w+') { |file| file.write('temp') }
59
62
  described_class.import_safe_mode = true
60
63
  end
61
64
 
65
+ before do
66
+ rm_translation_files
67
+ add_translation_files!
68
+ end
69
+
62
70
  after :all do
63
71
  rm_translation_files
64
72
  described_class.import_safe_mode = false
65
73
  end
66
74
 
67
- it 'returns a success message with default settings' do
68
- expect(LokaliseRails::TaskDefinition::Importer).to receive(
75
+ it 'import proceeds when the user agrees' do
76
+ allow(LokaliseRails::TaskDefinition::Importer).to receive(
69
77
  :download_files
70
78
  ).and_return(
71
79
  {
72
80
  'project_id' => '123.abc',
73
- 'bundle_url' => "#{Rails.root}/public/translations.zip"
81
+ 'bundle_url' => local_trans
74
82
  }
75
83
  )
76
- expect($stdin).to receive(:gets).and_return('Y')
84
+
85
+ allow($stdin).to receive(:gets).and_return('Y')
77
86
  expect(import_executor).to output(/is not empty/).to_stdout
78
87
 
79
88
  expect(count_translations).to eq(5)
89
+ expect($stdin).to have_received(:gets)
90
+ expect(LokaliseRails::TaskDefinition::Importer).to have_received(:download_files)
91
+ expect_file_exist loc_path, 'en/nested/main_en.yml'
92
+ expect_file_exist loc_path, 'en/nested/deep/secondary_en.yml'
93
+ expect_file_exist loc_path, 'ru/main_ru.yml'
94
+ end
95
+
96
+ it 'import halts when a user chooses not to proceed' do
97
+ allow(LokaliseRails::TaskDefinition::Importer).to receive(
98
+ :download_files
99
+ ).at_most(0).times
100
+ allow($stdin).to receive(:gets).and_return('N')
101
+ expect(import_executor).to output(/is not empty/).to_stdout
102
+
103
+ expect(LokaliseRails::TaskDefinition::Importer).not_to have_received(:download_files)
104
+ expect($stdin).to have_received(:gets)
105
+ expect(count_translations).to eq(1)
80
106
  end
81
107
  end
82
108
  end
data/spec/spec_helper.rb CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'dotenv/load'
4
4
  require 'simplecov'
5
+
5
6
  SimpleCov.start 'rails' do
6
7
  add_filter 'spec/'
7
8
  add_filter '.github/'
@@ -19,16 +20,18 @@ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].sort.each { |f| require f }
19
20
 
20
21
  # Configure Rails Environment
21
22
  ENV['RAILS_ENV'] = 'test'
22
-
23
23
  require_relative '../spec/dummy/config/environment'
24
- ActiveRecord::Migrator.migrations_paths = [File.expand_path('../spec/dummy/db/migrate', __dir__)]
25
24
  ENV['RAILS_ROOT'] ||= "#{File.dirname(__FILE__)}../../../spec/dummy"
26
25
 
27
- require 'rspec/rails'
28
-
29
26
  RSpec.configure do |config|
30
- config.include FileUtils
27
+ config.include FileManager
31
28
  config.include RakeUtils
29
+ config.include SpecAddons
32
30
  end
33
31
 
32
+ # rubocop:disable Style/MixinUsage
33
+ include FileManager
34
+ # rubocop:enable Style/MixinUsage
35
+
36
+ add_config!
34
37
  Rails.application.load_tasks
@@ -0,0 +1,81 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'fileutils'
4
+
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
+ def mkdir_locales
12
+ FileUtils.mkdir_p(LokaliseRails.locales_path) unless File.directory?(LokaliseRails.locales_path)
13
+ end
14
+
15
+ def rm_translation_files
16
+ FileUtils.rm_rf locales_dir
17
+ end
18
+
19
+ def locales_dir
20
+ Dir["#{LokaliseRails.locales_path}/**/*"]
21
+ end
22
+
23
+ def count_translations
24
+ locales_dir.count { |file| File.file?(file) }
25
+ end
26
+
27
+ def add_translation_files!(with_ru: false)
28
+ FileUtils.mkdir_p "#{Rails.root}/config/locales/nested"
29
+ File.open("#{Rails.root}/config/locales/nested/en.yml", 'w+:UTF-8') do |f|
30
+ f.write en_data
31
+ end
32
+
33
+ return unless with_ru
34
+
35
+ File.open("#{Rails.root}/config/locales/ru.yml", 'w+:UTF-8') do |f|
36
+ f.write ru_data
37
+ end
38
+ end
39
+
40
+ def add_config!
41
+ data = <<~DATA
42
+ require 'lokalise_rails'
43
+ LokaliseRails.config do |c|
44
+ c.api_token = ENV['LOKALISE_API_TOKEN']
45
+ c.project_id = ENV['LOKALISE_PROJECT_ID']
46
+ end
47
+ DATA
48
+
49
+ File.open("#{Rails.root}/config/lokalise_rails.rb", 'w+:UTF-8') do |f|
50
+ f.write data
51
+ end
52
+ end
53
+
54
+ def remove_config
55
+ FileUtils.remove_file config_file if File.file?(config_file)
56
+ end
57
+
58
+ def config_file
59
+ "#{Rails.root}/config/lokalise_rails.rb"
60
+ end
61
+
62
+ private
63
+
64
+ def en_data
65
+ <<~DATA
66
+ en:
67
+ my_key: "My value"
68
+ nested:
69
+ key: "Value 2"
70
+ DATA
71
+ end
72
+
73
+ def ru_data
74
+ <<~DATA
75
+ ru_RU:
76
+ my_key: "Моё значение"
77
+ nested:
78
+ key: "Значение 2"
79
+ DATA
80
+ end
81
+ end
@@ -5,6 +5,10 @@ module RakeUtils
5
5
  -> { Rake::Task['lokalise_rails:import'].execute }
6
6
  end
7
7
 
8
+ def export_executor
9
+ -> { Rake::Task['lokalise_rails:export'].execute }
10
+ end
11
+
8
12
  def install_invoker
9
13
  Rails::Generators.invoke 'lokalise_rails:install'
10
14
  end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SpecAddons
4
+ def allow_project_id(value = ENV['LOKALISE_PROJECT_ID'])
5
+ allow(LokaliseRails).to receive(:project_id).and_return(value)
6
+ return unless block_given?
7
+
8
+ yield
9
+ expect(LokaliseRails).to have_received(:project_id)
10
+ end
11
+ end
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: 0.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ilya Bodrov
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-26 00:00:00.000000000 Z
11
+ date: 2021-02-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ruby-lokalise-api
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '3.1'
19
+ version: '4.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '3.1'
26
+ version: '4.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rubyzip
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0.1'
47
+ version: '0.2'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0.1'
54
+ version: '0.2'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: dotenv
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 6.0.3
75
+ version: 6.1.0
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 6.0.3
82
+ version: 6.1.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rake
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -108,34 +108,20 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '3.6'
111
- - !ruby/object:Gem::Dependency
112
- name: rspec-rails
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - "~>"
116
- - !ruby/object:Gem::Version
117
- version: '4.0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: '4.0'
125
111
  - !ruby/object:Gem::Dependency
126
112
  name: rubocop
127
113
  requirement: !ruby/object:Gem::Requirement
128
114
  requirements:
129
115
  - - "~>"
130
116
  - !ruby/object:Gem::Version
131
- version: '0.60'
117
+ version: '1.0'
132
118
  type: :development
133
119
  prerelease: false
134
120
  version_requirements: !ruby/object:Gem::Requirement
135
121
  requirements:
136
122
  - - "~>"
137
123
  - !ruby/object:Gem::Version
138
- version: '0.60'
124
+ version: '1.0'
139
125
  - !ruby/object:Gem::Dependency
140
126
  name: rubocop-performance
141
127
  requirement: !ruby/object:Gem::Requirement
@@ -156,14 +142,14 @@ dependencies:
156
142
  requirements:
157
143
  - - "~>"
158
144
  - !ruby/object:Gem::Version
159
- version: '1.37'
145
+ version: 2.1.0
160
146
  type: :development
161
147
  prerelease: false
162
148
  version_requirements: !ruby/object:Gem::Requirement
163
149
  requirements:
164
150
  - - "~>"
165
151
  - !ruby/object:Gem::Version
166
- version: '1.37'
152
+ version: 2.1.0
167
153
  - !ruby/object:Gem::Dependency
168
154
  name: simplecov
169
155
  requirement: !ruby/object:Gem::Requirement
@@ -178,20 +164,6 @@ dependencies:
178
164
  - - "~>"
179
165
  - !ruby/object:Gem::Version
180
166
  version: '0.16'
181
- - !ruby/object:Gem::Dependency
182
- name: sqlite3
183
- requirement: !ruby/object:Gem::Requirement
184
- requirements:
185
- - - "~>"
186
- - !ruby/object:Gem::Version
187
- version: '1.4'
188
- type: :development
189
- prerelease: false
190
- version_requirements: !ruby/object:Gem::Requirement
191
- requirements:
192
- - - "~>"
193
- - !ruby/object:Gem::Version
194
- version: '1.4'
195
167
  - !ruby/object:Gem::Dependency
196
168
  name: vcr
197
169
  requirement: !ruby/object:Gem::Requirement
@@ -228,6 +200,7 @@ files:
228
200
  - lib/lokalise_rails.rb
229
201
  - lib/lokalise_rails/railtie.rb
230
202
  - lib/lokalise_rails/task_definition/base.rb
203
+ - lib/lokalise_rails/task_definition/exporter.rb
231
204
  - lib/lokalise_rails/task_definition/importer.rb
232
205
  - lib/lokalise_rails/version.rb
233
206
  - lib/tasks/lokalise_rails_tasks.rake
@@ -255,18 +228,22 @@ files:
255
228
  - spec/dummy/config/routes.rb
256
229
  - spec/dummy/db/seeds.rb
257
230
  - spec/lib/generators/lokalise_rails/install_generator_spec.rb
258
- - spec/lib/lokalise_rails/importer_spec.rb
231
+ - spec/lib/lokalise_rails/task_definition/base_spec.rb
232
+ - spec/lib/lokalise_rails/task_definition/exporter_spec.rb
233
+ - spec/lib/lokalise_rails/task_definition/importer_spec.rb
259
234
  - spec/lib/lokalise_rails_spec.rb
235
+ - spec/lib/tasks/export_task_spec.rb
260
236
  - spec/lib/tasks/import_task_spec.rb
261
237
  - spec/spec_helper.rb
262
- - spec/support/file_utils.rb
238
+ - spec/support/file_manager.rb
263
239
  - spec/support/rake_utils.rb
240
+ - spec/support/spec_addons.rb
264
241
  - spec/support/vcr.rb
265
242
  homepage: https://github.com/bodrovis/lokalise_rails
266
243
  licenses:
267
244
  - MIT
268
245
  metadata: {}
269
- post_install_message:
246
+ post_install_message:
270
247
  rdoc_options: []
271
248
  require_paths:
272
249
  - lib
@@ -281,8 +258,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
281
258
  - !ruby/object:Gem::Version
282
259
  version: '0'
283
260
  requirements: []
284
- rubygems_version: 3.1.4
285
- signing_key:
261
+ rubygems_version: 3.2.7
262
+ signing_key:
286
263
  specification_version: 4
287
264
  summary: Lokalise integration for Ruby on Rails
288
265
  test_files:
@@ -309,10 +286,14 @@ test_files:
309
286
  - spec/dummy/config/routes.rb
310
287
  - spec/dummy/db/seeds.rb
311
288
  - spec/lib/generators/lokalise_rails/install_generator_spec.rb
312
- - spec/lib/lokalise_rails/importer_spec.rb
289
+ - spec/lib/lokalise_rails/task_definition/base_spec.rb
290
+ - spec/lib/lokalise_rails/task_definition/exporter_spec.rb
291
+ - spec/lib/lokalise_rails/task_definition/importer_spec.rb
313
292
  - spec/lib/lokalise_rails_spec.rb
293
+ - spec/lib/tasks/export_task_spec.rb
314
294
  - spec/lib/tasks/import_task_spec.rb
315
295
  - spec/spec_helper.rb
316
- - spec/support/file_utils.rb
296
+ - spec/support/file_manager.rb
317
297
  - spec/support/rake_utils.rb
298
+ - spec/support/spec_addons.rb
318
299
  - spec/support/vcr.rb