files 0.2.1 → 0.3.0
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/.gitignore +1 -0
- data/Gemfile +2 -2
- data/README.md +14 -4
- data/Rakefile +1 -1
- data/lib/files.rb +33 -10
- data/lib/files/version.rb +1 -1
- data/test/files_test.rb +36 -9
- metadata +5 -5
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -22,7 +22,7 @@ The mixin mode is a fairly clean API, suitable for use in unit tests. After `inc
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
-
files.root # returns the path to the temporary directory, creating it if necessary
|
25
|
+
@files.root # returns the path to the temporary directory, creating it if necessary
|
26
26
|
|
27
27
|
## Usage (bare function mode)
|
28
28
|
|
@@ -42,6 +42,13 @@ In bare function mode, you call the `Files` method, which doesn't pollute the cu
|
|
42
42
|
end
|
43
43
|
end # "Files" returns a string with the path to the directory
|
44
44
|
|
45
|
+
src = '/path/to/some/data' # use '/path/to/some/data/.' to only copy contents of data folder, not data folder itself.
|
46
|
+
|
47
|
+
# creates a folder called 'target/$timestamp' relative to pwd
|
48
|
+
dir = Files.create :path => "target" do
|
49
|
+
dir "foo", :src => src do # creates 'target/$timestamp/foo', and copies src into foo [but should it copy the dir or the contents?]
|
50
|
+
end
|
51
|
+
end
|
45
52
|
|
46
53
|
see `test/files_test.rb` for more usage examples
|
47
54
|
|
@@ -53,14 +60,13 @@ see `test/files_test.rb` for more usage examples
|
|
53
60
|
* if the first argument to `file` is a String, then a new file is made
|
54
61
|
* the content of the new file is either a short, descriptive message, or whatever you passed as the second argument
|
55
62
|
* if the argument to `file` is a Ruby `File` object, then it copies the named file into the new location
|
63
|
+
* To copy another directory to one created by this module, specifying `:src` to `dir` method
|
64
|
+
* [Not sure if this is implemented right... should it copy the *dir* or its *contents*?]
|
56
65
|
|
57
66
|
## TODO
|
58
67
|
|
59
|
-
* test under Windows
|
60
|
-
* :path option -- specifying the parent of the temporary dir (default: Dir.tmpdir)
|
61
68
|
* take a hash or a YAML file or YAML string to specify the directory layout and contents
|
62
69
|
* emit a hash or a YAML file or string to serialize the directory layout and contents for later
|
63
|
-
* copy an entire data dir
|
64
70
|
* support symlinks (?)
|
65
71
|
* specify file write mode (?)
|
66
72
|
* play nice with FakeFS (possibly with a :fake option)
|
@@ -70,6 +76,10 @@ see `test/files_test.rb` for more usage examples
|
|
70
76
|
|
71
77
|
Written by Alex Chaffee <http://alexchaffee.com> <mailto:alex@stinky.com> <http://github.com/alexch> [@alexch](http://twitter.com/alexch)
|
72
78
|
|
79
|
+
Patches by
|
80
|
+
|
81
|
+
* [Seth Call](http://github.com/sethcall)
|
82
|
+
|
73
83
|
## License [MIT]
|
74
84
|
|
75
85
|
Copyright (C) 2012 Alex Chaffee
|
data/Rakefile
CHANGED
data/lib/files.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require "files/version"
|
2
2
|
|
3
|
-
module Files
|
3
|
+
module Files
|
4
4
|
|
5
5
|
# class methods
|
6
6
|
|
@@ -9,7 +9,9 @@ module Files
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def self.called_from level = 1
|
12
|
-
|
12
|
+
line = caller[level]
|
13
|
+
line.gsub!(/^.:/, '') # correct for leading Windows C:
|
14
|
+
File.basename line.split(':').first, ".rb"
|
13
15
|
end
|
14
16
|
|
15
17
|
def self.create options = default_options, &block
|
@@ -17,8 +19,19 @@ module Files
|
|
17
19
|
require 'fileutils'
|
18
20
|
|
19
21
|
name = options[:name]
|
20
|
-
|
22
|
+
root = Dir::tmpdir
|
21
23
|
|
24
|
+
# if the user specified a root directory (instead of default Dir.tmpdir)
|
25
|
+
if options[:path]
|
26
|
+
# then we will create their directory for them (test context-be friendly)
|
27
|
+
root = options[:path]
|
28
|
+
FileUtils::mkdir_p(root)
|
29
|
+
# if they gave relative path, this forces absolute
|
30
|
+
root = File.expand_path(root)
|
31
|
+
end
|
32
|
+
|
33
|
+
path = File.join(root, "#{name}_#{Time.now.to_i}_#{rand(1000)}")
|
34
|
+
d{path}
|
22
35
|
Files.new path, block, options
|
23
36
|
end
|
24
37
|
|
@@ -43,15 +56,25 @@ module Files
|
|
43
56
|
def initialize path, block, options
|
44
57
|
@root = path
|
45
58
|
@dirs = []
|
46
|
-
dir
|
47
|
-
@dirs = [path]
|
59
|
+
dir nil, &block
|
48
60
|
at_exit {remove} if options[:remove]
|
49
61
|
end
|
50
62
|
|
51
|
-
|
52
|
-
|
63
|
+
# only 1 option supported: 'src'. if specified, is copied into 'name'
|
64
|
+
def dir name, options={}, &block
|
65
|
+
if name.nil?
|
66
|
+
path = current
|
67
|
+
else
|
68
|
+
path = File.join(current, name)
|
69
|
+
end
|
53
70
|
Dir.mkdir path
|
54
|
-
@dirs << name
|
71
|
+
@dirs << name if name
|
72
|
+
|
73
|
+
if options[:src]
|
74
|
+
# copy over remote dir to this one
|
75
|
+
FileUtils.cp_r(options[:src], path)
|
76
|
+
end
|
77
|
+
|
55
78
|
Dir.chdir(path) do
|
56
79
|
instance_eval &block if block
|
57
80
|
end
|
@@ -64,7 +87,7 @@ module Files
|
|
64
87
|
FileUtils.cp name.path, current
|
65
88
|
# todo: return path
|
66
89
|
else
|
67
|
-
path =
|
90
|
+
path = File.join(current, name)
|
68
91
|
if contents.is_a? File
|
69
92
|
FileUtils.cp contents.path, path
|
70
93
|
else
|
@@ -82,7 +105,7 @@ module Files
|
|
82
105
|
|
83
106
|
private
|
84
107
|
def current
|
85
|
-
@dirs
|
108
|
+
File.join @root, *@dirs
|
86
109
|
end
|
87
110
|
|
88
111
|
end
|
data/lib/files/version.rb
CHANGED
data/test/files_test.rb
CHANGED
@@ -1,7 +1,16 @@
|
|
1
1
|
require "wrong"
|
2
2
|
include Wrong
|
3
3
|
|
4
|
-
|
4
|
+
def windows?
|
5
|
+
require 'rbconfig'
|
6
|
+
RbConfig::CONFIG["host_os"] =~
|
7
|
+
%r!(msdos|mswin|djgpp|mingw|[Ww]indows)!
|
8
|
+
end
|
9
|
+
|
10
|
+
Wrong.config.verbose
|
11
|
+
Wrong.config.color unless windows?
|
12
|
+
|
13
|
+
here = File.expand_path(File.dirname __FILE__)
|
5
14
|
$LOAD_PATH.unshift File.join(here, '..', 'lib')
|
6
15
|
require "files"
|
7
16
|
|
@@ -29,11 +38,11 @@ assert { dir =~ /^#{Dir::tmpdir}/}
|
|
29
38
|
|
30
39
|
assert { File.read("#{dir}/hello.txt") == "contents of hello.txt" }
|
31
40
|
assert { File.read("#{dir}/web/snippet.html") == "<h1>File under F for fantastic!</h1>" }
|
32
|
-
assert {
|
41
|
+
assert {
|
33
42
|
File.read("#{dir}/web/img/cheez_doing_it_wrong.jpg") ==
|
34
43
|
File.read("#{here}/data/cheez_doing_it_wrong.jpg")
|
35
44
|
}
|
36
|
-
assert {
|
45
|
+
assert {
|
37
46
|
File.read("#{dir}/web/img/other.jpg") ==
|
38
47
|
File.read("#{here}/data/cheez_doing_it_wrong.jpg")
|
39
48
|
}
|
@@ -55,10 +64,8 @@ assert { File.read("#{dir}/hello.txt") == "contents of hello.txt" }
|
|
55
64
|
assert { File.read("#{dir}/web/hello.html") == "contents of hello.html" }
|
56
65
|
assert { dir.split('/').last =~ /^files_test/ }
|
57
66
|
|
58
|
-
|
59
67
|
assert { Files.called_from(0) == "files_test" }
|
60
68
|
|
61
|
-
|
62
69
|
dir = Files do
|
63
70
|
dir "foo" do
|
64
71
|
file "foo.txt"
|
@@ -79,6 +86,18 @@ assert { File.read("#{dir}/bar/bar.txt") == "contents of bar.txt" }
|
|
79
86
|
assert { File.read("#{dir}/bar/baz/baz.txt") == "contents of baz.txt" }
|
80
87
|
assert { File.read("#{dir}/bar/baf/baf.txt") == "contents of baf.txt" }
|
81
88
|
|
89
|
+
# test for data directory copy
|
90
|
+
src = File.expand_path("#{here}/data")
|
91
|
+
|
92
|
+
files = Files.create do
|
93
|
+
dir "foo", :src => src do
|
94
|
+
# note: I'm not sure if this is desired behavior...
|
95
|
+
# shouldn't it put the *contents* of data into foo?
|
96
|
+
assert { File.exist?(File.join(Dir.pwd, 'data/cheez_doing_it_wrong.jpg'))}
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
# todo: test :target option
|
82
101
|
|
83
102
|
dir = Files()
|
84
103
|
assert { File.exist? dir and File.directory? dir}
|
@@ -130,15 +149,23 @@ class FilesMixinTest
|
|
130
149
|
assert("the current directory is set inside a nested dir block") { File.read("sub.txt") == "contents of sub.txt" }
|
131
150
|
end
|
132
151
|
end
|
133
|
-
assert("a file created inside the dir block exists under the root dir") {
|
134
|
-
File.read("#{@files.root}/bar/bar.txt") == "contents of bar.txt"
|
152
|
+
assert("a file created inside the dir block exists under the root dir") {
|
153
|
+
File.read("#{@files.root}/bar/bar.txt") == "contents of bar.txt"
|
135
154
|
}
|
136
|
-
|
155
|
+
|
137
156
|
subdir = dir "baz"
|
138
157
|
assert("the dir method creates the dir") { File.exist?("#{@files.root}/baz")}
|
139
158
|
assert("the dir method returns the created dir") { subdir == "#{@files.root}/baz"}
|
140
159
|
assert { File.directory?("#{@files.root}/baz")}
|
141
|
-
|
160
|
+
|
161
|
+
# this behavior is kind of a bug
|
162
|
+
begin
|
163
|
+
@content = "breakfast"
|
164
|
+
dir "stuff" do
|
165
|
+
assert("instance variables are *not* preserved in a dir block") { @content.nil? }
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
142
169
|
end
|
143
170
|
end
|
144
171
|
FilesMixinTest.new.go
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: files
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-09-13 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Ever want to create a whole bunch of files at once? Like when you're
|
15
15
|
writing tests for a tool that processes files? The Files gem lets you cleanly specify
|
@@ -45,7 +45,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
45
45
|
version: '0'
|
46
46
|
segments:
|
47
47
|
- 0
|
48
|
-
hash: -
|
48
|
+
hash: -3557681526261230673
|
49
49
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
@@ -54,10 +54,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
54
54
|
version: '0'
|
55
55
|
segments:
|
56
56
|
- 0
|
57
|
-
hash: -
|
57
|
+
hash: -3557681526261230673
|
58
58
|
requirements: []
|
59
59
|
rubyforge_project: files
|
60
|
-
rubygems_version: 1.8.
|
60
|
+
rubygems_version: 1.8.24
|
61
61
|
signing_key:
|
62
62
|
specification_version: 3
|
63
63
|
summary: a simple DSL for creating temporary files and directories
|