mnoble-fakefs 0.3.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.
- data/.autotest +5 -0
- data/.gitignore +3 -0
- data/CONTRIBUTORS +27 -0
- data/LICENSE +20 -0
- data/README.markdown +123 -0
- data/Rakefile +66 -0
- data/fakefs.gemspec +86 -0
- data/lib/fakefs.rb +3 -0
- data/lib/fakefs/base.rb +45 -0
- data/lib/fakefs/dir.rb +116 -0
- data/lib/fakefs/fake/dir.rb +48 -0
- data/lib/fakefs/fake/file.rb +81 -0
- data/lib/fakefs/fake/symlink.rb +32 -0
- data/lib/fakefs/file.rb +403 -0
- data/lib/fakefs/file_system.rb +139 -0
- data/lib/fakefs/file_test.rb +7 -0
- data/lib/fakefs/fileutils.rb +140 -0
- data/lib/fakefs/safe.rb +11 -0
- data/lib/fakefs/spec_helpers.rb +46 -0
- data/lib/fakefs/version.rb +9 -0
- data/spec/fakefs/spec_helpers_spec.rb +57 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +3 -0
- data/test/fake/file/lstat_test.rb +59 -0
- data/test/fake/file/stat_test.rb +39 -0
- data/test/fake/file/sysseek_test.rb +44 -0
- data/test/fake/file/syswrite_test.rb +62 -0
- data/test/fake/file_test.rb +97 -0
- data/test/fake/symlink_test.rb +10 -0
- data/test/fakefs_test.rb +1611 -0
- data/test/file/stat_test.rb +73 -0
- data/test/safe_test.rb +44 -0
- data/test/test_helper.rb +8 -0
- data/test/verify.rb +31 -0
- metadata +105 -0
data/.autotest
ADDED
data/.gitignore
ADDED
data/CONTRIBUTORS
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
Scott Taylor <scott@railsnewbie.com>
|
|
2
|
+
Pat Nakajima <patnakajima@gmail.com>
|
|
3
|
+
Chris Wanstrath <chris@ozmm.org>
|
|
4
|
+
Myles Eftos <myles@madpilot.com.au>
|
|
5
|
+
Jeff Hodges <jeff@somethingsimilar.com>
|
|
6
|
+
Matt Freels <matt@freels.name>
|
|
7
|
+
Víctor Martínez <knoopx@gmail.com>
|
|
8
|
+
Nick Quaranto <nick@quaran.to>
|
|
9
|
+
Aaron Suggs <aaron@ktheory.com>
|
|
10
|
+
Victor Costan <costan@gmail.com>
|
|
11
|
+
Jon Yurek <jyurek@thoughtbot.com>
|
|
12
|
+
Greg Campbell <gtcampbell@gmail.com>
|
|
13
|
+
Ben Mabey <ben@benmabey.com>
|
|
14
|
+
Mark <mark@amerine.net>
|
|
15
|
+
Sam Goldstein <sam@aboutus.org>
|
|
16
|
+
dmathieu <42@dmathieu.com>
|
|
17
|
+
Lars Gierth <lars.gierth@gmail.com>
|
|
18
|
+
marano <thiagomarano@gmail.com>
|
|
19
|
+
jameswilding <james@jameswilding.net>
|
|
20
|
+
Scott Barron <scott@elitists.net>
|
|
21
|
+
Tymon Tobolski <i@teamon.eu>
|
|
22
|
+
Mariusz Pietrzyk <wijet@wijet.pl>
|
|
23
|
+
Keita Urashima <ursm@ursm.jp>
|
|
24
|
+
David Reese <david@whatcould.com>
|
|
25
|
+
msassak <msassak@gmail.com>
|
|
26
|
+
Mislav Marohnić <mislav.marohnic@gmail.com>
|
|
27
|
+
Rob Sanheim <rsanheim@gmail.com>
|
data/LICENSE
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Copyright (c) 2009 Chris Wanstrath
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
4
|
+
a copy of this software and associated documentation files (the
|
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
9
|
+
the following conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice shall be
|
|
12
|
+
included in all copies or substantial portions of the Software.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.markdown
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
FakeFS
|
|
2
|
+
======
|
|
3
|
+
|
|
4
|
+
Mocha is great. But when your library is all about manipulating the
|
|
5
|
+
filesystem, you really want to test the behavior and not the implementation.
|
|
6
|
+
|
|
7
|
+
If you're mocking and stubbing every call to FileUtils or File, you're
|
|
8
|
+
tightly coupling your tests with the implementation.
|
|
9
|
+
|
|
10
|
+
def test_creates_directory
|
|
11
|
+
FileUtils.expects(:mkdir).with("directory").once
|
|
12
|
+
Library.add "directory"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
The above test will break if we decide to use `mkdir_p` in our code. Refactoring
|
|
16
|
+
code shouldn't necessitate refactoring tests.
|
|
17
|
+
|
|
18
|
+
With FakeFS:
|
|
19
|
+
|
|
20
|
+
def test_creates_directory
|
|
21
|
+
Library.add "directory"
|
|
22
|
+
assert File.directory?("directory")
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
Woot.
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
Usage
|
|
29
|
+
-----
|
|
30
|
+
|
|
31
|
+
require 'fakefs'
|
|
32
|
+
|
|
33
|
+
# That's it.
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
Don't Fake the FS Immediately
|
|
37
|
+
-----------------------------
|
|
38
|
+
|
|
39
|
+
require 'fakefs/safe'
|
|
40
|
+
|
|
41
|
+
FakeFS.activate!
|
|
42
|
+
# your code
|
|
43
|
+
FakeFS.deactivate!
|
|
44
|
+
|
|
45
|
+
# or
|
|
46
|
+
FakeFS do
|
|
47
|
+
# your code
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
RSpec
|
|
52
|
+
-----
|
|
53
|
+
|
|
54
|
+
The above approach works with RSpec as well. In addition you may include
|
|
55
|
+
FakeFS::SpecHelpers to turn FakeFS on and off in a given example group:
|
|
56
|
+
|
|
57
|
+
require 'fakefs/spec_helpers'
|
|
58
|
+
|
|
59
|
+
describe "my spec" do
|
|
60
|
+
include FakeFS::SpecHelpers
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
See `lib/fakefs/spec_helpers.rb` for more info.
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
How is this different than MockFS?
|
|
67
|
+
----------------------------------
|
|
68
|
+
|
|
69
|
+
FakeFS provides a test suite and works with symlinks. It's also strictly a
|
|
70
|
+
test-time dependency: your actual library does not need to use or know about
|
|
71
|
+
FakeFS.
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
Caveats
|
|
75
|
+
-------
|
|
76
|
+
|
|
77
|
+
FakeFS internally uses the `Pathname` and `FileUtils` constants. If you use
|
|
78
|
+
these in your app, be certain you're properly requiring them and not counting
|
|
79
|
+
on FakeFS' own require.
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
Speed?
|
|
83
|
+
------
|
|
84
|
+
|
|
85
|
+
<http://gist.github.com/156091>
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
Installation
|
|
89
|
+
------------
|
|
90
|
+
|
|
91
|
+
### [Gemcutter](http://gemcutter.org/)
|
|
92
|
+
|
|
93
|
+
$ gem install fakefs
|
|
94
|
+
|
|
95
|
+
### [Rip](http://hellorip.com)
|
|
96
|
+
|
|
97
|
+
$ rip install git://github.com/defunkt/fakefs.git
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
Contributing
|
|
101
|
+
------------
|
|
102
|
+
|
|
103
|
+
Once you've made your great commits:
|
|
104
|
+
|
|
105
|
+
1. [Fork][0] FakeFS
|
|
106
|
+
2. Create a topic branch - `git checkout -b my_branch`
|
|
107
|
+
3. Push to your branch - `git push origin my_branch`
|
|
108
|
+
4. Create an [Issue][1] with a link to your branch
|
|
109
|
+
5. That's it!
|
|
110
|
+
|
|
111
|
+
Meta
|
|
112
|
+
----
|
|
113
|
+
|
|
114
|
+
* Code: `git clone git://github.com/defunkt/fakefs.git`
|
|
115
|
+
* Home: <http://github.com/defunkt/fakefs>
|
|
116
|
+
* Docs: <http://defunkt.github.com/fakefs>
|
|
117
|
+
* Bugs: <http://github.com/defunkt/fakefs/issues>
|
|
118
|
+
* List: <http://groups.google.com/group/fakefs>
|
|
119
|
+
* Test: <http://runcoderun.com/defunkt/fakefs>
|
|
120
|
+
* Gems: <http://gemcutter.org/gems/fakefs>
|
|
121
|
+
|
|
122
|
+
[0]: http://help.github.com/forking/
|
|
123
|
+
[1]: http://github.com/defunkt/fakefs/issues
|
data/Rakefile
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
$LOAD_PATH.unshift File.join(File.dirname(__FILE__))
|
|
2
|
+
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), 'test')
|
|
3
|
+
|
|
4
|
+
desc "Run tests"
|
|
5
|
+
task :test do
|
|
6
|
+
Dir['test/**/*_test.rb'].each { |file| require file }
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
task :default => [:test, :spec]
|
|
10
|
+
|
|
11
|
+
begin
|
|
12
|
+
require 'spec/rake/spectask'
|
|
13
|
+
|
|
14
|
+
desc "Run specs"
|
|
15
|
+
Spec::Rake::SpecTask.new(:spec) do |t|
|
|
16
|
+
t.spec_files = FileList["spec/**/*.rb"]
|
|
17
|
+
end
|
|
18
|
+
rescue LoadError
|
|
19
|
+
puts "Spec task can't be loaded. `gem install rspec`"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
begin
|
|
23
|
+
require 'jeweler'
|
|
24
|
+
|
|
25
|
+
$LOAD_PATH.unshift File.dirname(__FILE__) + '/lib'
|
|
26
|
+
require 'fakefs/version'
|
|
27
|
+
|
|
28
|
+
Jeweler::Tasks.new do |gemspec|
|
|
29
|
+
gemspec.name = "fakefs"
|
|
30
|
+
gemspec.summary = "A fake filesystem. Use it in your tests."
|
|
31
|
+
gemspec.email = "chris@ozmm.org"
|
|
32
|
+
gemspec.homepage = "http://github.com/defunkt/fakefs"
|
|
33
|
+
gemspec.description = "A fake filesystem. Use it in your tests."
|
|
34
|
+
gemspec.authors = ["Chris Wanstrath", "Scott Taylor", "Jeff Hodges", "Pat Nakajima"]
|
|
35
|
+
gemspec.has_rdoc = false
|
|
36
|
+
gemspec.version = FakeFS::Version.to_s
|
|
37
|
+
end
|
|
38
|
+
rescue LoadError
|
|
39
|
+
puts "Jeweler not available."
|
|
40
|
+
puts "Install it with: gem install jeweler"
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
begin
|
|
44
|
+
require 'sdoc_helpers'
|
|
45
|
+
rescue LoadError
|
|
46
|
+
puts "sdoc support not enabled. Please gem install sdoc-helpers."
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
desc "Build a gem"
|
|
50
|
+
task :gem => [ :gemspec, :build ]
|
|
51
|
+
|
|
52
|
+
desc "Push a new version to Gemcutter"
|
|
53
|
+
task :publish => [ :gemspec, :build ] do
|
|
54
|
+
abort("Tests failed!") unless system("rake test")
|
|
55
|
+
system "git tag v#{FakeFS::Version}"
|
|
56
|
+
system "git push origin v#{FakeFS::Version}"
|
|
57
|
+
system "git push origin master"
|
|
58
|
+
system "gem push pkg/fakefs-#{FakeFS::Version}.gem"
|
|
59
|
+
system "git clean -fd"
|
|
60
|
+
exec "rake pages"
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
desc "Update contributors"
|
|
64
|
+
task :update_contributors do
|
|
65
|
+
sh "git-rank-contributors > CONTRIBUTORS"
|
|
66
|
+
end
|
data/fakefs.gemspec
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Generated by jeweler
|
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
|
4
|
+
# -*- encoding: utf-8 -*-
|
|
5
|
+
|
|
6
|
+
Gem::Specification.new do |s|
|
|
7
|
+
s.name = %q{mnoble-fakefs}
|
|
8
|
+
s.version = "0.3.1"
|
|
9
|
+
|
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
11
|
+
s.authors = ["Chris Wanstrath", "Scott Taylor", "Jeff Hodges", "Pat Nakajima"]
|
|
12
|
+
s.date = %q{2010-12-18}
|
|
13
|
+
s.description = %q{A fake filesystem. Use it in your tests. (Updates to support mkdir)}
|
|
14
|
+
s.email = %q{chris@ozmm.org}
|
|
15
|
+
s.extra_rdoc_files = [
|
|
16
|
+
"LICENSE",
|
|
17
|
+
"README.markdown"
|
|
18
|
+
]
|
|
19
|
+
s.files = [
|
|
20
|
+
".autotest",
|
|
21
|
+
".gitignore",
|
|
22
|
+
"CONTRIBUTORS",
|
|
23
|
+
"LICENSE",
|
|
24
|
+
"README.markdown",
|
|
25
|
+
"Rakefile",
|
|
26
|
+
"fakefs.gemspec",
|
|
27
|
+
"lib/fakefs.rb",
|
|
28
|
+
"lib/fakefs/base.rb",
|
|
29
|
+
"lib/fakefs/dir.rb",
|
|
30
|
+
"lib/fakefs/fake/dir.rb",
|
|
31
|
+
"lib/fakefs/fake/file.rb",
|
|
32
|
+
"lib/fakefs/fake/symlink.rb",
|
|
33
|
+
"lib/fakefs/file.rb",
|
|
34
|
+
"lib/fakefs/file_system.rb",
|
|
35
|
+
"lib/fakefs/file_test.rb",
|
|
36
|
+
"lib/fakefs/fileutils.rb",
|
|
37
|
+
"lib/fakefs/safe.rb",
|
|
38
|
+
"lib/fakefs/spec_helpers.rb",
|
|
39
|
+
"lib/fakefs/version.rb",
|
|
40
|
+
"spec/fakefs/spec_helpers_spec.rb",
|
|
41
|
+
"spec/spec.opts",
|
|
42
|
+
"spec/spec_helper.rb",
|
|
43
|
+
"test/fake/file/lstat_test.rb",
|
|
44
|
+
"test/fake/file/stat_test.rb",
|
|
45
|
+
"test/fake/file/sysseek_test.rb",
|
|
46
|
+
"test/fake/file/syswrite_test.rb",
|
|
47
|
+
"test/fake/file_test.rb",
|
|
48
|
+
"test/fake/symlink_test.rb",
|
|
49
|
+
"test/fakefs_test.rb",
|
|
50
|
+
"test/file/stat_test.rb",
|
|
51
|
+
"test/safe_test.rb",
|
|
52
|
+
"test/test_helper.rb",
|
|
53
|
+
"test/verify.rb"
|
|
54
|
+
]
|
|
55
|
+
s.homepage = %q{http://github.com/defunkt/fakefs}
|
|
56
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
|
57
|
+
s.require_paths = ["lib"]
|
|
58
|
+
s.rubygems_version = %q{1.3.7}
|
|
59
|
+
s.summary = %q{A fake filesystem. Use it in your tests.}
|
|
60
|
+
s.test_files = [
|
|
61
|
+
"spec/fakefs/spec_helpers_spec.rb",
|
|
62
|
+
"spec/spec_helper.rb",
|
|
63
|
+
"test/fake/file/lstat_test.rb",
|
|
64
|
+
"test/fake/file/stat_test.rb",
|
|
65
|
+
"test/fake/file/sysseek_test.rb",
|
|
66
|
+
"test/fake/file/syswrite_test.rb",
|
|
67
|
+
"test/fake/file_test.rb",
|
|
68
|
+
"test/fake/symlink_test.rb",
|
|
69
|
+
"test/fakefs_test.rb",
|
|
70
|
+
"test/file/stat_test.rb",
|
|
71
|
+
"test/safe_test.rb",
|
|
72
|
+
"test/test_helper.rb",
|
|
73
|
+
"test/verify.rb"
|
|
74
|
+
]
|
|
75
|
+
|
|
76
|
+
if s.respond_to? :specification_version then
|
|
77
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
|
78
|
+
s.specification_version = 3
|
|
79
|
+
|
|
80
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
|
81
|
+
else
|
|
82
|
+
end
|
|
83
|
+
else
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
data/lib/fakefs.rb
ADDED
data/lib/fakefs/base.rb
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
RealFile = File
|
|
2
|
+
RealFileTest = FileTest
|
|
3
|
+
RealFileUtils = FileUtils
|
|
4
|
+
RealDir = Dir
|
|
5
|
+
|
|
6
|
+
module FakeFS
|
|
7
|
+
def self.activate!
|
|
8
|
+
Object.class_eval do
|
|
9
|
+
remove_const(:Dir)
|
|
10
|
+
remove_const(:File)
|
|
11
|
+
remove_const(:FileTest)
|
|
12
|
+
remove_const(:FileUtils)
|
|
13
|
+
|
|
14
|
+
const_set(:Dir, FakeFS::Dir)
|
|
15
|
+
const_set(:File, FakeFS::File)
|
|
16
|
+
const_set(:FileUtils, FakeFS::FileUtils)
|
|
17
|
+
const_set(:FileTest, FakeFS::FileTest)
|
|
18
|
+
end
|
|
19
|
+
true
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def self.deactivate!
|
|
23
|
+
Object.class_eval do
|
|
24
|
+
remove_const(:Dir)
|
|
25
|
+
remove_const(:File)
|
|
26
|
+
remove_const(:FileTest)
|
|
27
|
+
remove_const(:FileUtils)
|
|
28
|
+
|
|
29
|
+
const_set(:Dir, RealDir)
|
|
30
|
+
const_set(:File, RealFile)
|
|
31
|
+
const_set(:FileTest, RealFileTest)
|
|
32
|
+
const_set(:FileUtils, RealFileUtils)
|
|
33
|
+
end
|
|
34
|
+
true
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def FakeFS
|
|
39
|
+
return ::FakeFS unless block_given?
|
|
40
|
+
::FakeFS.activate!
|
|
41
|
+
yield
|
|
42
|
+
ensure
|
|
43
|
+
::FakeFS.deactivate!
|
|
44
|
+
end
|
|
45
|
+
|
data/lib/fakefs/dir.rb
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
module FakeFS
|
|
2
|
+
class Dir
|
|
3
|
+
include Enumerable
|
|
4
|
+
|
|
5
|
+
def initialize(string)
|
|
6
|
+
raise Errno::ENOENT, string unless FileSystem.find(string)
|
|
7
|
+
@path = string
|
|
8
|
+
@open = true
|
|
9
|
+
@pointer = 0
|
|
10
|
+
@contents = [ '.', '..', ] + FileSystem.find(@path).values
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def close
|
|
14
|
+
@open = false
|
|
15
|
+
@pointer = nil
|
|
16
|
+
@contents = nil
|
|
17
|
+
nil
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def each(&block)
|
|
21
|
+
while f = read
|
|
22
|
+
yield f
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def path
|
|
27
|
+
@path
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def pos
|
|
31
|
+
@pointer
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def pos=(integer)
|
|
35
|
+
@pointer = integer
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def read
|
|
39
|
+
raise IOError, "closed directory" if @pointer == nil
|
|
40
|
+
n = @contents[@pointer]
|
|
41
|
+
@pointer += 1
|
|
42
|
+
n.to_s.gsub(path + '/', '') if n
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def rewind
|
|
46
|
+
@pointer = 0
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def seek(integer)
|
|
50
|
+
raise IOError, "closed directory" if @pointer == nil
|
|
51
|
+
@pointer = integer
|
|
52
|
+
@contents[integer]
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def self.[](pattern)
|
|
56
|
+
glob(pattern)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def self.chdir(dir, &blk)
|
|
60
|
+
FileSystem.chdir(dir, &blk)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def self.chroot(string)
|
|
64
|
+
# Not implemented yet
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def self.delete(string)
|
|
68
|
+
raise SystemCallError, "No such file or directory - #{string}" unless FileSystem.find(string).values.empty?
|
|
69
|
+
FileSystem.delete(string)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def self.entries(dirname)
|
|
73
|
+
raise SystemCallError, dirname unless FileSystem.find(dirname)
|
|
74
|
+
Dir.new(dirname).map { |file| File.basename(file) }
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def self.foreach(dirname, &block)
|
|
78
|
+
Dir.open(dirname) { |file| yield file }
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def self.glob(pattern, &block)
|
|
82
|
+
files = [FileSystem.find(pattern) || []].flatten.map(&:to_s).sort
|
|
83
|
+
block_given? ? files.each { |file| block.call(file) } : files
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def self.mkdir(string, integer = 0)
|
|
87
|
+
parent = string.split('/')
|
|
88
|
+
parent.pop
|
|
89
|
+
raise Errno::ENOENT, "No such file or directory - #{string}" unless parent.join == "" || FileSystem.find(parent.join('/'))
|
|
90
|
+
raise Errno::EEXIST, "File exists - #{string}" if File.exists?(string)
|
|
91
|
+
FileUtils.mkdir_p(string)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def self.open(string, &block)
|
|
95
|
+
if block_given?
|
|
96
|
+
Dir.new(string).each { |file| yield(file) }
|
|
97
|
+
else
|
|
98
|
+
Dir.new(string)
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def self.tmpdir
|
|
103
|
+
'/tmp'
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def self.pwd
|
|
107
|
+
FileSystem.current_dir.to_s
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
class << self
|
|
111
|
+
alias_method :getwd, :pwd
|
|
112
|
+
alias_method :rmdir, :delete
|
|
113
|
+
alias_method :unlink, :delete
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|