file_sandbox 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.
data/CHANGES ADDED
@@ -0,0 +1,6 @@
1
+ = Change Log
2
+
3
+ == Version 0.1
4
+
5
+ Initial version release.
6
+
data/README ADDED
@@ -0,0 +1,37 @@
1
+ = Project: File Sandbox
2
+
3
+ == Description
4
+
5
+ File sandbox creates a space for your tests to safely hit the file system. It also makes it easier for them to do so.
6
+
7
+ == Usage
8
+
9
+ require 'test/unit'
10
+ require_gem 'file_sandbox'
11
+
12
+ class MyFileTest < Test::Unit::TestCase
13
+ include FileSandbox
14
+
15
+ def test_read
16
+ in_sandbox do |sandbox|
17
+ sandbox.new :file => 'b/a.txt', :with_contents => 'some stuff'
18
+
19
+ assert_equal 'some_stuff', File.read(sandbox.root + '/b/a.txt')
20
+ end
21
+ end
22
+ end
23
+
24
+
25
+ == Features
26
+
27
+ * Create a file
28
+
29
+ sandbox.new :file => 'b/a.txt', :with_contents => 'some stuff'
30
+
31
+
32
+ == Contact
33
+
34
+ Author:: Jeremy Stell-Smith
35
+ Email:: jeremystellsmith@gmail.com
36
+ Home Page:: http://onemanswalk.com
37
+ License:: LGPL License
data/Rakefile ADDED
@@ -0,0 +1,112 @@
1
+ require 'rake/clean'
2
+ require 'rake/testtask'
3
+ require 'rake/rdoctask'
4
+
5
+ begin
6
+ require 'rubygems'
7
+ require 'rake/gempackagetask'
8
+ require 'rake/gempackagetask'
9
+ require 'rake/contrib/rubyforgepublisher'
10
+ rescue
11
+ puts "caught error : #{$!}"
12
+ nil
13
+ end
14
+
15
+ PKG_NAME = 'file_sandbox'
16
+ PKG_VERSION = '0.1'
17
+ PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
18
+
19
+ RELEASE_NAME = "REL #{PKG_VERSION}"
20
+
21
+ RUBY_FORGE_PROJECT = "filesandbox"
22
+ RUBY_FORGE_USER = "stellsmi"
23
+ # RUBY_FORGE_GROUP = 2944
24
+ # RUBY_FORGE_PACKAGE = 3495
25
+
26
+ SRC_RB = FileList['lib/**/*.rb']
27
+
28
+ desc "Default Task"
29
+ task :default => :test
30
+
31
+ #################################################
32
+ # Test
33
+
34
+ desc "Run all tests"
35
+ task :test => [:test_units]
36
+
37
+ Rake::TestTask.new("test_units") do |t|
38
+ t.test_files = FileList['test/**/*test.rb']
39
+ t.verbose = false
40
+ end
41
+
42
+ #################################################
43
+ # RDoc
44
+
45
+ rd = Rake::RDocTask.new("rdoc") { |rdoc|
46
+ rdoc.rdoc_dir = 'html'
47
+ rdoc.title = "File Sandbox"
48
+ rdoc.options << '--line-numbers' << '--inline-source' << '--main' << 'README'
49
+ rdoc.rdoc_files.include('lib/**/*.rb', '[A-Z]*', 'doc/**/*.rdoc')
50
+ # rdoc.template = 'doc/jamis.rb'
51
+ }
52
+
53
+ #################################################
54
+ # Package
55
+
56
+ PKG_FILES = FileList[
57
+ 'CHANGES', 'Rakefile', 'README', 'lib/**/*.rb', 'test/**/*.rb',
58
+ ]
59
+
60
+ spec = Gem::Specification.new do |s|
61
+ s.name = PKG_NAME
62
+ s.summary = "A File Sandbox for testing against the file system."
63
+ s.description = <<-EOS
64
+ File sandbox creates a space for your tests to safely hit the file system.
65
+ It also makes it easier for them to do so..
66
+ EOS
67
+ s.version = PKG_VERSION
68
+
69
+ s.files = PKG_FILES.to_a
70
+ s.require_path = 'lib'
71
+ s.autorequire = 'file_sandbox'
72
+ s.test_files = PKG_FILES.select { |fn| fn =~ /^test\/.*_test.rb$/ }
73
+
74
+ s.has_rdoc = true
75
+ s.extra_rdoc_files = rd.rdoc_files.reject { |fn| fn =~ /\.rb$/ }.to_a
76
+ s.rdoc_options <<
77
+ '--title' << 'Builder -- Easy XML Building' <<
78
+ '--main' << 'README' <<
79
+ '--line-numbers'
80
+
81
+ s.author = "Jeremy Stell-Smith"
82
+ s.email = "jeremystellsmith@gmail.com"
83
+ s.rubyforge_project = RUBY_FORGE_PROJECT
84
+ s.homepage = "http://rubyforge.org/projects/#{RUBY_FORGE_PROJECT}"
85
+ end
86
+
87
+ Rake::GemPackageTask.new(spec) do |p|
88
+ p.gem_spec = spec
89
+ p.need_tar = true
90
+ p.need_zip = true
91
+ end
92
+
93
+ ################################################
94
+ # release
95
+
96
+ task :release => [:test, :package, :upload_release]
97
+
98
+ task :upload_release do
99
+ require 'rubyforge'
100
+
101
+ # puts "Enter rubyforge password:"
102
+ # rubyforge = RubyForge.new(File.dirname(__FILE__) + "/config/rubyforge.yml",
103
+ # :cookie_jar => RubyForge::COOKIE_F, :password => $stdin.gets.strip)
104
+ rubyforge = RubyForge.new
105
+ p rubyforge.class.instance_methods(false).sort
106
+ rubyforge.login
107
+ rubyforge.autoconfig
108
+
109
+ files = %w(gem tgz zip).collect {|ext| "pkg/#{PKG_FILE_NAME}.#{ext}"}
110
+ puts "Releasing #{files.collect{|f| File.basename(f)}.join(", ")}..."
111
+ rubyforge.add_release(RUBY_FORGE_PROJECT, PKG_NAME, PKG_VERSION, *files)
112
+ end
@@ -0,0 +1,106 @@
1
+ require 'ftools'
2
+ require 'fileutils'
3
+ require 'test/unit/assertions'
4
+
5
+ module FileSandbox
6
+ def in_sandbox(&block)
7
+ raise "I expected to create a sandbox as you passed in a block to me" if !block_given?
8
+
9
+ setup_sandbox
10
+ original_error = nil
11
+
12
+ begin
13
+ Dir.chdir(@sandbox.root) do
14
+ yield @sandbox
15
+ end
16
+ rescue => e
17
+ original_error = e
18
+ raise
19
+ ensure
20
+ begin
21
+ teardown_sandbox
22
+ rescue
23
+ if original_error
24
+ STDERR.puts "ALERT: a test raised an error and failed to release some lock(s) in the sandbox directory"
25
+ raise(original_error)
26
+ else
27
+ raise
28
+ end
29
+ end
30
+ end
31
+ end
32
+
33
+ def setup_sandbox
34
+ @sandbox = Sandbox.new
35
+ end
36
+
37
+ def teardown_sandbox
38
+ @sandbox.clean_up
39
+ @sandbox = nil
40
+ end
41
+
42
+ def file(name)
43
+ SandboxFile.new(File.join(@sandbox.root, name))
44
+ end
45
+
46
+ class Sandbox
47
+ include Test::Unit::Assertions
48
+ attr_reader :root
49
+
50
+ def initialize
51
+ @root = File.expand_path("__sandbox")
52
+ clean_up
53
+ FileUtils.mkdir_p @root
54
+ end
55
+
56
+ # usage new :file=>'my file.rb', :with_contents=>'some stuff'
57
+ def new(options)
58
+ name = File.join(@root, options[:file])
59
+ dir = File.dirname(name)
60
+ FileUtils.mkdir_p dir
61
+
62
+ if (binary_content = options[:with_binary_content] || options[:with_binary_contents])
63
+ File.open(name, "wb") {|f| f << binary_content }
64
+ else
65
+ File.open(name, "w") {|f| f << (options[:with_content] || options[:with_contents] || '')}
66
+ end
67
+ end
68
+
69
+ # usage assert :file=>'my file.rb', :has_contents=>'some stuff'
70
+ def assert(options)
71
+ name = File.join(@root, options[:file])
72
+ if (expected_content = options[:has_content] || options[:has_contents])
73
+ assert_equal(expected_content, File.read(name))
74
+ else
75
+ fail('expected something to assert')
76
+ end
77
+ end
78
+
79
+ def clean_up
80
+ FileUtils.rm_rf @root
81
+ if File.exists? @root
82
+ raise "Could not remove directory #{@root.inspect}, something is probably still holding a lock on it"
83
+ end
84
+ end
85
+ end
86
+
87
+ class SandboxFile
88
+ attr_reader :name
89
+
90
+ def initialize(name)
91
+ @name = name
92
+ end
93
+
94
+ def exist?
95
+ File.exist? name
96
+ end
97
+
98
+ alias exists? exist?
99
+
100
+ def content
101
+ File.read name
102
+ end
103
+
104
+ alias contents content
105
+ end
106
+ end
@@ -0,0 +1,36 @@
1
+ require 'test/unit'
2
+ require File.expand_path(File.dirname(__FILE__) + '/../lib/file_sandbox')
3
+
4
+ class FileSandboxTest < Test::Unit::TestCase
5
+ include FileSandbox
6
+
7
+ def test_sandbox_cleans_up_file
8
+ in_sandbox do |sandbox|
9
+ name = sandbox.root + "/a.txt"
10
+
11
+ File.open(name, "w") {|f| f << "something"}
12
+
13
+ assert File.exist?(name)
14
+ end
15
+ assert !File.exist?(name)
16
+ end
17
+
18
+ def test_file_exist
19
+ in_sandbox do |sandbox|
20
+ assert !file('a.txt').exists?
21
+ File.open(sandbox.root + "/a.txt", "w") {|f| f << "something"}
22
+ assert file('a.txt').exist?
23
+ end
24
+ end
25
+
26
+ def test_create_file
27
+ in_sandbox do |sandbox|
28
+ assert !file('a.txt').exists?
29
+
30
+ sandbox.new :file => 'a.txt'
31
+
32
+ assert file('a.txt').exist?
33
+ end
34
+ end
35
+ end
36
+
metadata ADDED
@@ -0,0 +1,56 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.9.1
3
+ specification_version: 1
4
+ name: file_sandbox
5
+ version: !ruby/object:Gem::Version
6
+ version: "0.1"
7
+ date: 2007-02-08 00:00:00 -08:00
8
+ summary: A File Sandbox for testing against the file system.
9
+ require_paths:
10
+ - lib
11
+ email: jeremystellsmith@gmail.com
12
+ homepage: http://rubyforge.org/projects/filesandbox
13
+ rubyforge_project: filesandbox
14
+ description: File sandbox creates a space for your tests to safely hit the file system. It also makes it easier for them to do so..
15
+ autorequire: file_sandbox
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: true
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
24
+ version:
25
+ platform: ruby
26
+ signing_key:
27
+ cert_chain:
28
+ post_install_message:
29
+ authors:
30
+ - Jeremy Stell-Smith
31
+ files:
32
+ - CHANGES
33
+ - Rakefile
34
+ - README
35
+ - lib/file_sandbox.rb
36
+ - test/file_sandbox_test.rb
37
+ test_files:
38
+ - test/file_sandbox_test.rb
39
+ rdoc_options:
40
+ - --title
41
+ - Builder -- Easy XML Building
42
+ - --main
43
+ - README
44
+ - --line-numbers
45
+ extra_rdoc_files:
46
+ - CHANGES
47
+ - Rakefile
48
+ - README
49
+ executables: []
50
+
51
+ extensions: []
52
+
53
+ requirements: []
54
+
55
+ dependencies: []
56
+