files 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in files.gemspec
4
+ gemspec
5
+
6
+ group :development do
7
+ gem "rake"
8
+ gem "wrong"
9
+ end
data/README.md ADDED
@@ -0,0 +1,35 @@
1
+ # Files
2
+
3
+ *a simple DSL for creating files and directories*
4
+
5
+ ## Usage
6
+
7
+ require "files"
8
+
9
+ files = Files.create do # creates a temporary directory inside Dir.tmpdir
10
+ file "hello.txt" # creates file "hello.txt" containing "contents of hello.txt"
11
+ dir "web" do # creates directory "web"
12
+ file "snippet.html", # creates file "web/snippet.html"...
13
+ "<h1>Fix this!</h1>" # ...containing "<h1>Fix this!</h1>"
14
+ dir "img" do # creates directory "web/img"
15
+ file File.new("data/hello.png") # containing a copy of hello.png
16
+ file "hi.png", File.new("data/hello.png") # and a copy of hello.png named hi.png
17
+ end
18
+ end
19
+ end # returns a string with the path to the directory
20
+
21
+ ## Details
22
+
23
+ * the directory will be removed at exit
24
+ * unless you pass `:remove => false` to `Files.new`
25
+
26
+ ## TODO
27
+
28
+ * :path option -- specifying the location of the temporary dir (default: Dir.tmpdir)
29
+ * take a hash
30
+ * take a YAML file or string
31
+ * emit a hash
32
+ * emit a YAML file or string
33
+ * symlinks (?)
34
+ * specify file mode
35
+ * copy an entire data dir
data/Rakefile ADDED
@@ -0,0 +1,7 @@
1
+ require "bundler/gem_tasks"
2
+ here = File.dirname __FILE__
3
+
4
+ task :default => :test
5
+ task :test do
6
+ require "#{here}/test/files_test"
7
+ end
data/files.gemspec ADDED
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "files/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "files"
7
+ s.version = Files::VERSION
8
+ s.authors = ["Alex Chaffee"]
9
+ s.email = ["alex@stinky.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{a simple DSL for creating files and directories}
12
+ s.description = %q{Sometimes you want to create a whole bunch of files at once, like when you're testing a tool that processes a whole bunch of files. The Files gem lets you cleanly specify those files and their contents inside your test code, instead of making you create a fixture directory and check it in to your repo. It puts them in a temporary directory and cleans up when your test is done.}
13
+
14
+ s.rubyforge_project = "files"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ # specify any dependencies here; for example:
22
+ # s.add_development_dependency "rspec"
23
+ # s.add_runtime_dependency "rest-client"
24
+ end
data/lib/files.rb ADDED
@@ -0,0 +1,58 @@
1
+ require "files/version"
2
+
3
+
4
+ module Files
5
+ def self.create options = {:remove => true}, &block
6
+ require 'tmpdir'
7
+ require 'fileutils'
8
+
9
+ called_from = File.basename caller.first.split(':').first, ".rb"
10
+ path = File.join(Dir::tmpdir, "#{called_from}_#{Time.now.to_i}_#{rand(1000)}")
11
+
12
+ files = Files.new path, block, options
13
+
14
+ files.root
15
+ end
16
+
17
+ class Files
18
+
19
+ attr_reader :root
20
+
21
+ def initialize path, block, options
22
+ @root = path
23
+ @dirs = [path]
24
+
25
+ Dir.mkdir(path)
26
+ at_exit {FileUtils.rm_rf(path) if File.exists?(path)} if options[:remove]
27
+
28
+ instance_eval &block
29
+ end
30
+
31
+ def dir name, &block
32
+ Dir.mkdir "#{current}/#{name}"
33
+ @dirs << name
34
+ instance_eval &block
35
+ end
36
+
37
+ def file name, contents = "contents of #{name}"
38
+ if name.is_a? File
39
+ FileUtils.cp name.path, current
40
+ else
41
+ path = "#{current}/#{name}"
42
+ if contents.is_a? File
43
+ FileUtils.cp contents.path, path
44
+ else
45
+ File.open(path, "w") do |f|
46
+ f.write contents
47
+ end
48
+ end
49
+ end
50
+ end
51
+
52
+ private
53
+ def current
54
+ @dirs.join('/')
55
+ end
56
+
57
+ end
58
+ end
@@ -0,0 +1,3 @@
1
+ module Files
2
+ VERSION = "0.0.1"
3
+ end
Binary file
@@ -0,0 +1,30 @@
1
+ require "wrong"
2
+ include Wrong
3
+
4
+ here = File.dirname __FILE__
5
+ $LOAD_PATH.unshift File.join(here, '..', 'lib')
6
+ require "files"
7
+
8
+ dir = Files.create do # creates a temporary directory inside Dir.tmpdir
9
+ file "hello.txt" # creates file "hello.txt" containing "contents of hello.txt"
10
+ dir "web" do # creates directory "web"
11
+ file "snippet.html", # creates file "web/snippet.html"...
12
+ "<h1>File under F for fantastic!</h1>" # ...containing "<h1>File under F for fantastic!</h1>"
13
+ dir "img" do # creates directory "web/img"
14
+ file File.new("#{here}/data/cheez_doing_it_wrong.jpg") # containing a copy of cheez_doing_it_wrong.jpg
15
+ file "other.jpg", # and a different named file...
16
+ File.new("#{here}/data/cheez_doing_it_wrong.jpg") # containing the content of cheez_doing_it_wrong.jpg
17
+ end
18
+ end
19
+ end
20
+
21
+ assert { File.read("#{dir}/hello.txt") == "contents of hello.txt" }
22
+ assert { File.read("#{dir}/web/snippet.html") == "<h1>File under F for fantastic!</h1>" }
23
+ assert {
24
+ File.read("#{dir}/web/img/cheez_doing_it_wrong.jpg") ==
25
+ File.read("#{here}/data/cheez_doing_it_wrong.jpg")
26
+ }
27
+ assert {
28
+ File.read("#{dir}/web/img/other.jpg") ==
29
+ File.read("#{here}/data/cheez_doing_it_wrong.jpg")
30
+ }
metadata ADDED
@@ -0,0 +1,66 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: files
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Alex Chaffee
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-01-13 00:00:00.000000000Z
13
+ dependencies: []
14
+ description: Sometimes you want to create a whole bunch of files at once, like when
15
+ you're testing a tool that processes a whole bunch of files. The Files gem lets
16
+ you cleanly specify those files and their contents inside your test code, instead
17
+ of making you create a fixture directory and check it in to your repo. It puts them
18
+ in a temporary directory and cleans up when your test is done.
19
+ email:
20
+ - alex@stinky.com
21
+ executables: []
22
+ extensions: []
23
+ extra_rdoc_files: []
24
+ files:
25
+ - .gitignore
26
+ - Gemfile
27
+ - README.md
28
+ - Rakefile
29
+ - files.gemspec
30
+ - lib/files.rb
31
+ - lib/files/version.rb
32
+ - test/data/cheez_doing_it_wrong.jpg
33
+ - test/files_test.rb
34
+ homepage: ''
35
+ licenses: []
36
+ post_install_message:
37
+ rdoc_options: []
38
+ require_paths:
39
+ - lib
40
+ required_ruby_version: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ segments:
47
+ - 0
48
+ hash: -2492696661746365680
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ segments:
56
+ - 0
57
+ hash: -2492696661746365680
58
+ requirements: []
59
+ rubyforge_project: files
60
+ rubygems_version: 1.8.10
61
+ signing_key:
62
+ specification_version: 3
63
+ summary: a simple DSL for creating files and directories
64
+ test_files:
65
+ - test/data/cheez_doing_it_wrong.jpg
66
+ - test/files_test.rb