fakefs 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,9 @@
1
+ rvm:
2
+ - 1.8.7
3
+ - 1.9.3
4
+ - jruby
5
+ - rbx-19mode
6
+ matrix:
7
+ allow_failures:
8
+ - rvm: jruby
9
+ - rvm: rbx-19mode
data/Gemfile CHANGED
@@ -3,6 +3,5 @@ source :rubygems
3
3
  group :development do
4
4
  gem 'rspec'
5
5
  gem 'jeweler'
6
- gem 'sdoc-helpers'
7
6
  gem 'rdiscount'
8
7
  end
@@ -0,0 +1,31 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ diff-lcs (1.1.3)
5
+ git (1.2.5)
6
+ jeweler (1.8.4)
7
+ bundler (~> 1.0)
8
+ git (>= 1.2.5)
9
+ rake
10
+ rdoc
11
+ json (1.7.5)
12
+ rake (10.0.0)
13
+ rdiscount (1.6.8)
14
+ rdoc (3.12)
15
+ json (~> 1.4)
16
+ rspec (2.12.0)
17
+ rspec-core (~> 2.12.0)
18
+ rspec-expectations (~> 2.12.0)
19
+ rspec-mocks (~> 2.12.0)
20
+ rspec-core (2.12.0)
21
+ rspec-expectations (2.12.0)
22
+ diff-lcs (~> 1.1.3)
23
+ rspec-mocks (2.12.0)
24
+
25
+ PLATFORMS
26
+ ruby
27
+
28
+ DEPENDENCIES
29
+ jeweler
30
+ rdiscount
31
+ rspec
@@ -1,4 +1,4 @@
1
- FakeFS
1
+ FakeFS [![build status](https://secure.travis-ci.org/defunkt/fakefs.png)](https://secure.travis-ci.org/defunkt/fakefs)
2
2
  ======
3
3
 
4
4
  Mocha is great. But when your library is all about manipulating the
@@ -7,20 +7,24 @@ filesystem, you really want to test the behavior and not the implementation.
7
7
  If you're mocking and stubbing every call to FileUtils or File, you're
8
8
  tightly coupling your tests with the implementation.
9
9
 
10
- def test_creates_directory
11
- FileUtils.expects(:mkdir).with("directory").once
12
- Library.add "directory"
13
- end
10
+ ``` ruby
11
+ def test_creates_directory
12
+ FileUtils.expects(:mkdir).with("directory").once
13
+ Library.add "directory"
14
+ end
15
+ ```
14
16
 
15
17
  The above test will break if we decide to use `mkdir_p` in our code. Refactoring
16
18
  code shouldn't necessitate refactoring tests.
17
19
 
18
20
  With FakeFS:
19
21
 
20
- def test_creates_directory
21
- Library.add "directory"
22
- assert File.directory?("directory")
23
- end
22
+ ``` ruby
23
+ def test_creates_directory
24
+ Library.add "directory"
25
+ assert File.directory?("directory")
26
+ end
27
+ ```
24
28
 
25
29
  Woot.
26
30
 
@@ -28,24 +32,29 @@ Woot.
28
32
  Usage
29
33
  -----
30
34
 
31
- require 'fakefs'
32
-
33
- # That's it.
35
+ ``` ruby
36
+ require 'fakefs'
34
37
 
38
+ # That's it.
39
+ ```
35
40
 
36
41
  Don't Fake the FS Immediately
37
42
  -----------------------------
38
43
 
39
- require 'fakefs/safe'
44
+ ``` ruby
45
+ gem "fakefs", :require => "fakefs/safe"
40
46
 
41
- FakeFS.activate!
42
- # your code
43
- FakeFS.deactivate!
47
+ require 'fakefs/safe'
44
48
 
45
- # or
46
- FakeFS do
47
- # your code
48
- end
49
+ FakeFS.activate!
50
+ # your code
51
+ FakeFS.deactivate!
52
+
53
+ # or
54
+ FakeFS do
55
+ # your code
56
+ end
57
+ ```
49
58
 
50
59
  Rails
51
60
  -----
@@ -61,15 +70,35 @@ RSpec
61
70
  The above approach works with RSpec as well. In addition you may include
62
71
  FakeFS::SpecHelpers to turn FakeFS on and off in a given example group:
63
72
 
64
- require 'fakefs/spec_helpers'
73
+ ``` ruby
74
+ require 'fakefs/spec_helpers'
65
75
 
66
- describe "my spec" do
67
- include FakeFS::SpecHelpers
68
- end
76
+ describe "my spec" do
77
+ include FakeFS::SpecHelpers
78
+ end
79
+ ```
69
80
 
70
81
  See `lib/fakefs/spec_helpers.rb` for more info.
71
82
 
72
83
 
84
+ Integrating with other filesystem libraries
85
+ --------------------------------------------
86
+ Third-party libraries may add methods to filesystem-related classes. FakeFS
87
+ doesn't support these methods out of the box, but you can define fake versions
88
+ yourself on the equivalent FakeFS classes. For example,
89
+ [FileMagic](https://rubygems.org/gems/ruby-filemagic) adds `File#content_type`.
90
+ A fake version can be provided as follows:
91
+
92
+ ``` ruby
93
+ module FakeFS
94
+ class File
95
+ def content_type
96
+ 'fake/file'
97
+ end
98
+ end
99
+ end
100
+ ```
101
+
73
102
  How is this different than MockFS?
74
103
  ----------------------------------
75
104
 
@@ -95,7 +124,7 @@ Speed?
95
124
  Installation
96
125
  ------------
97
126
 
98
- ### [Gemcutter](http://gemcutter.org/)
127
+ ### [RubyGems](http://rubygems.org/)
99
128
 
100
129
  $ gem install fakefs
101
130
 
@@ -112,7 +141,7 @@ Once you've made your great commits:
112
141
  1. [Fork][0] FakeFS
113
142
  2. Create a topic branch - `git checkout -b my_branch`
114
143
  3. Push to your branch - `git push origin my_branch`
115
- 4. Create an [Issue][1] with a link to your branch
144
+ 5. Open a [Pull Request][1]
116
145
  5. That's it!
117
146
 
118
147
  Meta
@@ -123,8 +152,15 @@ Meta
123
152
  * Docs: <http://defunkt.github.com/fakefs>
124
153
  * Bugs: <http://github.com/defunkt/fakefs/issues>
125
154
  * List: <http://groups.google.com/group/fakefs>
126
- * Test: <http://runcoderun.com/defunkt/fakefs>
127
- * Gems: <http://gemcutter.org/gems/fakefs>
155
+ * Test: <http://travisci.org/#!/defunkt/fakefs>
156
+ * Gems: <http://rubygems.org/gems/fakefs>
128
157
 
129
158
  [0]: http://help.github.com/forking/
130
- [1]: http://github.com/defunkt/fakefs/issues
159
+ [1]: http://help.github.com/send-pull-requests/
160
+
161
+ Releasing
162
+ ---------
163
+
164
+ 1. Update version in lib/fakefs/version.rb
165
+ 2. Commit it
166
+ 3. rake publish
data/Rakefile CHANGED
@@ -1,16 +1,25 @@
1
1
  $LOAD_PATH.unshift File.join(File.dirname(__FILE__))
2
2
  $LOAD_PATH.unshift File.join(File.dirname(__FILE__), 'test')
3
3
 
4
- desc "Run tests"
5
- task :test do
6
- Dir['test/**/*_test.rb'].each { |file| require file }
4
+ require "bundler/setup"
5
+
6
+ require 'rake/testtask'
7
+
8
+ Rake::TestTask.new do |t|
9
+ t.libs << "test"
10
+ t.test_files = FileList['test/**/*test.rb']
11
+ t.verbose = true
7
12
  end
8
13
 
9
- task :default => [:test, :spec]
14
+ begin
15
+ require 'rspec/core/rake_task'
16
+ desc "Run specs"
17
+ RSpec::Core::RakeTask.new
18
+ rescue LoadError
19
+ puts "Spec task can't be loaded. `gem install rspec`"
20
+ end
10
21
 
11
- require 'rspec/core/rake_task'
12
- desc "Run specs"
13
- RSpec::Core::RakeTask.new
22
+ task :default => [:test, :spec]
14
23
 
15
24
  begin
16
25
  require 'jeweler'
@@ -33,12 +42,6 @@ rescue LoadError
33
42
  puts "Install it with: gem install jeweler"
34
43
  end
35
44
 
36
- begin
37
- require 'sdoc_helpers'
38
- rescue LoadError
39
- puts "sdoc support not enabled. Please gem install sdoc-helpers."
40
- end
41
-
42
45
  desc "Build a gem"
43
46
  task :gem => [ :gemspec, :build ]
44
47
 
@@ -4,14 +4,14 @@
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = %q{fakefs}
8
- s.version = "0.4.0"
7
+ s.name = "fakefs"
8
+ s.version = "0.4.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Chris Wanstrath", "Scott Taylor", "Jeff Hodges", "Pat Nakajima"]
12
- s.date = %q{2011-09-05}
13
- s.description = %q{A fake filesystem. Use it in your tests.}
14
- s.email = %q{chris@ozmm.org}
12
+ s.date = "2012-11-14"
13
+ s.description = "A fake filesystem. Use it in your tests."
14
+ s.email = "chris@ozmm.org"
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE",
17
17
  "README.markdown"
@@ -19,8 +19,10 @@ Gem::Specification.new do |s|
19
19
  s.files = [
20
20
  ".autotest",
21
21
  ".rspec",
22
+ ".travis.yml",
22
23
  "CONTRIBUTORS",
23
24
  "Gemfile",
25
+ "Gemfile.lock",
24
26
  "LICENSE",
25
27
  "README.markdown",
26
28
  "Rakefile",
@@ -35,6 +37,7 @@ Gem::Specification.new do |s|
35
37
  "lib/fakefs/file_system.rb",
36
38
  "lib/fakefs/file_test.rb",
37
39
  "lib/fakefs/fileutils.rb",
40
+ "lib/fakefs/pathname.rb",
38
41
  "lib/fakefs/safe.rb",
39
42
  "lib/fakefs/spec_helpers.rb",
40
43
  "lib/fakefs/version.rb",
@@ -54,10 +57,10 @@ Gem::Specification.new do |s|
54
57
  "test/test_helper.rb",
55
58
  "test/verify.rb"
56
59
  ]
57
- s.homepage = %q{http://github.com/defunkt/fakefs}
60
+ s.homepage = "http://github.com/defunkt/fakefs"
58
61
  s.require_paths = ["lib"]
59
- s.rubygems_version = %q{1.6.2}
60
- s.summary = %q{A fake filesystem. Use it in your tests.}
62
+ s.rubygems_version = "1.8.24"
63
+ s.summary = "A fake filesystem. Use it in your tests."
61
64
 
62
65
  if s.respond_to? :specification_version then
63
66
  s.specification_version = 3
@@ -65,18 +68,15 @@ Gem::Specification.new do |s|
65
68
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
66
69
  s.add_development_dependency(%q<rspec>, [">= 0"])
67
70
  s.add_development_dependency(%q<jeweler>, [">= 0"])
68
- s.add_development_dependency(%q<sdoc-helpers>, [">= 0"])
69
71
  s.add_development_dependency(%q<rdiscount>, [">= 0"])
70
72
  else
71
73
  s.add_dependency(%q<rspec>, [">= 0"])
72
74
  s.add_dependency(%q<jeweler>, [">= 0"])
73
- s.add_dependency(%q<sdoc-helpers>, [">= 0"])
74
75
  s.add_dependency(%q<rdiscount>, [">= 0"])
75
76
  end
76
77
  else
77
78
  s.add_dependency(%q<rspec>, [">= 0"])
78
79
  s.add_dependency(%q<jeweler>, [">= 0"])
79
- s.add_dependency(%q<sdoc-helpers>, [">= 0"])
80
80
  s.add_dependency(%q<rdiscount>, [">= 0"])
81
81
  end
82
82
  end
@@ -2,44 +2,81 @@ RealFile = File
2
2
  RealFileTest = FileTest
3
3
  RealFileUtils = FileUtils
4
4
  RealDir = Dir
5
+ RealPathname = Pathname
5
6
 
6
7
  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)
8
+ @activated = false
9
+ class << self
10
+ def activated?
11
+ @activated
18
12
  end
19
- true
20
- end
21
13
 
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)
14
+ def activate!
15
+ @activated = true
16
+ Object.class_eval do
17
+ remove_const(:Dir)
18
+ remove_const(:File)
19
+ remove_const(:FileTest)
20
+ remove_const(:FileUtils)
21
+ remove_const(:Pathname) if RUBY_VERSION >= "1.9.3"
22
+
23
+ const_set(:Dir, FakeFS::Dir)
24
+ const_set(:File, FakeFS::File)
25
+ const_set(:FileUtils, FakeFS::FileUtils)
26
+ const_set(:FileTest, FakeFS::FileTest)
27
+ const_set(:Pathname, FakeFS::Pathname) if RUBY_VERSION >= "1.9.3"
28
+ end
29
+ true
30
+ end
31
+
32
+ def deactivate!
33
+ @activated = false
34
+
35
+ Object.class_eval do
36
+ remove_const(:Dir)
37
+ remove_const(:File)
38
+ remove_const(:FileTest)
39
+ remove_const(:FileUtils)
40
+ remove_const(:Pathname) if RUBY_VERSION >= "1.9.3"
41
+
42
+ const_set(:Dir, RealDir)
43
+ const_set(:File, RealFile)
44
+ const_set(:FileTest, RealFileTest)
45
+ const_set(:FileUtils, RealFileUtils)
46
+ const_set(:Pathname, RealPathname) if RUBY_VERSION >= "1.9.3"
47
+ end
48
+ true
49
+ end
50
+
51
+ def with
52
+ if activated?
53
+ yield
54
+ else
55
+ begin
56
+ activate!
57
+ yield
58
+ ensure
59
+ deactivate!
60
+ end
61
+ end
62
+ end
63
+
64
+ def without
65
+ if !activated?
66
+ yield
67
+ else
68
+ begin
69
+ deactivate!
70
+ yield
71
+ ensure
72
+ activate!
73
+ end
74
+ end
33
75
  end
34
- true
35
76
  end
36
77
  end
37
78
 
38
- def FakeFS
39
- return ::FakeFS unless block_given?
40
- ::FakeFS.activate!
41
- yield
42
- ensure
43
- ::FakeFS.deactivate!
79
+ def FakeFS(&block)
80
+ return ::FakeFS unless block
81
+ ::FakeFS.with(&block)
44
82
  end
45
-
@@ -12,7 +12,7 @@ module FakeFS
12
12
  @path = string
13
13
  @open = true
14
14
  @pointer = 0
15
- @contents = [ '.', '..', ] + FileSystem.find(@path).values
15
+ @contents = [ '.', '..', ] + FileSystem.find(@path).entries
16
16
  end
17
17
 
18
18
  def close
@@ -57,8 +57,8 @@ module FakeFS
57
57
  @contents[integer]
58
58
  end
59
59
 
60
- def self.[](pattern)
61
- glob(pattern)
60
+ def self.[](*pattern)
61
+ glob pattern
62
62
  end
63
63
 
64
64
  def self.exists?(path)
@@ -75,7 +75,7 @@ module FakeFS
75
75
 
76
76
  def self.delete(string)
77
77
  _check_for_valid_file(string)
78
- raise Errno::ENOTEMPTY, "Directory not empty - #{string}" unless FileSystem.find(string).values.empty?
78
+ raise Errno::ENOTEMPTY, "Directory not empty - #{string}" unless FileSystem.find(string).empty?
79
79
 
80
80
  FileSystem.delete(string)
81
81
  end
@@ -91,20 +91,27 @@ module FakeFS
91
91
  end
92
92
 
93
93
  def self.glob(pattern, &block)
94
- files = [FileSystem.find(pattern) || []].flatten.map(&:to_s).sort
95
- block_given? ? files.each { |file| block.call(file) } : files
96
- end
97
-
98
- def self.mkdir(string, integer = 0)
99
- parent = string.split('/')
100
- parent.pop
94
+ matches_for_pattern = lambda do |matcher|
95
+ [FileSystem.find(matcher) || []].flatten.map{|e|
96
+ Dir.pwd.match(%r[\A/?\z]) || !e.to_s.match(%r[\A#{Dir.pwd}/?]) ? e.to_s : e.to_s.match(%r[\A#{Dir.pwd}/?]).post_match}.sort
97
+ end
101
98
 
102
- joined_parent_path = parent.join
99
+ if pattern.is_a? Array
100
+ files = pattern.collect { |matcher| matches_for_pattern.call matcher }.flatten
101
+ else
102
+ files = matches_for_pattern.call pattern
103
+ end
104
+ return block_given? ? files.each { |file| block.call(file) } : files
105
+ end
103
106
 
104
- _check_for_valid_file(joined_parent_path) unless joined_parent_path == ""
105
- raise Errno::EEXIST, "File exists - #{string}" if File.exists?(string)
107
+ if RUBY_VERSION >= "1.9"
108
+ def self.home(user = nil)
109
+ RealDir.home(user)
110
+ end
111
+ end
106
112
 
107
- FileUtils.mkdir_p(string)
113
+ def self.mkdir(string, integer = 0)
114
+ FileUtils.mkdir(string)
108
115
  end
109
116
 
110
117
  def self.open(string, &block)