fast 0.0.1 → 0.0.2
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/fast.gemspec +3 -0
- data/lib/fast.rb +4 -4
- data/lib/fast/dir.rb +16 -0
- data/lib/fast/file.rb +25 -2
- data/lib/fast/version.rb +1 -1
- data/spec/fast/dir_spec.rb +35 -0
- data/spec/fast/file_spec.rb +178 -0
- metadata +29 -2
data/fast.gemspec
CHANGED
@@ -15,6 +15,9 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.rubyforge_project = "fast"
|
16
16
|
|
17
17
|
s.add_dependency "metafun"
|
18
|
+
|
19
|
+
s.add_development_dependency "rspec"
|
20
|
+
s.add_development_dependency "zucker"
|
18
21
|
|
19
22
|
s.files = `git ls-files`.split("\n")
|
20
23
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
data/lib/fast.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require "metafun/delegator"
|
2
2
|
|
3
3
|
require "fast/file"
|
4
|
+
require "fast/dir"
|
4
5
|
|
5
6
|
module Fast
|
6
7
|
# Returns the list of entries in the directory
|
@@ -13,7 +14,7 @@ module Fast
|
|
13
14
|
if options
|
14
15
|
if options[:extension]
|
15
16
|
filtered = []
|
16
|
-
Dir.entries(path).each do |entry|
|
17
|
+
::Dir.entries(path).each do |entry|
|
17
18
|
if entry.end_with? ".#{options[:extension]}"
|
18
19
|
if options[:strip_extension]
|
19
20
|
filtered << entry[0..-("#{options[:extension]}".length)-2]
|
@@ -25,7 +26,7 @@ module Fast
|
|
25
26
|
return filtered
|
26
27
|
end
|
27
28
|
else
|
28
|
-
Dir.entries path
|
29
|
+
::Dir.entries path
|
29
30
|
end
|
30
31
|
end
|
31
32
|
|
@@ -51,10 +52,9 @@ module Fast
|
|
51
52
|
def self.mkdir path
|
52
53
|
path.split("/").each do |part|
|
53
54
|
route ||= part
|
54
|
-
Dir.mkdir route unless route == "" || ::File.directory?( route )
|
55
|
+
::Dir.mkdir route unless route == "" || ::File.directory?( route )
|
55
56
|
route += "/#{path}"
|
56
57
|
end
|
57
|
-
# Dir.mkdir path # It seems this was redundant
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
data/lib/fast/dir.rb
ADDED
data/lib/fast/file.rb
CHANGED
@@ -2,21 +2,39 @@ module Fast
|
|
2
2
|
# File handling class.
|
3
3
|
class File
|
4
4
|
# Appends the passed content to the file `path`
|
5
|
+
# Creates the file if it doesn't exist.
|
6
|
+
# Creates all the necesary folders if they don't exist
|
5
7
|
def append path, content
|
6
|
-
|
8
|
+
@path = normalize path
|
9
|
+
Fast.dir! ::File.dirname @path if ::File.dirname(@path) != "."
|
10
|
+
::File.open @path, "a" do |handler|
|
7
11
|
handler.write content
|
8
12
|
end
|
13
|
+
@path
|
9
14
|
end
|
10
15
|
|
11
16
|
# Deletes the file (wrapper for `File.unlink <path>`)
|
12
17
|
def delete path
|
13
|
-
|
18
|
+
@path = normalize path
|
19
|
+
::File.unlink @path
|
20
|
+
@path
|
14
21
|
end
|
15
22
|
|
16
23
|
alias :destroy :delete
|
17
24
|
alias :unlink :delete
|
18
25
|
alias :del :delete
|
19
26
|
|
27
|
+
# Touches the file passed. Like bash `touch`, but creates
|
28
|
+
# all required directories if they don't exist
|
29
|
+
def touch path
|
30
|
+
@path = normalize path
|
31
|
+
Fast.dir! ::File.dirname @path if ::File.dirname(@path) != "."
|
32
|
+
::File.open @path, "a+" do |file|
|
33
|
+
file.gets; file.write ""
|
34
|
+
end
|
35
|
+
@path
|
36
|
+
end
|
37
|
+
|
20
38
|
def self.call *args
|
21
39
|
if args.empty?
|
22
40
|
File.new
|
@@ -24,5 +42,10 @@ module Fast
|
|
24
42
|
::File.read args.shift
|
25
43
|
end
|
26
44
|
end
|
45
|
+
|
46
|
+
private
|
47
|
+
def normalize path
|
48
|
+
"#{path}"
|
49
|
+
end
|
27
50
|
end
|
28
51
|
end
|
data/lib/fast/version.rb
CHANGED
@@ -0,0 +1,35 @@
|
|
1
|
+
require "fast"
|
2
|
+
|
3
|
+
describe Fast::Dir do
|
4
|
+
describe "#list" do
|
5
|
+
it "should return a list of all items in the directory"
|
6
|
+
end
|
7
|
+
|
8
|
+
describe "#files" do
|
9
|
+
it "should return a list of all files in the directory"
|
10
|
+
|
11
|
+
context "args :extension => 'txt'" do
|
12
|
+
it "should return a list of all files with .txt as extension in the directory"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "#dirs" do
|
17
|
+
it "should return a list containing all dirs in the directory"
|
18
|
+
|
19
|
+
context "args :skip => :dots" do
|
20
|
+
it "should return a list of dirs excluding '.' and '..'"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "#create" do
|
25
|
+
context "is a simple path" do
|
26
|
+
it "should create the dir"
|
27
|
+
|
28
|
+
it "should return the directory path"
|
29
|
+
end
|
30
|
+
|
31
|
+
context "it is nested within dirs" do
|
32
|
+
it "should create the directory tree"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,178 @@
|
|
1
|
+
require "fast"
|
2
|
+
require "zucker/os"
|
3
|
+
|
4
|
+
# Just in case, delete the demo.txt
|
5
|
+
::File.unlink "demo.txt" if ::File.exist? "demo.txt"
|
6
|
+
|
7
|
+
describe Fast::File do
|
8
|
+
describe "#append" do
|
9
|
+
it "should create the file if it does not exist" do
|
10
|
+
::File.should_not exist "demo.txt"
|
11
|
+
Fast::File.new.append "demo.txt", "some text"
|
12
|
+
::File.should exist "demo.txt"
|
13
|
+
::File.unlink "demo.txt"
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should not erase the content of the file if it has some" do
|
17
|
+
::File.open "demo.txt", "w" do |file|
|
18
|
+
file.write "some demo content"
|
19
|
+
end
|
20
|
+
|
21
|
+
Fast::File.new.append "demo.txt", "\nmore demo content"
|
22
|
+
|
23
|
+
::File.read( "demo.txt" ).should match /^some demo content/
|
24
|
+
::File.unlink "demo.txt"
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should append the new content last in the file" do
|
28
|
+
::File.open "demo.txt", "w" do |file|
|
29
|
+
file.write "This comes first: "
|
30
|
+
end
|
31
|
+
Fast::File.new.append "demo.txt", "and this comes after."
|
32
|
+
|
33
|
+
::File.read( "demo.txt" ).should match /and this comes after.$/
|
34
|
+
::File.unlink "demo.txt"
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should update the modification time" do
|
38
|
+
::File.open "demo.txt", "w" do |file|
|
39
|
+
file.write "Written earlier"
|
40
|
+
end
|
41
|
+
mtime = ::File.mtime "demo.txt"
|
42
|
+
|
43
|
+
sleep 1
|
44
|
+
Fast::File.new.append "demo.txt", "\nWritten later"
|
45
|
+
::File.mtime( "demo.txt" ).should > mtime
|
46
|
+
|
47
|
+
::File.unlink "demo.txt"
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should return the path to the file" do
|
51
|
+
Fast::File.new.append( "demo.txt", "Hola." ).should == "demo.txt"
|
52
|
+
::File.unlink "demo.txt"
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should work even when a symbol is passed as argument" do
|
56
|
+
Fast::File.new.append :demo_txt, "Hola."
|
57
|
+
::File.should exist "demo_txt"
|
58
|
+
::File.unlink "demo_txt"
|
59
|
+
end
|
60
|
+
|
61
|
+
context "the file is inside a non existing directory" do
|
62
|
+
it "should create the directory aswell as the file" do
|
63
|
+
::File.should_not be_directory "demo"
|
64
|
+
Fast::File.new.append "demo/demo.txt", "Nice content!"
|
65
|
+
::File.should be_directory "demo"
|
66
|
+
::File.unlink "demo/demo.txt"
|
67
|
+
::Dir.unlink "demo"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
|
73
|
+
shared_examples_for "any deletion" do
|
74
|
+
it "should delete the file" do
|
75
|
+
::File.open "demo.txt", "w" do |file|
|
76
|
+
file.write "Hola."
|
77
|
+
end
|
78
|
+
|
79
|
+
Fast::File.new.delete "demo.txt"
|
80
|
+
::File.should_not exist "demo.txt"
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should return the path of the deleted file" do
|
84
|
+
::File.open "demo.txt", "w" do |file|
|
85
|
+
file.write "Hola."
|
86
|
+
end
|
87
|
+
|
88
|
+
Fast::File.new.delete( "demo.txt" ).should == "demo.txt"
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should be possible to use a symbol" do
|
92
|
+
::File.open "demo_txt", "w" do |file|
|
93
|
+
file.write "Hola."
|
94
|
+
end
|
95
|
+
|
96
|
+
Fast::File.new.delete :demo_txt
|
97
|
+
::File.should_not exist "demo.txt"
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
describe "#delete" do it_behaves_like "any deletion" end
|
102
|
+
describe "#unlink" do it_behaves_like "any deletion" end
|
103
|
+
describe "#del" do it_behaves_like "any deletion" end
|
104
|
+
describe "#destroy" do it_behaves_like "any deletion" end
|
105
|
+
|
106
|
+
describe "#touch" do
|
107
|
+
context "in current folder" do
|
108
|
+
it "should create the file if it does not exist" do
|
109
|
+
::File.should_not exist "demo.txt"
|
110
|
+
Fast::File.new.touch "demo.txt"
|
111
|
+
::File.should exist "demo.txt"
|
112
|
+
::File.unlink "demo.txt"
|
113
|
+
end
|
114
|
+
|
115
|
+
end
|
116
|
+
|
117
|
+
context "the file is inside a directory" do
|
118
|
+
it "should create the file if it does not exist" do
|
119
|
+
::Dir.mkdir "demo" unless ::File.directory? "demo"
|
120
|
+
::File.should_not exist "demo/demo.txt"
|
121
|
+
Fast::File.new.touch "demo/demo.txt"
|
122
|
+
::File.should exist "demo/demo.txt"
|
123
|
+
::File.unlink "demo/demo.txt"
|
124
|
+
::Dir.unlink "demo"
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
context "the file is inside a non existing directory" do
|
129
|
+
it "should create the directory aswell as the file" do
|
130
|
+
::File.should_not be_directory "demo"
|
131
|
+
Fast::File.new.touch "demo/demo.txt"
|
132
|
+
::File.should exist "demo/demo.txt"
|
133
|
+
::File.unlink "demo/demo.txt"
|
134
|
+
::Dir.unlink "demo"
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
it "should not rise any error if the file already exists" do
|
139
|
+
::File.open "demo.txt", "w" do |file|
|
140
|
+
file.write "something"
|
141
|
+
end
|
142
|
+
Fast::File.new.touch "demo.txt"
|
143
|
+
::File.unlink "demo.txt"
|
144
|
+
end
|
145
|
+
|
146
|
+
it "should change its atime if already exists" do
|
147
|
+
unless OS.windows?
|
148
|
+
::File.open "demo.txt", "w" do |file|
|
149
|
+
file.write "Some content."
|
150
|
+
end
|
151
|
+
atime = ::File.atime "demo.txt"
|
152
|
+
sleep 1
|
153
|
+
Fast::File.new.touch "demo.txt"
|
154
|
+
::File.atime( "demo.txt" ).should > atime
|
155
|
+
::File.unlink "demo.txt"
|
156
|
+
else
|
157
|
+
pending "This is for POSIX only."
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
it "should be empty if it did not exist" do
|
162
|
+
::File.should_not exist "demo.txt"
|
163
|
+
Fast::File.new.touch "demo.txt"
|
164
|
+
::File.read( "demo.txt" ).should == ""
|
165
|
+
::File.unlink "demo.txt"
|
166
|
+
end
|
167
|
+
|
168
|
+
it "should return the path to the file" do
|
169
|
+
Fast::File.new.touch( "demo.txt" ).should == "demo.txt"
|
170
|
+
::File.unlink "demo.txt"
|
171
|
+
end
|
172
|
+
|
173
|
+
it "should accept a symbol as an argument" do
|
174
|
+
Fast::File.new.touch :demo_txt
|
175
|
+
::File.unlink "demo_txt"
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 2
|
9
|
+
version: 0.0.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Xavier Via
|
@@ -29,6 +29,30 @@ dependencies:
|
|
29
29
|
version: "0"
|
30
30
|
type: :runtime
|
31
31
|
version_requirements: *id001
|
32
|
+
- !ruby/object:Gem::Dependency
|
33
|
+
name: rspec
|
34
|
+
prerelease: false
|
35
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
segments:
|
40
|
+
- 0
|
41
|
+
version: "0"
|
42
|
+
type: :development
|
43
|
+
version_requirements: *id002
|
44
|
+
- !ruby/object:Gem::Dependency
|
45
|
+
name: zucker
|
46
|
+
prerelease: false
|
47
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
49
|
+
- - ">="
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
segments:
|
52
|
+
- 0
|
53
|
+
version: "0"
|
54
|
+
type: :development
|
55
|
+
version_requirements: *id003
|
32
56
|
description: DSL for file system interaction
|
33
57
|
email:
|
34
58
|
- xavierviacanel@gmail.com
|
@@ -44,8 +68,11 @@ files:
|
|
44
68
|
- Rakefile
|
45
69
|
- fast.gemspec
|
46
70
|
- lib/fast.rb
|
71
|
+
- lib/fast/dir.rb
|
47
72
|
- lib/fast/file.rb
|
48
73
|
- lib/fast/version.rb
|
74
|
+
- spec/fast/dir_spec.rb
|
75
|
+
- spec/fast/file_spec.rb
|
49
76
|
has_rdoc: true
|
50
77
|
homepage: ""
|
51
78
|
licenses: []
|