rubypath 0.1.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 +7 -0
- data/LICENSE.txt +165 -0
- data/README.md +29 -0
- data/doc/file.README.html +111 -0
- data/lib/rubypath/backend/mock.rb +315 -0
- data/lib/rubypath/backend/sys.rb +139 -0
- data/lib/rubypath/backend.rb +87 -0
- data/lib/rubypath/comparison.rb +22 -0
- data/lib/rubypath/construction.rb +109 -0
- data/lib/rubypath/dir_operations.rb +76 -0
- data/lib/rubypath/extensions.rb +157 -0
- data/lib/rubypath/file_operations.rb +164 -0
- data/lib/rubypath/file_predicates.rb +32 -0
- data/lib/rubypath/identity.rb +59 -0
- data/lib/rubypath/io_operations.rb +82 -0
- data/lib/rubypath/mock.rb +42 -0
- data/lib/rubypath/path_operations.rb +253 -0
- data/lib/rubypath/path_predicates.rb +61 -0
- data/lib/rubypath/version.rb +11 -0
- data/lib/rubypath.rb +28 -0
- data/rubypath.gemspec +22 -0
- data/spec/rubypath/comparison_spec.rb +46 -0
- data/spec/rubypath/construction_spec.rb +101 -0
- data/spec/rubypath/dir_operations_spec.rb +146 -0
- data/spec/rubypath/extensions_spec.rb +270 -0
- data/spec/rubypath/file_operations_spec.rb +385 -0
- data/spec/rubypath/file_predicates_spec.rb +66 -0
- data/spec/rubypath/identity_spec.rb +21 -0
- data/spec/rubypath/io_operations_spec.rb +126 -0
- data/spec/rubypath/path_operations_spec.rb +383 -0
- data/spec/rubypath/path_predicates_spec.rb +75 -0
- data/spec/spec_helper.rb +42 -0
- data/spec/support/describe_method.rb +18 -0
- data/spec/support/with_backend.rb +31 -0
- metadata +107 -0
@@ -0,0 +1,383 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Path do
|
4
|
+
describe 'Path Operations' do
|
5
|
+
let(:str) { '/root/path' }
|
6
|
+
let(:args) { [str] }
|
7
|
+
let(:path) { Path(*args) }
|
8
|
+
subject { path }
|
9
|
+
|
10
|
+
describe_method :join do
|
11
|
+
subject { path.send described_method, *join_args}
|
12
|
+
|
13
|
+
context 'with single string' do
|
14
|
+
let(:join_args) { ['to/file.txt'] }
|
15
|
+
it { should eq '/root/path/to/file.txt' }
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'with multiple strings' do
|
19
|
+
let(:join_args) { ['to/', 'file.txt'] }
|
20
|
+
it { should eq '/root/path/to/file.txt' }
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'with multiple args' do
|
24
|
+
let(:join_args) { ['to/', Path('dir'), Pathname.new('sub/file.txt')] }
|
25
|
+
it { should eq '/root/path/to/dir/sub/file.txt' }
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'with absolute path' do
|
29
|
+
let(:join_args) { ['/path/to/file.txt'] }
|
30
|
+
it { should eq '/path/to/file.txt' }
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'with mixed paths' do
|
34
|
+
let(:join_args) { ['rel/file', '/path/to/file.txt', 'sub'] }
|
35
|
+
it { should eq '/path/to/file.txt/sub' }
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe_method :each_component do
|
40
|
+
let(:block) { nil }
|
41
|
+
let(:opts) { Hash.new }
|
42
|
+
let(:str) { '/path/to/templates/dir/' }
|
43
|
+
subject { path.send described_method, opts, &block }
|
44
|
+
|
45
|
+
it { should be_a Enumerator }
|
46
|
+
|
47
|
+
it 'should return all components' do
|
48
|
+
expect(subject.to_a).to eq %w(path to templates dir)
|
49
|
+
end
|
50
|
+
|
51
|
+
context 'with empty option' do
|
52
|
+
let(:opts) { {empty: true} }
|
53
|
+
|
54
|
+
it 'should also return empty path components' do
|
55
|
+
expect(subject.to_a).to eq ([''] + %w(path to templates dir) + [''])
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context 'with block' do
|
60
|
+
let(:block) { proc{|fn| fn} }
|
61
|
+
|
62
|
+
it 'should yield components' do
|
63
|
+
expect {|b|
|
64
|
+
path.send described_method, &b
|
65
|
+
}.to yield_successive_args(*%w(path to templates dir))
|
66
|
+
end
|
67
|
+
|
68
|
+
it { should eq path }
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe_method :components do
|
73
|
+
let(:str) { '/path/to/templates/index.html' }
|
74
|
+
subject { path.send described_method }
|
75
|
+
|
76
|
+
it { should be_a Array }
|
77
|
+
it { should eq %w(path to templates index.html) }
|
78
|
+
end
|
79
|
+
|
80
|
+
describe_method :dirname, aliases: [:parent] do
|
81
|
+
shared_examples 'dirname' do
|
82
|
+
it 'should return parent directory' do
|
83
|
+
expect(Path(base, 'path/to/file').send(described_method)).to eq "#{base}path/to"
|
84
|
+
end
|
85
|
+
|
86
|
+
context 'when hitting root' do
|
87
|
+
it 'should return root' do
|
88
|
+
expect(Path(base, 'path').send(described_method)).to eq base[0]
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
context 'when being root' do
|
93
|
+
it 'should return nil' do
|
94
|
+
expect(Path(base[0]).send(described_method)).to eq nil
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
context 'with absolute path' do
|
100
|
+
let(:base) { '/' }
|
101
|
+
it_behaves_like 'dirname'
|
102
|
+
end
|
103
|
+
|
104
|
+
context 'with relative path' do
|
105
|
+
let(:base) { './' }
|
106
|
+
it_behaves_like 'dirname'
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
with_backends :mock, :sys do
|
111
|
+
describe_method :expand, aliases: [:expand_path, :absolute, :absolute_path] do
|
112
|
+
let(:cwd) { '/working/dir' }
|
113
|
+
let(:base) { cwd }
|
114
|
+
let(:args) { Array.new }
|
115
|
+
before do
|
116
|
+
Path.mock do |root, back|
|
117
|
+
back.cwd = cwd
|
118
|
+
back.current_user = 'test'
|
119
|
+
back.homes = {'test' => '/home/test', 'otto' => '/srv/home/otto'}
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
around{|example| Path::Backend.mock &example }
|
124
|
+
|
125
|
+
shared_examples '#expand' do
|
126
|
+
subject { Path(path).send(described_method, *args) }
|
127
|
+
|
128
|
+
it 'should expand path' do
|
129
|
+
expect(subject).to eq expanded_path
|
130
|
+
end
|
131
|
+
|
132
|
+
it { should be_a Path }
|
133
|
+
end
|
134
|
+
|
135
|
+
context '~' do
|
136
|
+
let(:path) { '~' }
|
137
|
+
let(:expanded_path) { '/home/test' }
|
138
|
+
it_behaves_like '#expand'
|
139
|
+
end
|
140
|
+
|
141
|
+
context '~/path' do
|
142
|
+
let(:path) { '~/path/to/file.txt' }
|
143
|
+
let(:expanded_path) { '/home/test/path/to/file.txt' }
|
144
|
+
it_behaves_like '#expand'
|
145
|
+
end
|
146
|
+
|
147
|
+
context '~user' do
|
148
|
+
let(:path) { '~otto' }
|
149
|
+
let(:expanded_path) { '/srv/home/otto' }
|
150
|
+
it_behaves_like '#expand'
|
151
|
+
end
|
152
|
+
|
153
|
+
context '~user/path' do
|
154
|
+
let(:path) { '~otto/path/to/file.txt' }
|
155
|
+
let(:expanded_path) { '/srv/home/otto/path/to/file.txt' }
|
156
|
+
it_behaves_like '#expand'
|
157
|
+
end
|
158
|
+
|
159
|
+
context '/abs/path' do
|
160
|
+
let(:path) { '/abs/path/to/file.txt' }
|
161
|
+
let(:expanded_path) { '/abs/path/to/file.txt' }
|
162
|
+
it_behaves_like '#expand'
|
163
|
+
end
|
164
|
+
|
165
|
+
context 'rel/path' do
|
166
|
+
let(:path) { 'rel/path/to/file.txt' }
|
167
|
+
let(:expanded_path) { '/working/dir/rel/path/to/file.txt' }
|
168
|
+
it_behaves_like '#expand'
|
169
|
+
end
|
170
|
+
|
171
|
+
context './path' do
|
172
|
+
let(:path) { './path/to/file.txt' }
|
173
|
+
let(:expanded_path) { '/working/dir/path/to/file.txt' }
|
174
|
+
it_behaves_like '#expand'
|
175
|
+
end
|
176
|
+
|
177
|
+
context 'with base option' do
|
178
|
+
let(:base) { '/base/./' }
|
179
|
+
let(:args) { [base: '/base/./'] }
|
180
|
+
|
181
|
+
context '~' do
|
182
|
+
let(:path) { '~' }
|
183
|
+
let(:expanded_path) { '/home/test' }
|
184
|
+
it_behaves_like '#expand'
|
185
|
+
end
|
186
|
+
|
187
|
+
context '~/path' do
|
188
|
+
let(:path) { '~/path/to/file.txt' }
|
189
|
+
let(:expanded_path) { '/home/test/path/to/file.txt' }
|
190
|
+
it_behaves_like '#expand'
|
191
|
+
end
|
192
|
+
|
193
|
+
context '~user' do
|
194
|
+
let(:path) { '~otto' }
|
195
|
+
let(:expanded_path) { '/srv/home/otto' }
|
196
|
+
it_behaves_like '#expand'
|
197
|
+
end
|
198
|
+
|
199
|
+
context '~user/path' do
|
200
|
+
let(:path) { '~otto/path/to/file.txt' }
|
201
|
+
let(:expanded_path) { '/srv/home/otto/path/to/file.txt' }
|
202
|
+
it_behaves_like '#expand'
|
203
|
+
end
|
204
|
+
|
205
|
+
context '/abs/path' do
|
206
|
+
let(:path) { '/abs/path/to/file.txt' }
|
207
|
+
let(:expanded_path) { '/abs/path/to/file.txt' }
|
208
|
+
it_behaves_like '#expand'
|
209
|
+
end
|
210
|
+
|
211
|
+
context 'rel/path' do
|
212
|
+
let(:path) { 'rel/path/to/file.txt' }
|
213
|
+
let(:expanded_path) { '/base/rel/path/to/file.txt' }
|
214
|
+
it_behaves_like '#expand'
|
215
|
+
end
|
216
|
+
|
217
|
+
context './path' do
|
218
|
+
let(:path) { './path/to/file.txt' }
|
219
|
+
let(:expanded_path) { '/base/path/to/file.txt' }
|
220
|
+
it_behaves_like '#expand'
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
context 'with path args' do
|
225
|
+
let(:args) { ['..', 'fuu', 'net.txt'] }
|
226
|
+
|
227
|
+
context '~' do
|
228
|
+
let(:path) { '~' }
|
229
|
+
let(:expanded_path) { '/home/fuu/net.txt' }
|
230
|
+
it_behaves_like '#expand'
|
231
|
+
end
|
232
|
+
|
233
|
+
context '~/path' do
|
234
|
+
let(:path) { '~/path/to/file.txt' }
|
235
|
+
let(:expanded_path) { '/home/test/path/to/fuu/net.txt' }
|
236
|
+
it_behaves_like '#expand'
|
237
|
+
end
|
238
|
+
|
239
|
+
context '~user' do
|
240
|
+
let(:path) { '~otto' }
|
241
|
+
let(:expanded_path) { '/srv/home/fuu/net.txt' }
|
242
|
+
it_behaves_like '#expand'
|
243
|
+
end
|
244
|
+
|
245
|
+
context '~user/path' do
|
246
|
+
let(:path) { '~otto/path/to/file.txt' }
|
247
|
+
let(:expanded_path) { '/srv/home/otto/path/to/fuu/net.txt' }
|
248
|
+
it_behaves_like '#expand'
|
249
|
+
end
|
250
|
+
|
251
|
+
context '/abs/path' do
|
252
|
+
let(:path) { '/abs/path/to/file.txt' }
|
253
|
+
let(:expanded_path) { '/abs/path/to/fuu/net.txt' }
|
254
|
+
it_behaves_like '#expand'
|
255
|
+
end
|
256
|
+
|
257
|
+
context 'rel/path' do
|
258
|
+
let(:path) { 'rel/path/to/file.txt' }
|
259
|
+
let(:expanded_path) { '/working/dir/rel/path/to/fuu/net.txt' }
|
260
|
+
it_behaves_like '#expand'
|
261
|
+
end
|
262
|
+
|
263
|
+
context './path' do
|
264
|
+
let(:path) { './path/to/file.txt' }
|
265
|
+
let(:expanded_path) { '/working/dir/path/to/fuu/net.txt' }
|
266
|
+
it_behaves_like '#expand'
|
267
|
+
end
|
268
|
+
end
|
269
|
+
end
|
270
|
+
end
|
271
|
+
|
272
|
+
describe_method :ascend, aliases: [:each_ancestors] do
|
273
|
+
shared_examples 'ascend' do
|
274
|
+
context 'with block' do
|
275
|
+
let(:block) { proc{} }
|
276
|
+
subject { path.send described_method, &block }
|
277
|
+
|
278
|
+
it { should eq path }
|
279
|
+
|
280
|
+
it 'should yield part paths' do
|
281
|
+
expect{|b| path.send described_method, &b }.to yield_successive_args *expected_paths
|
282
|
+
end
|
283
|
+
|
284
|
+
it 'should yield Path objects' do
|
285
|
+
expect{|b| path.send described_method, &b }.to yield_successive_args *expected_paths.map{ Path }
|
286
|
+
end
|
287
|
+
end
|
288
|
+
|
289
|
+
context 'w/o block' do
|
290
|
+
subject { path.send described_method }
|
291
|
+
|
292
|
+
it { should be_a Enumerator }
|
293
|
+
|
294
|
+
it 'should yield part paths' do
|
295
|
+
expect{|b| subject.each &b }.to yield_successive_args *expected_paths
|
296
|
+
end
|
297
|
+
|
298
|
+
it 'should yield path objects' do
|
299
|
+
expect{|b| subject.each &b }.to yield_successive_args *expected_paths.map{ Path }
|
300
|
+
end
|
301
|
+
end
|
302
|
+
end
|
303
|
+
|
304
|
+
context 'with absolute path' do
|
305
|
+
let(:path) { Path '/path/to/file.txt' }
|
306
|
+
let(:expected_paths) { %w(/path/to/file.txt /path/to /path /)}
|
307
|
+
it_behaves_like 'ascend'
|
308
|
+
end
|
309
|
+
|
310
|
+
context 'with relative path' do
|
311
|
+
let(:path) { Path 'path/to/file.txt' }
|
312
|
+
let(:expected_paths) { %w(path/to/file.txt path/to path .)}
|
313
|
+
it_behaves_like 'ascend'
|
314
|
+
end
|
315
|
+
end
|
316
|
+
|
317
|
+
describe '#as_relative' do
|
318
|
+
subject { Path(path).as_relative }
|
319
|
+
|
320
|
+
context 'with absolute path' do
|
321
|
+
let(:path) { '/path/to/file.txt' }
|
322
|
+
it { should eq 'path/to/file.txt' }
|
323
|
+
end
|
324
|
+
|
325
|
+
context 'with relative path' do
|
326
|
+
let(:path) { 'path/to/file.txt' }
|
327
|
+
it { should eq 'path/to/file.txt' }
|
328
|
+
end
|
329
|
+
|
330
|
+
context 'with filename only' do
|
331
|
+
let(:path) { 'file.txt' }
|
332
|
+
it { should eq 'file.txt' }
|
333
|
+
end
|
334
|
+
end
|
335
|
+
|
336
|
+
describe '#as_absolute' do
|
337
|
+
subject { Path(path).as_absolute }
|
338
|
+
|
339
|
+
context 'with absolute path' do
|
340
|
+
let(:path) { '/path/to/file.txt' }
|
341
|
+
it { should eq '/path/to/file.txt' }
|
342
|
+
end
|
343
|
+
|
344
|
+
context 'with relative path' do
|
345
|
+
let(:path) { 'path/to/file.txt' }
|
346
|
+
it { should eq '/path/to/file.txt' }
|
347
|
+
end
|
348
|
+
|
349
|
+
context 'with filename only' do
|
350
|
+
let(:path) { 'file.txt' }
|
351
|
+
it { should eq '/file.txt' }
|
352
|
+
end
|
353
|
+
end
|
354
|
+
|
355
|
+
describe_method :ancestors do
|
356
|
+
shared_examples 'ancestors' do
|
357
|
+
subject { path.send described_method }
|
358
|
+
|
359
|
+
it { should be_a Array }
|
360
|
+
|
361
|
+
it 'should contain part paths' do
|
362
|
+
expect{|b| subject.each &b }.to yield_successive_args *expected_paths
|
363
|
+
end
|
364
|
+
|
365
|
+
it 'should contain path objects' do
|
366
|
+
expect{|b| subject.each &b }.to yield_successive_args *expected_paths.map{ Path }
|
367
|
+
end
|
368
|
+
end
|
369
|
+
|
370
|
+
context 'with absolute path' do
|
371
|
+
let(:path) { Path '/path/to/file.txt' }
|
372
|
+
let(:expected_paths) { %w(/path/to/file.txt /path/to /path /)}
|
373
|
+
it_behaves_like 'ancestors'
|
374
|
+
end
|
375
|
+
|
376
|
+
context 'with relative path' do
|
377
|
+
let(:path) { Path 'path/to/file.txt' }
|
378
|
+
let(:expected_paths) { %w(path/to/file.txt path/to path .)}
|
379
|
+
it_behaves_like 'ancestors'
|
380
|
+
end
|
381
|
+
end
|
382
|
+
end
|
383
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Path do
|
4
|
+
describe 'Path Predicates' do
|
5
|
+
describe '#absolute?' do
|
6
|
+
subject { Path(path).absolute? }
|
7
|
+
|
8
|
+
context 'with absolute path' do
|
9
|
+
let(:path) { '/abs/path/to/file' }
|
10
|
+
it { should be true }
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'with relative path' do
|
14
|
+
let(:path) { 'path/to/file' }
|
15
|
+
it { should be false }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '#relative?' do
|
20
|
+
subject { Path(path).relative? }
|
21
|
+
|
22
|
+
context 'with absolute path' do
|
23
|
+
let(:path) { '/abs/path/to/file' }
|
24
|
+
it { should be false }
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'with relative path' do
|
28
|
+
let(:path) { 'path/to/file' }
|
29
|
+
it { should be true }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '#mountpoint?' do
|
34
|
+
let(:path) { Path('/tmp') }
|
35
|
+
|
36
|
+
context 'without args' do
|
37
|
+
it 'should invoke backend with current path' do
|
38
|
+
expect(Path::Backend.instance).to receive(:mountpoint?).with('/tmp').and_return(false)
|
39
|
+
path.mountpoint?
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'with args' do
|
44
|
+
it 'should invoke backend with joined path' do
|
45
|
+
expect(Path::Backend.instance).to receive(:mountpoint?).with('/tmp/fuu').and_return(false)
|
46
|
+
path.mountpoint?('fuu')
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe_method :dotfile? do
|
52
|
+
subject { path.dotfile? }
|
53
|
+
|
54
|
+
context 'with dotfile' do
|
55
|
+
let(:path) { Path '.abc' }
|
56
|
+
it { should be true }
|
57
|
+
end
|
58
|
+
|
59
|
+
context 'with path to dotfile' do
|
60
|
+
let(:path) { Path '/apth/to/.abc' }
|
61
|
+
it { should be true }
|
62
|
+
end
|
63
|
+
|
64
|
+
context 'with normal file' do
|
65
|
+
let(:path) { Path '/path/to/file' }
|
66
|
+
it { should be false }
|
67
|
+
end
|
68
|
+
|
69
|
+
context 'with path to file within a dotdir' do
|
70
|
+
let(:path) { Path '/home/user/.local/file' }
|
71
|
+
it { should be false }
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'rspec'
|
2
|
+
|
3
|
+
if ENV['CI'] || (defined?(:RUBY_ENGINE) && RUBY_ENGINE != 'rbx')
|
4
|
+
require 'coveralls'
|
5
|
+
Coveralls.wear! do
|
6
|
+
add_filter 'spec'
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
require 'bundler'
|
11
|
+
Bundler.require :default, :test
|
12
|
+
|
13
|
+
require 'rubypath'
|
14
|
+
|
15
|
+
Dir[File.expand_path('spec/support/**/*.rb')].each {|f| require f}
|
16
|
+
|
17
|
+
RSpec.configure do |config|
|
18
|
+
# ## Mock Framework
|
19
|
+
#
|
20
|
+
# If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
|
21
|
+
#
|
22
|
+
# config.mock_with :mocha
|
23
|
+
# config.mock_with :flexmock
|
24
|
+
# config.mock_with :rr
|
25
|
+
|
26
|
+
# Run specs in random order to surface order dependencies. If you find an
|
27
|
+
# order dependency and want to debug it, you can fix the order by providing
|
28
|
+
# the seed, which is printed after each run.
|
29
|
+
# --seed 1234
|
30
|
+
config.order = 'random'
|
31
|
+
|
32
|
+
# Raise error when using old :should expectation syntax.
|
33
|
+
config.raise_errors_for_deprecations!
|
34
|
+
|
35
|
+
config.around(:each) do |example|
|
36
|
+
Path::Backend.mock root: :tmp, &example
|
37
|
+
end
|
38
|
+
|
39
|
+
config.after do
|
40
|
+
Timecop.return
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module DescribeMethod
|
2
|
+
def describe_aliases(*args, &block)
|
3
|
+
args.each do |mth|
|
4
|
+
name = (mth == args.first ? "##{mth}" : "##{mth} (alias of #{args.first})")
|
5
|
+
|
6
|
+
describe(name) do
|
7
|
+
let(:described_method) { mth }
|
8
|
+
module_eval &block
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def describe_method(mth, opts = {}, &block)
|
14
|
+
describe_aliases *([mth] + (opts[:aliases] || []).to_ary), &block
|
15
|
+
end
|
16
|
+
|
17
|
+
RSpec.configure{|c| c.extend DescribeMethod }
|
18
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module WithBackend
|
2
|
+
|
3
|
+
def with_backends(*args, &block)
|
4
|
+
args.each do |backend|
|
5
|
+
be = case backend
|
6
|
+
when :mock
|
7
|
+
lambda { |ex| Path::Backend.mock &ex }
|
8
|
+
when :sys
|
9
|
+
lambda { |ex| Path::Backend.mock(root: :tmp, &ex) }
|
10
|
+
else
|
11
|
+
raise ArgumentError.new 'Unknown backend.'
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "with #{backend.upcase} FS" do
|
15
|
+
let(:backend_type) { backend }
|
16
|
+
around do |example|
|
17
|
+
be.call(example)
|
18
|
+
end
|
19
|
+
|
20
|
+
module_eval &block
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
alias_method :with_backend, :with_backends
|
25
|
+
|
26
|
+
def pending_backend(*args)
|
27
|
+
before { pending "Pending on #{backend_type} backend." if args.include? backend_type }
|
28
|
+
end
|
29
|
+
|
30
|
+
RSpec.configure{|c| c.extend WithBackend }
|
31
|
+
end
|
metadata
ADDED
@@ -0,0 +1,107 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rubypath
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jan Graichen
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-04-05 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
27
|
+
description: Path library incorporating File, Dir, Pathname, IO methods as well as
|
28
|
+
a virtual mock filesystem.
|
29
|
+
email:
|
30
|
+
- jg@altimos.de
|
31
|
+
executables: []
|
32
|
+
extensions: []
|
33
|
+
extra_rdoc_files: []
|
34
|
+
files:
|
35
|
+
- LICENSE.txt
|
36
|
+
- README.md
|
37
|
+
- doc/file.README.html
|
38
|
+
- lib/rubypath.rb
|
39
|
+
- lib/rubypath/backend.rb
|
40
|
+
- lib/rubypath/backend/mock.rb
|
41
|
+
- lib/rubypath/backend/sys.rb
|
42
|
+
- lib/rubypath/comparison.rb
|
43
|
+
- lib/rubypath/construction.rb
|
44
|
+
- lib/rubypath/dir_operations.rb
|
45
|
+
- lib/rubypath/extensions.rb
|
46
|
+
- lib/rubypath/file_operations.rb
|
47
|
+
- lib/rubypath/file_predicates.rb
|
48
|
+
- lib/rubypath/identity.rb
|
49
|
+
- lib/rubypath/io_operations.rb
|
50
|
+
- lib/rubypath/mock.rb
|
51
|
+
- lib/rubypath/path_operations.rb
|
52
|
+
- lib/rubypath/path_predicates.rb
|
53
|
+
- lib/rubypath/version.rb
|
54
|
+
- rubypath.gemspec
|
55
|
+
- spec/rubypath/comparison_spec.rb
|
56
|
+
- spec/rubypath/construction_spec.rb
|
57
|
+
- spec/rubypath/dir_operations_spec.rb
|
58
|
+
- spec/rubypath/extensions_spec.rb
|
59
|
+
- spec/rubypath/file_operations_spec.rb
|
60
|
+
- spec/rubypath/file_predicates_spec.rb
|
61
|
+
- spec/rubypath/identity_spec.rb
|
62
|
+
- spec/rubypath/io_operations_spec.rb
|
63
|
+
- spec/rubypath/path_operations_spec.rb
|
64
|
+
- spec/rubypath/path_predicates_spec.rb
|
65
|
+
- spec/spec_helper.rb
|
66
|
+
- spec/support/describe_method.rb
|
67
|
+
- spec/support/with_backend.rb
|
68
|
+
homepage: https://github.com/jgraichen/rubypath
|
69
|
+
licenses:
|
70
|
+
- LGPLv3
|
71
|
+
metadata: {}
|
72
|
+
post_install_message:
|
73
|
+
rdoc_options: []
|
74
|
+
require_paths:
|
75
|
+
- lib
|
76
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - ">="
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
requirements: []
|
87
|
+
rubyforge_project:
|
88
|
+
rubygems_version: 2.2.2
|
89
|
+
signing_key:
|
90
|
+
specification_version: 4
|
91
|
+
summary: Path library incorporating File, Dir, Pathname, IO methods as well as a virtual
|
92
|
+
mock filesystem.
|
93
|
+
test_files:
|
94
|
+
- spec/rubypath/comparison_spec.rb
|
95
|
+
- spec/rubypath/construction_spec.rb
|
96
|
+
- spec/rubypath/dir_operations_spec.rb
|
97
|
+
- spec/rubypath/extensions_spec.rb
|
98
|
+
- spec/rubypath/file_operations_spec.rb
|
99
|
+
- spec/rubypath/file_predicates_spec.rb
|
100
|
+
- spec/rubypath/identity_spec.rb
|
101
|
+
- spec/rubypath/io_operations_spec.rb
|
102
|
+
- spec/rubypath/path_operations_spec.rb
|
103
|
+
- spec/rubypath/path_predicates_spec.rb
|
104
|
+
- spec/spec_helper.rb
|
105
|
+
- spec/support/describe_method.rb
|
106
|
+
- spec/support/with_backend.rb
|
107
|
+
has_rdoc:
|