rubypath 0.3.2 → 1.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.
- checksums.yaml +4 -4
- metadata +5 -55
- data/CHANGELOG.md +0 -24
- data/LICENSE.txt +0 -165
- data/README.md +0 -102
- data/doc/file.README.html +0 -175
- data/lib/rubypath.rb +0 -29
- data/lib/rubypath/backend.rb +0 -92
- data/lib/rubypath/backend/mock.rb +0 -356
- data/lib/rubypath/backend/sys.rb +0 -161
- data/lib/rubypath/comparison.rb +0 -19
- data/lib/rubypath/construction.rb +0 -109
- data/lib/rubypath/dir_operations.rb +0 -160
- data/lib/rubypath/extensions.rb +0 -157
- data/lib/rubypath/file_operations.rb +0 -192
- data/lib/rubypath/file_predicates.rb +0 -32
- data/lib/rubypath/identity.rb +0 -59
- data/lib/rubypath/io_operations.rb +0 -82
- data/lib/rubypath/mock.rb +0 -42
- data/lib/rubypath/path_operations.rb +0 -311
- data/lib/rubypath/path_predicates.rb +0 -61
- data/lib/rubypath/version.rb +0 -11
- data/rubypath.gemspec +0 -22
- data/spec/README_spec.rb +0 -27
- data/spec/rubypath/comparison_spec.rb +0 -77
- data/spec/rubypath/construction_spec.rb +0 -101
- data/spec/rubypath/dir_operations_spec.rb +0 -225
- data/spec/rubypath/extensions_spec.rb +0 -270
- data/spec/rubypath/file_operations_spec.rb +0 -428
- data/spec/rubypath/file_predicates_spec.rb +0 -66
- data/spec/rubypath/identity_spec.rb +0 -21
- data/spec/rubypath/io_operations_spec.rb +0 -128
- data/spec/rubypath/path_operations_spec.rb +0 -483
- data/spec/rubypath/path_predicates_spec.rb +0 -75
- data/spec/spec_helper.rb +0 -42
- data/spec/support/describe_method.rb +0 -18
- data/spec/support/with_backend.rb +0 -37
data/spec/README_spec.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe 'README examples' do
|
4
|
-
describe 'Mock FS' do
|
5
|
-
around {|example| Path::Backend.mock(&example) }
|
6
|
-
|
7
|
-
before do
|
8
|
-
Path.mock do |root, backend|
|
9
|
-
backend.cwd = '/root'
|
10
|
-
backend.current_user = 'test'
|
11
|
-
backend.homes = {'test' => '/home/test'}
|
12
|
-
|
13
|
-
home = root.mkpath('/home/test')
|
14
|
-
home.mkfile('src/test.txt').write 'CONTENT'
|
15
|
-
home.mkfile('src/test.html').write '<html><head><title></title>...'
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'should mock all FS' do
|
20
|
-
base = Path('~test').expand
|
21
|
-
expect(base.join(%w(src test.txt)).read).to eq 'CONTENT'
|
22
|
-
|
23
|
-
files = base.glob('**/*').select{|p| p.file? }
|
24
|
-
expect(files.size).to eq 2
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,77 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Path do
|
4
|
-
describe 'Comparison' do
|
5
|
-
let(:path) { Path.new '/path/to/file' }
|
6
|
-
|
7
|
-
describe_method :eql?, aliases: [:==] do
|
8
|
-
context 'with Path object' do
|
9
|
-
it 'should compare paths (1)' do
|
10
|
-
res = path.send described_method, Path('/path/to/file')
|
11
|
-
expect(res).to be true
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'should compare paths (2)' do
|
15
|
-
res = path.send described_method, Path('/path/to/another/file')
|
16
|
-
expect(res).to be false
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'should compare clean paths (1)' do
|
20
|
-
res = path.send described_method, Path('/path/to/./file')
|
21
|
-
expect(res).to be true
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'should compare clean paths (2)' do
|
25
|
-
res = path.send described_method, Path('/path/to/another/../file')
|
26
|
-
expect(res).to be true
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
context 'with String object' do
|
31
|
-
it 'should compare paths (1)' do
|
32
|
-
res = path.send described_method, '/path/to/file'
|
33
|
-
expect(res).to be true
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'should compare paths (1)' do
|
37
|
-
res = path.send described_method, '/path/to/another/file'
|
38
|
-
expect(res).to be false
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'should compare clean paths (1)' do
|
42
|
-
res = path.send described_method, '/path/to/./file'
|
43
|
-
expect(res).to be true
|
44
|
-
end
|
45
|
-
|
46
|
-
it 'should compare clean paths (2)' do
|
47
|
-
res = path.send described_method, '/path/to/another/../file'
|
48
|
-
expect(res).to be true
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
context 'with Pathname object' do
|
53
|
-
it 'should compare paths (1)' do
|
54
|
-
res = path.send described_method, Pathname.new('/path/to/file')
|
55
|
-
expect(res).to be true
|
56
|
-
end
|
57
|
-
|
58
|
-
it 'should compare paths (1)' do
|
59
|
-
res = path.send described_method,
|
60
|
-
Pathname.new('/path/to/another/file')
|
61
|
-
expect(res).to be false
|
62
|
-
end
|
63
|
-
|
64
|
-
it 'should compare clean paths (1)' do
|
65
|
-
res = path.send described_method, Pathname.new('/path/to/./file')
|
66
|
-
expect(res).to be true
|
67
|
-
end
|
68
|
-
|
69
|
-
it 'should compare clean paths (2)' do
|
70
|
-
res = path.send described_method,
|
71
|
-
Pathname.new('/path/to/another/../file')
|
72
|
-
expect(res).to be true
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
@@ -1,101 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Path do
|
4
|
-
describe 'Construction' do
|
5
|
-
let(:str) { '/path/to/file' }
|
6
|
-
let(:args) { [str] }
|
7
|
-
let(:path) { described_class.new(*args) }
|
8
|
-
subject { path }
|
9
|
-
|
10
|
-
describe_method :path, aliases: [:to_path, :to_s] do
|
11
|
-
subject { path.send described_method }
|
12
|
-
|
13
|
-
it { should eq str }
|
14
|
-
|
15
|
-
# Should not return same object as internal variable
|
16
|
-
# to avoid in-place modifications like
|
17
|
-
# `Path.new('/abc').path.delete!('abc')`
|
18
|
-
it { should_not equal path.send(:instance_variable_get, :@path) }
|
19
|
-
end
|
20
|
-
|
21
|
-
describe '#initialize' do
|
22
|
-
context 'w/o args' do
|
23
|
-
let(:args) { %w() }
|
24
|
-
it { expect(subject.path).to eq '' }
|
25
|
-
it { should be_a Path }
|
26
|
-
end
|
27
|
-
|
28
|
-
context 'with multiple strings' do
|
29
|
-
let(:args) { %w(path to a file.txt) }
|
30
|
-
it { expect(subject.path).to eq 'path/to/a/file.txt' }
|
31
|
-
it { should be_a Path }
|
32
|
-
end
|
33
|
-
|
34
|
-
context 'with Pathname' do
|
35
|
-
let(:args) { [Pathname.new('path/to/dir'), 'file.txt'] }
|
36
|
-
it { expect(subject.path).to eq 'path/to/dir/file.txt' }
|
37
|
-
it { should be_a Path }
|
38
|
-
end
|
39
|
-
|
40
|
-
context 'with Numerals' do
|
41
|
-
let(:args) { ['path', 5, 'to', 4.5, 'file.txt'] }
|
42
|
-
it { expect(subject.path).to eq 'path/5/to/4.5/file.txt' }
|
43
|
-
it { should be_a Path }
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
describe 'class' do
|
48
|
-
describe '#new' do
|
49
|
-
context 'with Path as argument' do
|
50
|
-
let(:args) { [Path.new('/abc')] }
|
51
|
-
it('should return same object') { should equal args.first }
|
52
|
-
end
|
53
|
-
|
54
|
-
context 'w/o args' do
|
55
|
-
let(:args) { Array.new }
|
56
|
-
it('should return Path::EMPTY') { should equal Path::EMPTY }
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
describe '#like?' do
|
61
|
-
subject { Path.like? obj }
|
62
|
-
|
63
|
-
context 'positive list' do
|
64
|
-
{
|
65
|
-
'Path' => Path.new('/path/to/file.ext'),
|
66
|
-
'Pathname' => Pathname.new('/path/to/file.ext'),
|
67
|
-
'String' => '/path/to/file.ext',
|
68
|
-
'#to_path' => Class.new{ def to_path; '/path/to/file.ext' end }.new,
|
69
|
-
'#path' => Class.new{ def path; '/path/to/file.ext' end }.new
|
70
|
-
}.each do |name, example|
|
71
|
-
let(:obj) { example.dup }
|
72
|
-
it("should accept #{name}") { should be true }
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
describe '#like_path' do
|
78
|
-
subject { Path.like_path obj }
|
79
|
-
|
80
|
-
context 'positive list' do
|
81
|
-
{
|
82
|
-
'Path' => Path.new('/path/to/file.ext'),
|
83
|
-
'Pathname' => Pathname.new('/path/to/file.ext'),
|
84
|
-
'String' => '/path/to/file.ext',
|
85
|
-
'#to_path' => Class.new{ def to_path; '/path/to/file.ext' end }.new,
|
86
|
-
'#path' => Class.new{ def path; '/path/to/file.ext' end }.new
|
87
|
-
}.each do |name, example|
|
88
|
-
let(:obj) { example.dup }
|
89
|
-
it("should get path from #{name}") { should eq '/path/to/file.ext' }
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
describe '#to_proc' do
|
95
|
-
it 'should allow to use Path as block' do
|
96
|
-
expect(%w(path1 path2).map(&Path)).to eq [Path('path1'), Path('path2')]
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
@@ -1,225 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Path do
|
4
|
-
describe 'Directory Operations' do
|
5
|
-
with_backends :mock, :sys do
|
6
|
-
describe 'class' do
|
7
|
-
describe_method :glob do
|
8
|
-
before do
|
9
|
-
Path.mock do |root|
|
10
|
-
root.mkfile '/file.txt'
|
11
|
-
root.mkfile '/lib/path.rb'
|
12
|
-
root.mkfile '/lib/path/dir.rb'
|
13
|
-
root.mkfile '/lib/path/file.rb'
|
14
|
-
root.mkfile '/lib/path/ext.rb'
|
15
|
-
end
|
16
|
-
end
|
17
|
-
subject { ->(*args){ Path.glob(*args) } }
|
18
|
-
|
19
|
-
it 'should return matching files (I)' do
|
20
|
-
expect(subject.call('/*')).to match_array %w(/file.txt /lib)
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'should return matching files (II)' do
|
24
|
-
expect(subject.call('/**/*.rb')).to match_array \
|
25
|
-
%w(/lib/path.rb /lib/path/dir.rb
|
26
|
-
/lib/path/file.rb /lib/path/ext.rb)
|
27
|
-
end
|
28
|
-
|
29
|
-
if defined?(::File::FNM_EXTGLOB)
|
30
|
-
it 'should return matching files (III)' do
|
31
|
-
expect(subject.call('/**/{dir,ext}.rb')).to match_array \
|
32
|
-
%w(/lib/path/dir.rb /lib/path/ext.rb)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'should return matching files (IV)' do
|
37
|
-
expect(subject.call('/lib/*.rb')).to match_array %w(/lib/path.rb)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
shared_examples '#remove_recursive' do
|
43
|
-
context 'on existent file' do
|
44
|
-
before { path.mkfile }
|
45
|
-
it{ expect{ subject }.to change(path, :exist?).from(true).to(false) }
|
46
|
-
end
|
47
|
-
|
48
|
-
context 'on existent directory' do
|
49
|
-
before { path.mkpath }
|
50
|
-
it{ expect{ subject }.to change(path, :exist?).from(true).to(false) }
|
51
|
-
end
|
52
|
-
|
53
|
-
context 'on existent directory with children' do
|
54
|
-
before { path.mkfile('subdir/file') }
|
55
|
-
it{ expect{ subject }.to change(path, :exist?).from(true).to(false) }
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
describe_method :rmtree, aliases: [:rm_rf] do
|
60
|
-
let(:path) { Path '/path' }
|
61
|
-
subject { path.send(described_method) }
|
62
|
-
|
63
|
-
context 'on non-existent file' do
|
64
|
-
it { expect{ subject }.to_not raise_error }
|
65
|
-
end
|
66
|
-
|
67
|
-
it_behaves_like '#remove_recursive'
|
68
|
-
end
|
69
|
-
|
70
|
-
describe_method :safe_rmtree do
|
71
|
-
let(:path) { Path '/path' }
|
72
|
-
subject { path.send(described_method) }
|
73
|
-
|
74
|
-
it 'should use #remove_entry_secure' do
|
75
|
-
if backend_type == :sys
|
76
|
-
path.mkfile
|
77
|
-
expect(FileUtils).to receive(:remove_entry_secure).and_call_original
|
78
|
-
subject
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
context 'on non-existent file' do
|
83
|
-
it { expect{ subject }.to_not raise_error }
|
84
|
-
end
|
85
|
-
|
86
|
-
it_behaves_like '#remove_recursive'
|
87
|
-
end
|
88
|
-
|
89
|
-
describe_method :rmtree!, aliases: [:rm_r] do
|
90
|
-
let(:path) { Path '/path' }
|
91
|
-
subject { path.send(described_method) }
|
92
|
-
|
93
|
-
context 'on non-existent file' do
|
94
|
-
it { expect{ subject }.to raise_error Errno::ENOENT }
|
95
|
-
end
|
96
|
-
|
97
|
-
it_behaves_like '#remove_recursive'
|
98
|
-
end
|
99
|
-
|
100
|
-
describe_method :safe_rmtree! do
|
101
|
-
let(:path) { Path '/path' }
|
102
|
-
subject { path.send(described_method) }
|
103
|
-
|
104
|
-
it 'should use #remove_entry_secure' do
|
105
|
-
if backend_type == :sys
|
106
|
-
path.mkfile
|
107
|
-
expect(FileUtils).to receive(:remove_entry_secure).and_call_original
|
108
|
-
subject
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
context 'on non-existent file' do
|
113
|
-
it { expect{ subject }.to raise_error Errno::ENOENT }
|
114
|
-
end
|
115
|
-
|
116
|
-
it_behaves_like '#remove_recursive'
|
117
|
-
end
|
118
|
-
|
119
|
-
describe '#glob' do
|
120
|
-
it 'should delegate to class#glob' do
|
121
|
-
expect(Path).to receive(:glob)
|
122
|
-
.with('/abc\[\]/.\*\{\}/file/**/{a,b}.rb', 10).and_return([])
|
123
|
-
|
124
|
-
Path('/abc[]/.*{}/file').glob('**/{a,b}.rb', 10)
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
describe '#mkdir' do
|
129
|
-
context 'w/o arg' do
|
130
|
-
let(:dir) { Path '/dir' }
|
131
|
-
before { expect(dir).to_not be_existent }
|
132
|
-
subject { dir.mkdir }
|
133
|
-
|
134
|
-
it 'should create directory' do
|
135
|
-
expect(subject).to be_directory
|
136
|
-
end
|
137
|
-
|
138
|
-
it 'should return path to directory' do
|
139
|
-
expect(subject).to eq '/dir'
|
140
|
-
end
|
141
|
-
|
142
|
-
it { should be_a Path }
|
143
|
-
|
144
|
-
context 'in non-existent parent directory' do
|
145
|
-
let(:dir) { Path '/non-ext/dir' }
|
146
|
-
before { expect(dir).to_not be_existent }
|
147
|
-
before { expect(dir.parent).to_not be_existent }
|
148
|
-
subject { dir.mkdir }
|
149
|
-
|
150
|
-
it 'should raise some error' do
|
151
|
-
expect{ subject }.to raise_error(
|
152
|
-
Errno::ENOENT, 'No such file or directory - /non-ext/dir')
|
153
|
-
end
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
|
-
context 'with arg' do
|
158
|
-
let(:dir) { Path '/' }
|
159
|
-
let(:args) { ['fuu'] }
|
160
|
-
before { expect(dir.join(*args)).to_not be_existent }
|
161
|
-
subject { dir.mkdir(*args) }
|
162
|
-
|
163
|
-
it 'should create directory' do
|
164
|
-
expect(subject).to be_directory
|
165
|
-
end
|
166
|
-
|
167
|
-
it 'should return path to directory' do
|
168
|
-
expect(subject).to eq '/fuu'
|
169
|
-
end
|
170
|
-
|
171
|
-
it { should be_a Path }
|
172
|
-
end
|
173
|
-
end
|
174
|
-
|
175
|
-
describe_method :mkpath, aliases: [:mkdir_p] do
|
176
|
-
let(:dir) { Path '/path/to/dir' }
|
177
|
-
before { expect(dir).to_not be_existent }
|
178
|
-
before { expect(dir.parent).to_not be_existent }
|
179
|
-
subject { dir.send(described_method) }
|
180
|
-
|
181
|
-
it 'should create directories' do
|
182
|
-
expect(subject).to be_directory
|
183
|
-
end
|
184
|
-
|
185
|
-
it 'should return path to directory' do
|
186
|
-
expect(subject).to eq '/path/to/dir'
|
187
|
-
end
|
188
|
-
|
189
|
-
it { should be_a Path }
|
190
|
-
end
|
191
|
-
|
192
|
-
describe_method :entries do
|
193
|
-
let(:path) { Path '/' }
|
194
|
-
let(:args) { Array.new }
|
195
|
-
subject { path.send described_method, *args }
|
196
|
-
|
197
|
-
context 'with directory with children' do
|
198
|
-
before do
|
199
|
-
path.touch 'file.a'
|
200
|
-
path.touch 'file.b'
|
201
|
-
path.mkdir 'dir.a'
|
202
|
-
path.mkdir 'dir.b'
|
203
|
-
end
|
204
|
-
|
205
|
-
it 'should list of entries' do
|
206
|
-
expect(subject).to match_array %w(.. . file.a file.b dir.a dir.b)
|
207
|
-
end
|
208
|
-
|
209
|
-
it 'should return list of Path objects' do
|
210
|
-
subject.each{ |e| expect(e).to be_a Path }
|
211
|
-
end
|
212
|
-
end
|
213
|
-
|
214
|
-
context 'with non-existent directory' do
|
215
|
-
let(:path) { Path '/non-existent-dir' }
|
216
|
-
|
217
|
-
it 'should raise error' do
|
218
|
-
expect{ subject }.to raise_error(
|
219
|
-
Errno::ENOENT, 'No such file or directory - /non-existent-dir')
|
220
|
-
end
|
221
|
-
end
|
222
|
-
end
|
223
|
-
end
|
224
|
-
end
|
225
|
-
end
|
@@ -1,270 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Path do
|
4
|
-
describe 'Extensions' do
|
5
|
-
let(:path) { Path '/path/to/template.de.html.slim' }
|
6
|
-
let(:dotfile) { Path '/path/to/.dotfile' }
|
7
|
-
let(:dotfile_ext) { Path '/path/to/.dotfile.en.sh' }
|
8
|
-
|
9
|
-
describe_method :extensions, aliases: [:exts] do
|
10
|
-
subject { path.send described_method }
|
11
|
-
|
12
|
-
it 'should return all file extensions' do
|
13
|
-
should eq %w(de html slim)
|
14
|
-
end
|
15
|
-
|
16
|
-
context 'dotfile w/o ext' do
|
17
|
-
let(:path) { dotfile }
|
18
|
-
|
19
|
-
it 'should not return dotfile name as extension' do
|
20
|
-
should eq Array.new
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
context 'dotfile with ext' do
|
25
|
-
let(:path) { dotfile_ext }
|
26
|
-
|
27
|
-
it 'should only return dotfile extension' do
|
28
|
-
should eq %w(en sh)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
describe '#extname' do
|
34
|
-
subject { path.extname }
|
35
|
-
|
36
|
-
it 'should return file extensions including dot' do
|
37
|
-
should eq '.slim'
|
38
|
-
end
|
39
|
-
|
40
|
-
context 'dotfile w/o ext' do
|
41
|
-
let(:path) { dotfile }
|
42
|
-
|
43
|
-
it 'should not return dotfile name as extension' do
|
44
|
-
should eq ''
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
context 'dotfile with ext' do
|
49
|
-
let(:path) { dotfile_ext }
|
50
|
-
|
51
|
-
it 'should only return dotfile extension' do
|
52
|
-
should eq '.sh'
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
describe '#pure_name' do
|
58
|
-
subject { path.pure_name }
|
59
|
-
|
60
|
-
it 'should return file name without extensions' do
|
61
|
-
should eq 'template'
|
62
|
-
end
|
63
|
-
|
64
|
-
context 'dotfile w/o ext' do
|
65
|
-
let(:path) { dotfile }
|
66
|
-
|
67
|
-
it 'should return dotfile name' do
|
68
|
-
should eq '.dotfile'
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
context 'dotfile with ext' do
|
73
|
-
let(:path) { dotfile_ext }
|
74
|
-
|
75
|
-
it 'should return dotfile name w/o exts' do
|
76
|
-
should eq '.dotfile'
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
describe_method :extension, aliases: [:ext] do
|
82
|
-
subject { path.send described_method }
|
83
|
-
|
84
|
-
it 'should return last file extensions' do
|
85
|
-
should eq 'slim'
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
describe_method :replace_extensions do
|
90
|
-
let(:path) { Path "#{base}file#{exts}" }
|
91
|
-
|
92
|
-
shared_examples 'extensions replacement' do
|
93
|
-
context 'with array' do
|
94
|
-
subject { path.send described_method, %w(en txt) }
|
95
|
-
|
96
|
-
it 'should replace all file extensions' do
|
97
|
-
should eq "#{base}file.en.txt"
|
98
|
-
end
|
99
|
-
|
100
|
-
it { should be_a Path }
|
101
|
-
end
|
102
|
-
|
103
|
-
context 'with multiple arguments' do
|
104
|
-
subject { path.send described_method, *%w(en txt) }
|
105
|
-
|
106
|
-
it 'should replace all file extensions' do
|
107
|
-
should eq "#{base}file.en.txt"
|
108
|
-
end
|
109
|
-
|
110
|
-
it { should be_a Path }
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
shared_examples 'w/o ext' do
|
115
|
-
let(:exts) { '' }
|
116
|
-
it_behaves_like 'extensions replacement'
|
117
|
-
|
118
|
-
context 'with replacement hash' do
|
119
|
-
subject{ path.send(described_method, 'txt' => 'html') }
|
120
|
-
|
121
|
-
it 'should replace all file extensions' do
|
122
|
-
should eq "#{base}file"
|
123
|
-
end
|
124
|
-
|
125
|
-
it { should be_a Path }
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
129
|
-
shared_examples 'with single ext' do
|
130
|
-
let(:exts) { '.txt' }
|
131
|
-
it_behaves_like 'extensions replacement'
|
132
|
-
|
133
|
-
context 'with replacement hash' do
|
134
|
-
subject { path.send(described_method, 'txt' => 'html') }
|
135
|
-
|
136
|
-
it 'should replace all file extensions' do
|
137
|
-
should eq "#{base}file.html"
|
138
|
-
end
|
139
|
-
|
140
|
-
it { should be_a Path }
|
141
|
-
end
|
142
|
-
end
|
143
|
-
|
144
|
-
shared_examples 'with multiple ext' do
|
145
|
-
let(:exts) { '.en.html.slim' }
|
146
|
-
it_behaves_like 'extensions replacement'
|
147
|
-
|
148
|
-
context 'with replacement hash' do
|
149
|
-
subject { path.send(described_method, 'en' => 'de') }
|
150
|
-
|
151
|
-
it 'should replace all file extensions' do
|
152
|
-
should eq "#{base}file.de.html.slim"
|
153
|
-
end
|
154
|
-
|
155
|
-
it { should be_a Path }
|
156
|
-
end
|
157
|
-
end
|
158
|
-
|
159
|
-
context 'with path' do
|
160
|
-
let(:base) { '/path/to/' }
|
161
|
-
it_behaves_like 'w/o ext'
|
162
|
-
it_behaves_like 'with single ext'
|
163
|
-
it_behaves_like 'with multiple ext'
|
164
|
-
end
|
165
|
-
|
166
|
-
context 'with filename only' do
|
167
|
-
let(:base) { '' }
|
168
|
-
it_behaves_like 'w/o ext'
|
169
|
-
it_behaves_like 'with single ext'
|
170
|
-
it_behaves_like 'with multiple ext'
|
171
|
-
end
|
172
|
-
|
173
|
-
context 'with relative file path (I)' do
|
174
|
-
let(:base) { './' }
|
175
|
-
it_behaves_like 'w/o ext'
|
176
|
-
it_behaves_like 'with single ext'
|
177
|
-
it_behaves_like 'with multiple ext'
|
178
|
-
end
|
179
|
-
|
180
|
-
context 'with relative file path (II)' do
|
181
|
-
let(:base) { 'path/' }
|
182
|
-
it_behaves_like 'w/o ext'
|
183
|
-
it_behaves_like 'with single ext'
|
184
|
-
it_behaves_like 'with multiple ext'
|
185
|
-
end
|
186
|
-
end
|
187
|
-
|
188
|
-
describe_method :replace_extension do
|
189
|
-
let(:path) { Path "#{base}#{file}#{ext}" }
|
190
|
-
|
191
|
-
shared_examples 'extension replacement' do
|
192
|
-
context 'with array' do
|
193
|
-
subject { path.send described_method, %w(mobile txt) }
|
194
|
-
|
195
|
-
it 'should replace last file extensions' do
|
196
|
-
should eq "#{base}#{file}.mobile.txt"
|
197
|
-
end
|
198
|
-
|
199
|
-
it { should be_a Path }
|
200
|
-
end
|
201
|
-
|
202
|
-
context 'with multiple arguments' do
|
203
|
-
subject { path.send described_method, *%w(mobile txt) }
|
204
|
-
|
205
|
-
it 'should replace last file extensions' do
|
206
|
-
should eq "#{base}#{file}.mobile.txt"
|
207
|
-
end
|
208
|
-
|
209
|
-
it { should be_a Path }
|
210
|
-
end
|
211
|
-
|
212
|
-
context 'with single string' do
|
213
|
-
subject { path.send described_method, 'haml' }
|
214
|
-
|
215
|
-
it 'should replace last file extensions' do
|
216
|
-
should eq "#{base}#{file}.haml"
|
217
|
-
end
|
218
|
-
|
219
|
-
it { should be_a Path }
|
220
|
-
end
|
221
|
-
end
|
222
|
-
|
223
|
-
shared_examples 'w/o ext' do
|
224
|
-
let(:file) { 'file' }
|
225
|
-
let(:ext) { '' }
|
226
|
-
it_behaves_like 'extension replacement'
|
227
|
-
end
|
228
|
-
|
229
|
-
shared_examples 'with single ext' do
|
230
|
-
let(:file) { 'file' }
|
231
|
-
let(:ext) { '.txt' }
|
232
|
-
it_behaves_like 'extension replacement'
|
233
|
-
end
|
234
|
-
|
235
|
-
shared_examples 'with multiple ext' do
|
236
|
-
let(:file) { 'file.de' }
|
237
|
-
let(:ext) { '.txt' }
|
238
|
-
it_behaves_like 'extension replacement'
|
239
|
-
end
|
240
|
-
|
241
|
-
context 'on path file' do
|
242
|
-
let(:base) { '/path/to/file/' }
|
243
|
-
it_behaves_like 'w/o ext'
|
244
|
-
it_behaves_like 'with single ext'
|
245
|
-
it_behaves_like 'with multiple ext'
|
246
|
-
end
|
247
|
-
|
248
|
-
context 'on relative path file' do
|
249
|
-
let(:base) { 'to/file/' }
|
250
|
-
it_behaves_like 'w/o ext'
|
251
|
-
it_behaves_like 'with single ext'
|
252
|
-
it_behaves_like 'with multiple ext'
|
253
|
-
end
|
254
|
-
|
255
|
-
context 'on relative root path file' do
|
256
|
-
let(:base) { './' }
|
257
|
-
it_behaves_like 'w/o ext'
|
258
|
-
it_behaves_like 'with single ext'
|
259
|
-
it_behaves_like 'with multiple ext'
|
260
|
-
end
|
261
|
-
|
262
|
-
context 'on filename only' do
|
263
|
-
let(:base) { '' }
|
264
|
-
it_behaves_like 'w/o ext'
|
265
|
-
it_behaves_like 'with single ext'
|
266
|
-
it_behaves_like 'with multiple ext'
|
267
|
-
end
|
268
|
-
end
|
269
|
-
end
|
270
|
-
end
|