memfs 0.4.0 → 0.4.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.
@@ -1,3 +1,5 @@
1
1
  language: ruby
2
2
  rvm:
3
+ - 1.9.3
3
4
  - 2.0.0
5
+ - 2.1.2
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.4.1
4
+
5
+ * FIX: Support for 1.9.3 broken by File::FNM_EXTGLOB
6
+
3
7
  ## 0.4.0
4
8
 
5
9
  * ADD: `Dir.chroot`
data/README.md CHANGED
@@ -19,7 +19,7 @@ MemFs is greatly inspired by the awesome
19
19
  The main goal of MemFs is to be 100% compatible with the Ruby libraries like
20
20
  FileUtils.
21
21
 
22
- For french guys, the answer is yes, the joke in the name is intended ;)
22
+ For French people, the answer is yes, the joke in the name is intended ;)
23
23
 
24
24
  ## Take a look
25
25
 
@@ -147,7 +147,11 @@ module MemFs
147
147
 
148
148
  private
149
149
 
150
- GLOB_FLAGS = File::FNM_EXTGLOB | File::FNM_PATHNAME
150
+ if defined?(File::FNM_EXTGLOB)
151
+ GLOB_FLAGS = File::FNM_EXTGLOB | File::FNM_PATHNAME
152
+ else
153
+ GLOB_FLAGS = File::FNM_PATHNAME
154
+ end
151
155
 
152
156
  attr_accessor :entry, :max_seek, :state
153
157
 
@@ -5,11 +5,9 @@ module MemFs
5
5
  class File
6
6
  extend FilesystemAccess
7
7
  extend SingleForwardable
8
+ include Enumerable
8
9
  include FilesystemAccess
9
-
10
- OriginalFile.constants.grep(/^[A-Z_]+$/).each do |const|
11
- const_set const, OriginalFile.const_get(const)
12
- end
10
+ include OriginalFile::Constants
13
11
 
