memfs 0.0.1
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/.DS_Store +0 -0
- data/.gitignore +17 -0
- data/.rspec +2 -0
- data/.travis.yml +3 -0
- data/Gemfile +4 -0
- data/Guardfile +8 -0
- data/LICENSE.txt +22 -0
- data/README.md +128 -0
- data/Rakefile +6 -0
- data/lib/fileutils.rb +1738 -0
- data/lib/memfs/dir.rb +33 -0
- data/lib/memfs/fake/directory.rb +51 -0
- data/lib/memfs/fake/entry.rb +73 -0
- data/lib/memfs/fake/file/content.rb +47 -0
- data/lib/memfs/fake/file.rb +36 -0
- data/lib/memfs/fake/symlink.rb +32 -0
- data/lib/memfs/file/stat.rb +48 -0
- data/lib/memfs/file.rb +284 -0
- data/lib/memfs/file_system.rb +157 -0
- data/lib/memfs/filesystem_access.rb +7 -0
- data/lib/memfs/version.rb +3 -0
- data/lib/memfs.rb +100 -0
- data/memfs.gemspec +29 -0
- data/spec/fileutils_spec.rb +961 -0
- data/spec/memfs/dir_spec.rb +104 -0
- data/spec/memfs/fake/directory_spec.rb +115 -0
- data/spec/memfs/fake/entry_spec.rb +140 -0
- data/spec/memfs/fake/file/content_spec.rb +154 -0
- data/spec/memfs/fake/file_spec.rb +37 -0
- data/spec/memfs/fake/symlink_spec.rb +43 -0
- data/spec/memfs/file/stat_spec.rb +209 -0
- data/spec/memfs/file_spec.rb +928 -0
- data/spec/memfs/file_system_spec.rb +393 -0
- data/spec/memfs_spec.rb +54 -0
- data/spec/spec_helper.rb +20 -0
- metadata +203 -0
@@ -0,0 +1,393 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module MemFs
|
4
|
+
describe FileSystem do
|
5
|
+
subject { fs }
|
6
|
+
|
7
|
+
before :each do
|
8
|
+
subject.mkdir '/test-dir'
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '#directory?' do
|
12
|
+
it "returns true if an entry is a directory" do
|
13
|
+
expect(subject.directory?('/test-dir')).to be_true
|
14
|
+
end
|
15
|
+
|
16
|
+
it "returns false if an entry is not a directory" do
|
17
|
+
subject.touch('/some-file')
|
18
|
+
expect(subject.directory?('/some-file')).to be_false
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe '#chdir' do
|
23
|
+
it "changes the current working directory" do
|
24
|
+
subject.chdir '/test-dir'
|
25
|
+
expect(subject.getwd).to eq('/test-dir')
|
26
|
+
end
|
27
|
+
|
28
|
+
it "raises an error if directory does not exist" do
|
29
|
+
expect { subject.chdir('/nowhere') }.to raise_error(Errno::ENOENT)
|
30
|
+
end
|
31
|
+
|
32
|
+
it "raises an error if the destination is not a directory" do
|
33
|
+
subject.touch('/test-file')
|
34
|
+
expect { subject.chdir('/test-file') }.to raise_error(Errno::ENOTDIR)
|
35
|
+
end
|
36
|
+
|
37
|
+
context "when a block is given" do
|
38
|
+
it "changes current working directory for the block" do
|
39
|
+
location = nil
|
40
|
+
subject.chdir '/test-dir' do
|
41
|
+
location = subject.getwd
|
42
|
+
end
|
43
|
+
expect(location).to eq('/test-dir')
|
44
|
+
end
|
45
|
+
|
46
|
+
it "gets back to previous directory once the block is finished" do
|
47
|
+
subject.chdir '/'
|
48
|
+
previous_dir = subject.getwd
|
49
|
+
subject.chdir('/test-dir') {}
|
50
|
+
expect(subject.getwd).to eq(previous_dir)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
context "when the destination is a symlink" do
|
55
|
+
it "sets current directory as the last link chain target" do
|
56
|
+
subject.symlink('/test-dir', '/test-link')
|
57
|
+
subject.chdir('/test-link')
|
58
|
+
expect(subject.getwd).to eq('/test-dir')
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe '#chmod' do
|
64
|
+
it "changes permission bits on the named file" do
|
65
|
+
subject.touch('/some-file')
|
66
|
+
subject.chmod(0777, '/some-file')
|
67
|
+
expect(subject.find!('/some-file').mode).to be(0100777)
|
68
|
+
end
|
69
|
+
|
70
|
+
context "when the named file is a symlink" do
|
71
|
+
it "changes the permission bits on the symlink itself" do
|
72
|
+
subject.touch('/some-file')
|
73
|
+
subject.symlink('/some-file', '/some-link')
|
74
|
+
subject.chmod(0777, '/some-link')
|
75
|
+
expect(subject.find!('/some-link').mode).to be(0100777)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe "#chown" do
|
81
|
+
before :each do
|
82
|
+
subject.touch '/test-file'
|
83
|
+
end
|
84
|
+
|
85
|
+
it "changes the owner of the named file to the given numeric owner id" do
|
86
|
+
subject.chown(42, nil, '/test-file')
|
87
|
+
expect(subject.find!('/test-file').uid).to be(42)
|
88
|
+
end
|
89
|
+
|
90
|
+
it "changes the group of the named file to the given numeric group id" do
|
91
|
+
subject.chown(nil, 42, '/test-file')
|
92
|
+
expect(subject.find!('/test-file').gid).to be(42)
|
93
|
+
end
|
94
|
+
|
95
|
+
it "ignores nil user id" do
|
96
|
+
previous_uid = subject.find!('/test-file').uid
|
97
|
+
|
98
|
+
subject.chown(nil, 42, '/test-file')
|
99
|
+
expect(subject.find!('/test-file').uid).to eq(previous_uid)
|
100
|
+
end
|
101
|
+
|
102
|
+
it "ignores nil group id" do
|
103
|
+
previous_gid = subject.find!('/test-file').gid
|
104
|
+
|
105
|
+
subject.chown(42, nil, '/test-file')
|
106
|
+
expect(subject.find!('/test-file').gid).to eq(previous_gid)
|
107
|
+
end
|
108
|
+
|
109
|
+
it "ignores -1 user id" do
|
110
|
+
previous_uid = subject.find!('/test-file').uid
|
111
|
+
|
112
|
+
subject.chown(-1, 42, '/test-file')
|
113
|
+
expect(subject.find!('/test-file').uid).to eq(previous_uid)
|
114
|
+
end
|
115
|
+
|
116
|
+
it "ignores -1 group id" do
|
117
|
+
previous_gid = subject.find!('/test-file').gid
|
118
|
+
|
119
|
+
subject.chown(42, -1, '/test-file')
|
120
|
+
expect(subject.find!('/test-file').gid).to eq(previous_gid)
|
121
|
+
end
|
122
|
+
|
123
|
+
context "when the named entry is a symlink" do
|
124
|
+
before :each do
|
125
|
+
subject.symlink '/test-file', '/test-link'
|
126
|
+
end
|
127
|
+
|
128
|
+
it "changes the owner on the last target of the link chain" do
|
129
|
+
subject.chown(42, nil, '/test-link')
|
130
|
+
expect(subject.find!('/test-file').uid).to be(42)
|
131
|
+
end
|
132
|
+
|
133
|
+
it "changes the group on the last target of the link chain" do
|
134
|
+
subject.chown(nil, 42, '/test-link')
|
135
|
+
expect(subject.find!('/test-file').gid).to be(42)
|
136
|
+
end
|
137
|
+
|
138
|
+
it "doesn't change the owner of the symlink" do
|
139
|
+
subject.chown(42, nil, '/test-link')
|
140
|
+
expect(subject.find!('/test-link').uid).not_to eq(42)
|
141
|
+
end
|
142
|
+
|
143
|
+
it "doesn't change the group of the symlink" do
|
144
|
+
subject.chown(nil, 42, '/test-link')
|
145
|
+
expect(subject.find!('/test-link').gid).not_to eq(42)
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
describe '#clear!' do
|
151
|
+
it "clear the registred entries" do
|
152
|
+
subject.clear!
|
153
|
+
expect(subject.root.entry_names).to eq(%w[. ..])
|
154
|
+
end
|
155
|
+
|
156
|
+
it "sets the current directory to /" do
|
157
|
+
subject.clear!
|
158
|
+
expect(subject.getwd).to eq('/')
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
describe '#entries' do
|
163
|
+
it "returns an array containing all of the filenames in the given directory" do
|
164
|
+
%w[/test-dir/new-dir /test-dir/new-dir2].each { |dir| subject.mkdir dir }
|
165
|
+
subject.touch '/test-dir/test-file', '/test-dir/test-file2'
|
166
|
+
expect(subject.entries('/test-dir')).to eq(%w[. .. new-dir new-dir2 test-file test-file2])
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
describe '#find' do
|
171
|
+
it "finds the entry if it exists" do
|
172
|
+
expect(subject.find('/test-dir').name).to eq('test-dir')
|
173
|
+
end
|
174
|
+
|
175
|
+
it "doesn't raise an error if path does not exist" do
|
176
|
+
expect { subject.find('/nowhere') }.not_to raise_error(Errno::ENOENT)
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
describe '#find!' do
|
181
|
+
it "finds the entry if it exists" do
|
182
|
+
expect(subject.find!('/test-dir').name).to eq('test-dir')
|
183
|
+
end
|
184
|
+
|
185
|
+
it "raises an error if path does not exist" do
|
186
|
+
expect { subject.find!('/nowhere') }.to raise_error(Errno::ENOENT)
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
describe '#find_directory!' do
|
191
|
+
it "returns the named directory" do
|
192
|
+
expect(subject.find_directory!('/test-dir')).to be_a(Fake::Directory)
|
193
|
+
end
|
194
|
+
|
195
|
+
it "raises an error if the named entry is not a directory" do
|
196
|
+
subject.touch '/test-file'
|
197
|
+
expect { subject.find_directory!('/test-file') }.to raise_error(Errno::ENOTDIR)
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
describe '#find_parent!' do
|
202
|
+
it "returns the parent directory of the named entry" do
|
203
|
+
expect(subject.find_parent!('/test-dir/test-file')).to be_a(Fake::Directory)
|
204
|
+
end
|
205
|
+
|
206
|
+
it "raises an error if the parent directory does not exist" do
|
207
|
+
expect { subject.find_parent!('/no-dir/test-file') }.to raise_error(Errno::ENOENT)
|
208
|
+
end
|
209
|
+
|
210
|
+
it "raises an error if the parent is not a directory" do
|
211
|
+
subject.touch('/test-file')
|
212
|
+
expect { subject.find_parent!('/test-file/test') }.to raise_error(Errno::ENOTDIR)
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
describe '#getwd' do
|
217
|
+
it "returns the current working directory" do
|
218
|
+
subject.chdir '/test-dir'
|
219
|
+
expect(subject.getwd).to eq('/test-dir')
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
describe '#link' do
|
224
|
+
before :each do
|
225
|
+
subject.touch('/some-file')
|
226
|
+
end
|
227
|
+
|
228
|
+
it "creates a hard link +dest+ that points to +src+" do
|
229
|
+
subject.link('/some-file', '/some-link')
|
230
|
+
expect(subject.find!('/some-link').content).to be(subject.find!('/some-file').content)
|
231
|
+
end
|
232
|
+
|
233
|
+
it "does not create a symbolic link" do
|
234
|
+
subject.link('/some-file', '/some-link')
|
235
|
+
expect(subject.find!('/some-link')).not_to be_a(Fake::Symlink)
|
236
|
+
end
|
237
|
+
|
238
|
+
context "when +new_name+ already exists" do
|
239
|
+
it "raises an exception" do
|
240
|
+
subject.touch('/some-link')
|
241
|
+
expect { subject.link('/some-file', '/some-link') }.to raise_error(SystemCallError)
|
242
|
+
end
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
describe '#mkdir' do
|
247
|
+
it "creates a directory" do
|
248
|
+
subject.mkdir '/new-dir'
|
249
|
+
expect(subject.find!('/new-dir')).to be_a(Fake::Directory)
|
250
|
+
end
|
251
|
+
|
252
|
+
context "when a relative path is given" do
|
253
|
+
it "creates a directory in current directory" do
|
254
|
+
subject.chdir '/test-dir'
|
255
|
+
subject.mkdir 'new-dir'
|
256
|
+
expect(subject.find!('/test-dir/new-dir')).to be_a(Fake::Directory)
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
260
|
+
context "when the directory already exists" do
|
261
|
+
it "raises an exception" do
|
262
|
+
expect { subject.mkdir('/') }.to raise_error(Errno::EEXIST)
|
263
|
+
end
|
264
|
+
end
|
265
|
+
end
|
266
|
+
|
267
|
+
describe '#new' do
|
268
|
+
it "creates the root directory" do
|
269
|
+
expect(subject.find!('/')).to be(subject.root)
|
270
|
+
end
|
271
|
+
end
|
272
|
+
|
273
|
+
describe "#pwd" do
|
274
|
+
it_behaves_like 'aliased method', :pwd, :getwd
|
275
|
+
end
|
276
|
+
|
277
|
+
describe "#rename" do
|
278
|
+
it "renames the given file to the new name" do
|
279
|
+
subject.touch('/test-file')
|
280
|
+
subject.rename('/test-file', '/test-file2')
|
281
|
+
expect(subject.find('/test-file2')).not_to be_nil
|
282
|
+
end
|
283
|
+
|
284
|
+
it "removes the old file" do
|
285
|
+
subject.touch('/test-file')
|
286
|
+
subject.rename('/test-file', '/test-file2')
|
287
|
+
expect(subject.find('/test-file')).to be_nil
|
288
|
+
end
|
289
|
+
|
290
|
+
it "can move a file in another directory" do
|
291
|
+
subject.touch('/test-file')
|
292
|
+
subject.rename('/test-file', '/test-dir/test-file')
|
293
|
+
expect(subject.find('/test-dir/test-file')).not_to be_nil
|
294
|
+
end
|
295
|
+
end
|
296
|
+
|
297
|
+
describe "#rmdir" do
|
298
|
+
it "removes the given directory" do
|
299
|
+
subject.rmdir('/test-dir')
|
300
|
+
expect(subject.find('/test-dir')).to be_nil
|
301
|
+
end
|
302
|
+
|
303
|
+
context "when the directory is not empty" do
|
304
|
+
it "raises an exception" do
|
305
|
+
subject.mkdir('/test-dir/test-sub-dir')
|
306
|
+
expect { subject.rmdir('/test-dir') }.to raise_error(Errno::ENOTEMPTY)
|
307
|
+
end
|
308
|
+
end
|
309
|
+
end
|
310
|
+
|
311
|
+
describe '#symlink' do
|
312
|
+
it "creates a symbolic link" do
|
313
|
+
subject.symlink('/some-file', '/some-link')
|
314
|
+
expect(subject.find!('/some-link')).to be_a(Fake::Symlink)
|
315
|
+
end
|
316
|
+
|
317
|
+
context "when +new_name+ already exists" do
|
318
|
+
it "raises an exception" do
|
319
|
+
subject.touch('/some-file')
|
320
|
+
subject.touch('/some-file2')
|
321
|
+
expect { subject.symlink('/some-file', '/some-file2') }.to raise_error(Errno::EEXIST)
|
322
|
+
end
|
323
|
+
end
|
324
|
+
end
|
325
|
+
|
326
|
+
describe '#symlink?' do
|
327
|
+
it "returns true if the entry is a symlink" do
|
328
|
+
subject.symlink('/test-file', '/test-link')
|
329
|
+
expect(subject.symlink?('/test-link')).to be_true
|
330
|
+
end
|
331
|
+
|
332
|
+
it "returns false if the entry is not a symlink" do
|
333
|
+
subject.touch('/test-file')
|
334
|
+
expect(subject.symlink?('/test-file')).to be_false
|
335
|
+
end
|
336
|
+
|
337
|
+
it "returns false if the entry doesn't exist" do
|
338
|
+
expect(subject.symlink?('/test-file')).to be_false
|
339
|
+
end
|
340
|
+
end
|
341
|
+
|
342
|
+
describe '#touch' do
|
343
|
+
it "creates a regular file" do
|
344
|
+
subject.touch '/some-file'
|
345
|
+
expect(subject.find!('/some-file')).to be_a(Fake::File)
|
346
|
+
end
|
347
|
+
|
348
|
+
it "creates a regular file for each named filed" do
|
349
|
+
subject.touch '/some-file', '/some-file2'
|
350
|
+
expect(subject.find!('/some-file2')).to be_a(Fake::File)
|
351
|
+
end
|
352
|
+
|
353
|
+
it "creates an entry only if it doesn't exist" do
|
354
|
+
subject.touch '/some-file'
|
355
|
+
MemFs::Fake::File.should_not_receive(:new)
|
356
|
+
subject.touch '/some-file'
|
357
|
+
end
|
358
|
+
|
359
|
+
context "when the named file already exists" do
|
360
|
+
let(:time) { Time.now - 5000 }
|
361
|
+
before :each do
|
362
|
+
subject.touch '/some-file'
|
363
|
+
file = subject.find!('/some-file')
|
364
|
+
file.atime = file.mtime = time
|
365
|
+
end
|
366
|
+
|
367
|
+
it "sets the access time of the touched file" do
|
368
|
+
subject.touch '/some-file'
|
369
|
+
expect(subject.find!('/some-file').atime).not_to eq(time)
|
370
|
+
end
|
371
|
+
|
372
|
+
it "sets the modification time of the touched file" do
|
373
|
+
subject.touch '/some-file'
|
374
|
+
expect(subject.find!('/some-file').atime).not_to eq(time)
|
375
|
+
end
|
376
|
+
end
|
377
|
+
end
|
378
|
+
|
379
|
+
describe "#unlink" do
|
380
|
+
it "deletes the named file" do
|
381
|
+
subject.touch('/some-file')
|
382
|
+
subject.unlink('/some-file')
|
383
|
+
expect(subject.find('/some-file')).to be_nil
|
384
|
+
end
|
385
|
+
|
386
|
+
context "when the entry is a directory" do
|
387
|
+
it "raises an exception" do
|
388
|
+
expect { subject.unlink('/test-dir') }.to raise_error
|
389
|
+
end
|
390
|
+
end
|
391
|
+
end
|
392
|
+
end
|
393
|
+
end
|
data/spec/memfs_spec.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MemFs do
|
4
|
+
subject { MemFs }
|
5
|
+
|
6
|
+
describe '.activate' do
|
7
|
+
it "calls the given block with MemFs activated" do
|
8
|
+
subject.activate do
|
9
|
+
expect(::Dir).to be(MemFs::Dir)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
it "resets the original classes once finished" do
|
14
|
+
subject.activate {}
|
15
|
+
expect(::Dir).to be(MemFs::OriginalDir)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "deactivates MemFs even when an exception occurs" do
|
19
|
+
begin
|
20
|
+
subject.activate { raise 'Some error' }
|
21
|
+
rescue
|
22
|
+
end
|
23
|
+
expect(::Dir).to be(MemFs::OriginalDir)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '.activate!' do
|
28
|
+
before(:each) { subject.activate! }
|
29
|
+
after(:each) { subject.deactivate! }
|
30
|
+
|
31
|
+
it "replaces Ruby Dir class with a fake one" do
|
32
|
+
expect(::Dir).to be(MemFs::Dir)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "replaces Ruby File class with a fake one" do
|
36
|
+
expect(::File).to be(MemFs::File)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe '.deactivate!' do
|
41
|
+
before :each do
|
42
|
+
subject.activate!
|
43
|
+
subject.deactivate!
|
44
|
+
end
|
45
|
+
|
46
|
+
it "sets back the Ruby Dir class to the original one" do
|
47
|
+
expect(::Dir).to be(MemFs::OriginalDir)
|
48
|
+
end
|
49
|
+
|
50
|
+
it "sets back the Ruby File class to the original one" do
|
51
|
+
expect(::File).to be(MemFs::OriginalFile)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'coveralls'
|
2
|
+
require 'memfs'
|
3
|
+
|
4
|
+
Coveralls.wear!
|
5
|
+
|
6
|
+
RSpec.configure do |config|
|
7
|
+
config.before :each do
|
8
|
+
MemFs::FileSystem.instance.clear!
|
9
|
+
end
|
10
|
+
|
11
|
+
shared_examples 'aliased method' do |method, original_method|
|
12
|
+
it "##{original_method}" do
|
13
|
+
expect(subject.method(method)).to eq(subject.method(original_method))
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def fs
|
19
|
+
MemFs::FileSystem.instance
|
20
|
+
end
|
metadata
ADDED
@@ -0,0 +1,203 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: memfs
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Simon COURTOIS
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-07-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: coveralls
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.6'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.6'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '2.12'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2.12'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: guard
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.5'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.5'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: guard-rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ~>
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '2.1'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '2.1'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rb-inotify
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ~>
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.8'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ~>
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.8'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rb-fsevent
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ~>
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.9'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ~>
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0.9'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rb-fchange
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ~>
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0.0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ~>
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0.0'
|
125
|
+
description: MemFs provides a fake file system that can be used for tests. Strongly
|
126
|
+
inspired by FakeFS.
|
127
|
+
email:
|
128
|
+
- scourtois@cubyx.fr
|
129
|
+
executables: []
|
130
|
+
extensions: []
|
131
|
+
extra_rdoc_files: []
|
132
|
+
files:
|
133
|
+
- .DS_Store
|
134
|
+
- .gitignore
|
135
|
+
- .rspec
|
136
|
+
- .travis.yml
|
137
|
+
- Gemfile
|
138
|
+
- Guardfile
|
139
|
+
- LICENSE.txt
|
140
|
+
- README.md
|
141
|
+
- Rakefile
|
142
|
+
- lib/fileutils.rb
|
143
|
+
- lib/memfs.rb
|
144
|
+
- lib/memfs/dir.rb
|
145
|
+
- lib/memfs/fake/directory.rb
|
146
|
+
- lib/memfs/fake/entry.rb
|
147
|
+
- lib/memfs/fake/file.rb
|
148
|
+
- lib/memfs/fake/file/content.rb
|
149
|
+
- lib/memfs/fake/symlink.rb
|
150
|
+
- lib/memfs/file.rb
|
151
|
+
- lib/memfs/file/stat.rb
|
152
|
+
- lib/memfs/file_system.rb
|
153
|
+
- lib/memfs/filesystem_access.rb
|
154
|
+
- lib/memfs/version.rb
|
155
|
+
- memfs.gemspec
|
156
|
+
- spec/fileutils_spec.rb
|
157
|
+
- spec/memfs/dir_spec.rb
|
158
|
+
- spec/memfs/fake/directory_spec.rb
|
159
|
+
- spec/memfs/fake/entry_spec.rb
|
160
|
+
- spec/memfs/fake/file/content_spec.rb
|
161
|
+
- spec/memfs/fake/file_spec.rb
|
162
|
+
- spec/memfs/fake/symlink_spec.rb
|
163
|
+
- spec/memfs/file/stat_spec.rb
|
164
|
+
- spec/memfs/file_spec.rb
|
165
|
+
- spec/memfs/file_system_spec.rb
|
166
|
+
- spec/memfs_spec.rb
|
167
|
+
- spec/spec_helper.rb
|
168
|
+
homepage: http://github.com/simonc/memfs
|
169
|
+
licenses: []
|
170
|
+
metadata: {}
|
171
|
+
post_install_message:
|
172
|
+
rdoc_options: []
|
173
|
+
require_paths:
|
174
|
+
- lib
|
175
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
176
|
+
requirements:
|
177
|
+
- - '>='
|
178
|
+
- !ruby/object:Gem::Version
|
179
|
+
version: '0'
|
180
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
181
|
+
requirements:
|
182
|
+
- - '>='
|
183
|
+
- !ruby/object:Gem::Version
|
184
|
+
version: '0'
|
185
|
+
requirements: []
|
186
|
+
rubyforge_project:
|
187
|
+
rubygems_version: 2.0.3
|
188
|
+
signing_key:
|
189
|
+
specification_version: 4
|
190
|
+
summary: memfs-0.0.1
|
191
|
+
test_files:
|
192
|
+
- spec/fileutils_spec.rb
|
193
|
+
- spec/memfs/dir_spec.rb
|
194
|
+
- spec/memfs/fake/directory_spec.rb
|
195
|
+
- spec/memfs/fake/entry_spec.rb
|
196
|
+
- spec/memfs/fake/file/content_spec.rb
|
197
|
+
- spec/memfs/fake/file_spec.rb
|
198
|
+
- spec/memfs/fake/symlink_spec.rb
|
199
|
+
- spec/memfs/file/stat_spec.rb
|
200
|
+
- spec/memfs/file_spec.rb
|
201
|
+
- spec/memfs/file_system_spec.rb
|
202
|
+
- spec/memfs_spec.rb
|
203
|
+
- spec/spec_helper.rb
|