memfs 0.4.2 → 0.4.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +16 -0
- data/lib/memfs/file.rb +3 -0
- data/lib/memfs/io.rb +4 -1
- data/lib/memfs/version.rb +1 -1
- data/spec/memfs/file_spec.rb +51 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 71cd9903100239967550a02a2f803264604c076d
|
4
|
+
data.tar.gz: 65c68e74aab6519b99841afa80c8bf8ec22a4907
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4b5b2d13af10abc53b81c33fef8dcabe4998da21faebcabeb7f50a2ca01334fef69054d2e1c22804aaf6d7202f75b80465be6db1d3d0d3f7513707635ed05950
|
7
|
+
data.tar.gz: 3c9ee2c3e9435c03c53c1777814cd42183774c914e78d2e30d2b51605df89db3a174d79a3c177cd4c911a0ea2e5e07355785f65c375d9c992986196376dbebb7
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -43,6 +43,22 @@ end
|
|
43
43
|
File.exists?('/test-file') #=> false
|
44
44
|
```
|
45
45
|
|
46
|
+
## Why you may prefer MemFs over FakeFS?
|
47
|
+
|
48
|
+
While FakeFS is pretty cool it overrides classes like `FileUtils`. This kind of override is problematic when you rely on real behavior from this kind of tool.
|
49
|
+
|
50
|
+
For instance, trying to test the following with FakeFS will not work, the `noop` option will be ignored:
|
51
|
+
|
52
|
+
``` ruby
|
53
|
+
FileUtils.touch('somefile.txt', noop: true)
|
54
|
+
```
|
55
|
+
|
56
|
+
MemFs tries to be **compliant with the Ruby API** by overriding only the low level classes (C classes) like File, Dir or File::Stat leaving the stdlib classes untouched and still working, being less intrusive that way.
|
57
|
+
|
58
|
+
Some stdlib classes may be overriden at some point if they don't use `File` or `Dir`, like `Pathname`, etc.
|
59
|
+
|
60
|
+
Another key point is that MemFs **aims to implement every single method provided by Ruby classes** (when possible) and to behave and return **exactly** the same way as the original classes.
|
61
|
+
|
46
62
|
## Installation
|
47
63
|
|
48
64
|
Add this line to your application's Gemfile:
|
data/lib/memfs/file.rb
CHANGED
@@ -13,6 +13,8 @@ module MemFs
|
|
13
13
|
include OriginalFile::Constants
|
14
14
|
include IO::InstanceMethods
|
15
15
|
|
16
|
+
ALT_SEPARATOR = nil
|
17
|
+
|
16
18
|
MODE_MAP = {
|
17
19
|
'r' => RDONLY,
|
18
20
|
'r+' => RDWR,
|
@@ -22,6 +24,7 @@ module MemFs
|
|
22
24
|
'a+' => CREAT | APPEND | RDWR
|
23
25
|
}
|
24
26
|
|
27
|
+
SEPARATOR = '/'
|
25
28
|
SUCCESS = 0
|
26
29
|
|
27
30
|
@umask = nil
|
data/lib/memfs/io.rb
CHANGED
@@ -129,6 +129,9 @@ module MemFs
|
|
129
129
|
end
|
130
130
|
|
131
131
|
def read(length = nil, buffer = '')
|
132
|
+
unless entry
|
133
|
+
fail(Errno::ENOENT, path)
|
134
|
+
end
|
132
135
|
default = length ? nil : ''
|
133
136
|
content.read(length, buffer) || default
|
134
137
|
end
|
@@ -180,7 +183,7 @@ module MemFs
|
|
180
183
|
def str_to_mode_int(mode)
|
181
184
|
return mode unless mode.is_a?(String)
|
182
185
|
|
183
|
-
unless mode =~ /\A([rwa]\+?)([bt])?\z/
|
186
|
+
unless mode =~ /\A([rwa]\+?)([bt])?(:bom)?(\|.+)?\z/
|
184
187
|
fail ArgumentError, "invalid access mode #{mode}"
|
185
188
|
end
|
186
189
|
|
data/lib/memfs/version.rb
CHANGED
data/spec/memfs/file_spec.rb
CHANGED
@@ -20,6 +20,16 @@ module MemFs
|
|
20
20
|
expect(subject_class.ancestors).to include Enumerable
|
21
21
|
end
|
22
22
|
|
23
|
+
describe 'constants' do
|
24
|
+
it 'expose SEPARATOR' do
|
25
|
+
expect(MemFs::File::SEPARATOR).to eq '/'
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'expose ALT_SEPARATOR' do
|
29
|
+
expect(MemFs::File::ALT_SEPARATOR).to be_nil
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
23
33
|
describe '.absolute_path' do
|
24
34
|
before { MemFs::Dir.chdir('/test-dir') }
|
25
35
|
|
@@ -803,11 +813,50 @@ module MemFs
|
|
803
813
|
end
|
804
814
|
|
805
815
|
context 'and it is a string' do
|
806
|
-
|
816
|
+
it 'sets the read mode for "r"' do
|
817
|
+
subject = subject_class.new('/test-file', 'r')
|
818
|
+
expect(subject.send(:opening_mode)).to eq File::RDONLY
|
819
|
+
end
|
807
820
|
|
808
|
-
it 'sets the mode
|
821
|
+
it 'sets the write+create+truncate mode for "w"' do
|
822
|
+
subject = subject_class.new('/test-file', 'w')
|
823
|
+
expect(subject.send(:opening_mode)).to eq File::CREAT|File::TRUNC|File::WRONLY
|
824
|
+
end
|
825
|
+
|
826
|
+
it 'sets the read+write mode for "r+"' do
|
827
|
+
subject = subject_class.new('/test-file', 'r+')
|
809
828
|
expect(subject.send(:opening_mode)).to eq File::RDWR
|
810
829
|
end
|
830
|
+
|
831
|
+
it 'sets the read+write+create+truncate mode for "w+"' do
|
832
|
+
subject = subject_class.new('/test-file', 'w+')
|
833
|
+
expect(subject.send(:opening_mode)).to eq File::CREAT|File::TRUNC|File::RDWR
|
834
|
+
end
|
835
|
+
|
836
|
+
it 'sets the write+create+append mode for "a"' do
|
837
|
+
subject = subject_class.new('/test-file', 'a')
|
838
|
+
expect(subject.send(:opening_mode)).to eq File::CREAT|File::APPEND|File::WRONLY
|
839
|
+
end
|
840
|
+
|
841
|
+
it 'sets the read+write+create+append mode for "a+"' do
|
842
|
+
subject = subject_class.new('/test-file', 'a+')
|
843
|
+
expect(subject.send(:opening_mode)).to eq File::CREAT|File::APPEND|File::RDWR
|
844
|
+
end
|
845
|
+
|
846
|
+
it 'handles the :bom option' do
|
847
|
+
subject = subject_class.new('/test-file', 'r:bom')
|
848
|
+
expect(subject.send(:opening_mode)).to eq File::RDONLY
|
849
|
+
end
|
850
|
+
|
851
|
+
it 'handles the |utf-8 option' do
|
852
|
+
subject = subject_class.new('/test-file', 'r|utf-8')
|
853
|
+
expect(subject.send(:opening_mode)).to eq File::RDONLY
|
854
|
+
end
|
855
|
+
|
856
|
+
it 'handles the :bom|utf-8 option' do
|
857
|
+
subject = subject_class.new('/test-file', 'r:bom|utf-8')
|
858
|
+
expect(subject.send(:opening_mode)).to eq File::RDONLY
|
859
|
+
end
|
811
860
|
end
|
812
861
|
|
813
862
|
context 'and it specifies that the file must be created' do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: memfs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Simon COURTOIS
|
@@ -190,7 +190,7 @@ rubyforge_project:
|
|
190
190
|
rubygems_version: 2.4.5
|
191
191
|
signing_key:
|
192
192
|
specification_version: 4
|
193
|
-
summary: memfs-0.4.
|
193
|
+
summary: memfs-0.4.3
|
194
194
|
test_files:
|
195
195
|
- spec/fileutils_spec.rb
|
196
196
|
- spec/memfs/dir_spec.rb
|