14
12
  MODE_MAP = {
15
13
  'r' => RDONLY,
@@ -262,6 +260,13 @@ module MemFs
262
260
  closed
263
261
  end
264
262
 
263
+ def each(sep = $/, &block)
264
+ return to_enum(__callee__) unless block_given?
265
+ fail IOError, 'not opened for reading' unless readable?
266
+ content.each_line(sep) { |line| block.call(line) }
267
+ self
268
+ end
269
+
265
270
  def lstat
266
271
  File.lstat(path)
267
272
  end
@@ -373,6 +378,11 @@ module MemFs
373
378
  (opening_mode & File::CREAT).nonzero?
374
379
  end
375
380
 
381
+ def readable?
382
+ (opening_mode & File::RDWR).nonzero? ||
383
+ (opening_mode | File::RDONLY).zero?
384
+ end
385
+
376
386
  def truncate_file?
377
387
  (opening_mode & File::TRUNC).nonzero?
378
388
  end
@@ -1,3 +1,3 @@
1
1
  module MemFs
2
- VERSION = '0.4.0'
2
+ VERSION = '0.4.1'
3
3
  end
@@ -215,7 +215,10 @@ module MemFs
215
215
  it_behaves_like 'returning matching filenames', '/test?', %w[/test0 /test1 /test2]
216
216
  it_behaves_like 'returning matching filenames', '/test[01]', %w[/test0 /test1]
217
217
  it_behaves_like 'returning matching filenames', '/test[^2]', %w[/test0 /test1]
218
- it_behaves_like 'returning matching filenames', '/test{1,2}', %w[/test1 /test2]
218
+
219
+ if defined?(File::FNM_EXTGLOB)
220
+ it_behaves_like 'returning matching filenames', '/test{1,2}', %w[/test1 /test2]
221
+ end
219
222
 
220
223
  context 'when a flag is given' do
221
224
  it 'uses it to compare filenames' do
@@ -381,7 +384,7 @@ module MemFs
381
384
  end
382
385
 
383
386
  describe '#path' do
384
- it "returns the path parameter passed to dirs constructor" do
387
+ it "returns the path parameter passed to dir's constructor" do
385
388
  expect(instance.path).to eq '/test'
386
389
  end
387
390
  end
@@ -492,7 +495,7 @@ module MemFs
492
495
  end
493
496
 
494
497
  describe '#to_path' do
495
- it "returns the path parameter passed to dirs constructor" do
498
+ it "returns the path parameter passed to dir's constructor" do
496
499
  expect(instance.to_path).to eq '/test'
497
500
  end
498
501
  end
@@ -14,6 +14,10 @@ module MemFs
14
14
  subject.symlink '/no-file', '/no-link'
15
15
  end
16
16
 
17
+ it 'implements Enumerable' do
18
+ expect(subject.ancestors).to include(Enumerable)
19
+ end
20
+
17
21
  describe '.absolute_path' do
18
22
  before :each do
19
23
  MemFs::Dir.chdir('/test-dir')
@@ -1724,6 +1728,60 @@ module MemFs
1724
1728
  end
1725
1729
  end
1726
1730
 
1731
+ describe '#each' do
1732
+ let(:file) { subject.open('/test-file') }
1733
+ let(:lines) do
1734
+ ["Hello this is a file\n", "with some lines\n", "for test purpose\n"]
1735
+ end
1736
+
1737
+ before do
1738
+ subject.open('/test-file', 'w') do |f|
1739
+ lines.each { |line| f.puts line }
1740
+ end
1741
+ end
1742
+
1743
+ it 'executes the block for every line in the file' do
1744
+ expect{ |blk| file.each(&blk) }.to \
1745
+ yield_successive_args(*lines)
1746
+ end
1747
+
1748
+ it 'returns the file itself' do
1749
+ expect(file.each {}).to be file
1750
+ end
1751
+
1752
+ context 'when a separator is given' do
1753
+ it 'uses this separator to split lines' do
1754
+ expected_lines = [
1755
+ "Hello this is a f",
1756
+ "ile\nwith some lines\nf",
1757
+ "or test purpose\n"
1758
+ ]
1759
+ expect{ |blk| file.each('f', &blk) }.to \
1760
+ yield_successive_args(*expected_lines)
1761
+ end
1762
+ end
1763
+
1764
+ context 'when the file is not open for reading' do
1765
+ let(:file) { subject.open('/test-file', 'w') }
1766
+
1767
+ it 'raises an exception' do
1768
+ expect{ file.each { |l| puts l } }.to raise_error(IOError)
1769
+ end
1770
+
1771
+ context 'when no block is given' do
1772
+ it 'does not raise an exception' do
1773
+ expect{ file.each }.not_to raise_error
1774
+ end
1775
+ end
1776
+ end
1777
+
1778
+ context 'when no block is given' do
1779
+ it 'returns an enumerator' do
1780
+ expect(file.each.next).to eq "Hello this is a file\n"
1781
+ end
1782
+ end
1783
+ end
1784
+
1727
1785
  describe '#lstat' do
1728
1786
  it "returns the File::Stat object of the file" do
1729
1787
  expect(file.lstat).to be_a(File::Stat)
metadata CHANGED
@@ -1,125 +1,142 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: memfs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Simon COURTOIS
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2014-07-18 00:00:00.000000000 Z
12
+ date: 2014-07-24 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: coveralls
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
- - - "~>"
19
+ - - ~>
18
20
  - !ruby/object:Gem::Version
19
21
  version: '0.6'
20
22
  type: :development
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
- - - "~>"
27
+ - - ~>
25
28
  - !ruby/object:Gem::Version
26
29
  version: '0.6'
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: rake
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
- - - "~>"
35
+ - - ~>
32
36
  - !ruby/object:Gem::Version
33
37
  version: '10.0'
34
38
  type: :development
35
39
  prerelease: false
36
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
- - - "~>"
43
+ - - ~>
39
44
  - !ruby/object:Gem::Version
40
45
  version: '10.0'
41
46
  - !ruby/object:Gem::Dependency
42
47
  name: rspec
43
48
  requirement: !ruby/object:Gem::Requirement
49
+ none: false
44
50
  requirements:
45
- - - "~>"
51
+ - - ~>
46
52
  - !ruby/object:Gem::Version
47
53
  version: '2.14'
48
54
  type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
51
58
  requirements:
52
- - - "~>"
59
+ - - ~>
53
60
  - !ruby/object:Gem::Version
54
61
  version: '2.14'
55
62
  - !ruby/object:Gem::Dependency
56
63
  name: guard
57
64
  requirement: !ruby/object:Gem::Requirement
65
+ none: false
58
66
  requirements:
59
- - - "~>"
67
+ - - ~>
60
68
  - !ruby/object:Gem::Version
61
69
  version: '1.5'
62
70
  type: :development
63
71
  prerelease: false
64
72
  version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
65
74
  requirements:
66
- - - "~>"
75
+ - - ~>
67
76
  - !ruby/object:Gem::Version
68
77
  version: '1.5'
69
78
  - !ruby/object:Gem::Dependency
70
79
  name: guard-rspec
71
80
  requirement: !ruby/object:Gem::Requirement
81
+ none: false
72
82
  requirements:
73
- - - "~>"
83
+ - - ~>
74
84
  - !ruby/object:Gem::Version
75
85
  version: '2.1'
76
86
  type: :development
77
87
  prerelease: false
78
88
  version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
79
90
  requirements:
80
- - - "~>"
91
+ - - ~>
81
92
  - !ruby/object:Gem::Version
82
93
  version: '2.1'
83
94
  - !ruby/object:Gem::Dependency
84
95
  name: rb-inotify
85
96
  requirement: !ruby/object:Gem::Requirement
97
+ none: false
86
98
  requirements:
87
- - - "~>"
99
+ - - ~>
88
100
  - !ruby/object:Gem::Version
89
101
  version: '0.8'
90
102
  type: :development
91
103
  prerelease: false
92
104
  version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
93
106
  requirements:
94
- - - "~>"
107
+ - - ~>
95
108
  - !ruby/object:Gem::Version
96
109
  version: '0.8'
97
110
  - !ruby/object:Gem::Dependency
98
111
  name: rb-fsevent
99
112
  requirement: !ruby/object:Gem::Requirement
113
+ none: false
100
114
  requirements:
101
- - - "~>"
115
+ - - ~>
102
116
  - !ruby/object:Gem::Version
103
117
  version: '0.9'
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
107
122
  requirements:
108
- - - "~>"
123
+ - - ~>
109
124
  - !ruby/object:Gem::Version
110
125
  version: '0.9'
111
126
  - !ruby/object:Gem::Dependency
112
127
  name: rb-fchange
113
128
  requirement: !ruby/object:Gem::Requirement
129
+ none: false
114
130
  requirements:
115
- - - "~>"
131
+ - - ~>
116
132
  - !ruby/object:Gem::Version
117
133
  version: '0.0'
118
134
  type: :development
119
135
  prerelease: false
120
136
  version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
121
138
  requirements:
122
- - - "~>"
139
+ - - ~>
123
140
  - !ruby/object:Gem::Version
124
141
  version: '0.0'
125
142
  description: MemFs provides a fake file system that can be used for tests. Strongly
@@ -130,9 +147,9 @@ executables: []
130
147
  extensions: []
131
148
  extra_rdoc_files: []
132
149
  files:
133
- - ".gitignore"
134
- - ".rspec"
135
- - ".travis.yml"
150
+ - .gitignore
151
+ - .rspec
152
+ - .travis.yml
136
153
  - CHANGELOG.md
137
154
  - Gemfile
138
155
  - Guardfile
@@ -167,27 +184,34 @@ files:
167
184
  homepage: http://github.com/simonc/memfs
168
185
  licenses:
169
186
  - MIT
170
- metadata: {}
171
187
  post_install_message:
172
188
  rdoc_options: []
173
189
  require_paths:
174
190
  - lib
175
191
  required_ruby_version: !ruby/object:Gem::Requirement
192
+ none: false
176
193
  requirements:
177
- - - ">="
194
+ - - ! '>='
178
195
  - !ruby/object:Gem::Version
179
196
  version: '0'
197
+ segments:
198
+ - 0
199
+ hash: 1081085221049252726
180
200
  required_rubygems_version: !ruby/object:Gem::Requirement
201
+ none: false
181
202
  requirements:
182
- - - ">="
203
+ - - ! '>='
183
204
  - !ruby/object:Gem::Version
184
205
  version: '0'
206
+ segments:
207
+ - 0
208
+ hash: 1081085221049252726
185
209
  requirements: []
186
210
  rubyforge_project:
187
- rubygems_version: 2.2.2
211
+ rubygems_version: 1.8.23.2
188
212
  signing_key:
189
- specification_version: 4
190
- summary: memfs-0.4.0
213
+ specification_version: 3
214
+ summary: memfs-0.4.1
191
215
  test_files:
192
216
  - spec/fileutils_spec.rb
193
217
  - spec/memfs/dir_spec.rb
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: a6b1cfcdf00318e924ed6247443dffdee28f85e4
4
- data.tar.gz: e902f9ddd053b6aa53388f5151d38e650b459874
5
- SHA512:
6
- metadata.gz: 4478660656ed0a1fc638a01f5010fc27f3673064f36f4cda41523029266b220907ffe28cb0337763e2b266e8afb0a29ba18289293a316c56dcfac00fed763814
7
- data.tar.gz: 6417b9df0a65364af0c7a4e6f04389b68388b456e8d6b641634b2794687f743f6e971655959d29322efac885918a297b472aa2a5fa6a5003784dd4a2652a110c