fs 0.0.2 → 0.1.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/README.mdown +14 -2
- data/lib/fs.rb +3 -1
- data/lib/fs/alias.rb +26 -0
- data/lib/fs/base.rb +52 -6
- data/lib/fs/version.rb +1 -1
- data/spec/alias_spec.rb +17 -0
- data/spec/base_spec.rb +113 -9
- data/spec/support/test_dir_support.rb +1 -0
- metadata +4 -1
data/README.mdown
CHANGED
@@ -49,8 +49,20 @@ commands (unsorted).
|
|
49
49
|
|
50
50
|
## Todo
|
51
51
|
|
52
|
-
|
53
|
-
|
52
|
+
Here is my mind … here is my mind …
|
53
|
+
|
54
|
+
- maybe use underscores (remove_dir)
|
55
|
+
- remove! to force something
|
56
|
+
- maybe makedir! to mkdir -p
|
57
|
+
- use Find#find in FS#find ;)
|
58
|
+
- some kind of #tree output
|
59
|
+
- file type
|
60
|
+
- exist?
|
61
|
+
- list_dirs
|
62
|
+
- list_files
|
63
|
+
- find_dirs
|
64
|
+
- find_files
|
65
|
+
- FS.link('a.txt' => 'b.txt') with a hash
|
54
66
|
|
55
67
|
## BTW
|
56
68
|
|
data/lib/fs.rb
CHANGED
data/lib/fs/alias.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
module FS
|
2
|
+
module Alias
|
3
|
+
ALIASES = {
|
4
|
+
:ls => :list,
|
5
|
+
:mkdir => :makedir,
|
6
|
+
:mkdir_p => :makedirs,
|
7
|
+
:rmdir => :removedir,
|
8
|
+
:rm_r => :removedirs,
|
9
|
+
:cd => :changedir,
|
10
|
+
:mv => :move,
|
11
|
+
:cp => :copy,
|
12
|
+
:rm => :remove,
|
13
|
+
:cat => :read,
|
14
|
+
:ln => :link,
|
15
|
+
}
|
16
|
+
|
17
|
+
def self.included(base)
|
18
|
+
base.class_eval do
|
19
|
+
ALIASES.each do |shortcut, original|
|
20
|
+
alias_method shortcut, original
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
data/lib/fs/base.rb
CHANGED
@@ -1,20 +1,34 @@
|
|
1
1
|
module FS
|
2
2
|
module Base
|
3
|
+
|
3
4
|
# FileUtils.touch
|
4
|
-
def touch(files)
|
5
|
+
def touch(*files)
|
5
6
|
FileUtils.touch(files)
|
6
7
|
end
|
7
8
|
|
8
9
|
# FileUtils#mkdir
|
9
|
-
def makedir(dirs)
|
10
|
+
def makedir(*dirs)
|
10
11
|
FileUtils.mkdir(dirs)
|
11
12
|
end
|
12
13
|
|
13
14
|
# FileUtils#mkdir_p
|
14
|
-
def makedirs(dirs)
|
15
|
+
def makedirs(*dirs)
|
15
16
|
FileUtils.mkdir_p(dirs)
|
16
17
|
end
|
17
18
|
|
19
|
+
# FileUtils#rmdir
|
20
|
+
def removedir(*dirs)
|
21
|
+
dirs.each do |dir|
|
22
|
+
raise Errno::ENOTEMPTY unless list(dir).empty?
|
23
|
+
end
|
24
|
+
FileUtils.rmdir(dirs)
|
25
|
+
end
|
26
|
+
|
27
|
+
# FileUtils#rm_r
|
28
|
+
def removedirs(*dirs)
|
29
|
+
FileUtils.rm_r(dirs)
|
30
|
+
end
|
31
|
+
|
18
32
|
# Dir#glob
|
19
33
|
def list(dir='.', pattern='*')
|
20
34
|
glob(dir, pattern)
|
@@ -26,13 +40,33 @@ module FS
|
|
26
40
|
glob(dir, '**', pattern)
|
27
41
|
end
|
28
42
|
|
43
|
+
# TODO: find time to make this cool, not work only
|
29
44
|
# FileUtils#mv
|
30
45
|
def move(*froms, to)
|
31
46
|
froms.each do |from|
|
32
|
-
FileUtils.mv(from, to)
|
47
|
+
FileUtils.mv(from, to)
|
33
48
|
end
|
34
49
|
end
|
35
50
|
|
51
|
+
# TODO: find time to make this cool, not work only
|
52
|
+
# FileUtils#cp
|
53
|
+
def copy(*froms, to)
|
54
|
+
froms.each do |from|
|
55
|
+
FileUtils.cp(from, to)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
# Creates hard links for files and symbolic links for dirs
|
60
|
+
#
|
61
|
+
# FileUtils#ln or FileUtils#ln_s
|
62
|
+
def link(from, to)
|
63
|
+
if File.directory?(from)
|
64
|
+
FileUtils.ln_s(from, to)
|
65
|
+
else
|
66
|
+
FileUtils.ln(from, to)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
36
70
|
# FileUtils#rm
|
37
71
|
def remove(*pathes)
|
38
72
|
FileUtils.rm(pathes)
|
@@ -68,6 +102,16 @@ module FS
|
|
68
102
|
'/'
|
69
103
|
end
|
70
104
|
|
105
|
+
# Dir#chdir
|
106
|
+
def changedir(dir)
|
107
|
+
Dir.chdir(dir)
|
108
|
+
end
|
109
|
+
|
110
|
+
# Dir#pwd
|
111
|
+
def currentdir
|
112
|
+
Dir.pwd
|
113
|
+
end
|
114
|
+
|
71
115
|
private
|
72
116
|
|
73
117
|
def assert_dir(path)
|
@@ -75,9 +119,11 @@ module FS
|
|
75
119
|
end
|
76
120
|
|
77
121
|
def glob(dir, *patterns)
|
78
|
-
|
79
|
-
|
122
|
+
fulldir = File.expand_path(dir)
|
123
|
+
Dir.glob(File.join(fulldir, patterns)).map do |path|
|
124
|
+
path.gsub(/^#{fulldir}\/?/, '')
|
80
125
|
end
|
81
126
|
end
|
127
|
+
|
82
128
|
end
|
83
129
|
end
|
data/lib/fs/version.rb
CHANGED
data/spec/alias_spec.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe FS::Alias do
|
4
|
+
|
5
|
+
FS::Alias::ALIASES.each do |shortcut, original|
|
6
|
+
it "#{shortcut} exists for #{original}" do
|
7
|
+
FS.respond_to?(shortcut).should be_true
|
8
|
+
FS.respond_to?(original).should be_true
|
9
|
+
s = FS.method(shortcut)
|
10
|
+
o = FS.method(original)
|
11
|
+
s.receiver.should eql(o.receiver)
|
12
|
+
s.parameters.should eql(o.parameters)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
data/spec/base_spec.rb
CHANGED
@@ -9,7 +9,13 @@ describe FS::Base do
|
|
9
9
|
File.exist?(file).should be_true
|
10
10
|
end
|
11
11
|
|
12
|
-
it '
|
12
|
+
it 'accepts multiple files' do
|
13
|
+
FS.touch('foo.txt', 'bar.txt')
|
14
|
+
File.exist?('foo.txt').should be_true
|
15
|
+
File.exist?('bar.txt').should be_true
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'accepts a list of files' do
|
13
19
|
files = ['foo.txt', 'bar.txt']
|
14
20
|
FS.touch(files)
|
15
21
|
files.each do |file|
|
@@ -24,6 +30,12 @@ describe FS::Base do
|
|
24
30
|
File.directory?('foo').should be_true
|
25
31
|
end
|
26
32
|
|
33
|
+
it 'accepts multiple dirs' do
|
34
|
+
FS.makedir('foo', 'bar')
|
35
|
+
File.directory?('foo').should be_true
|
36
|
+
File.directory?('bar').should be_true
|
37
|
+
end
|
38
|
+
|
27
39
|
it 'fails if a parent dir is missing' do
|
28
40
|
lambda {FS.makedir('foo/bar')}.should raise_error
|
29
41
|
end
|
@@ -36,6 +48,43 @@ describe FS::Base do
|
|
36
48
|
File.directory?('foo/bar').should be_true
|
37
49
|
File.directory?('foo/bar/baz').should be_true
|
38
50
|
end
|
51
|
+
|
52
|
+
it 'accepts multiple dirs' do
|
53
|
+
FS.makedirs('foo/bar', 'baz/yep')
|
54
|
+
File.directory?('foo').should be_true
|
55
|
+
File.directory?('foo/bar').should be_true
|
56
|
+
File.directory?('baz').should be_true
|
57
|
+
File.directory?('baz/yep').should be_true
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe 'removedir' do
|
62
|
+
it 'removes a dir' do
|
63
|
+
FS.makedir('foo')
|
64
|
+
FS.removedir('foo')
|
65
|
+
File.exist?('foo').should be_false
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'fails if dir not empty' do
|
69
|
+
FS.makedirs('foo/dir')
|
70
|
+
FS.touch('foo/file')
|
71
|
+
lambda {FS.removedir('foo')}.should raise_error
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe 'removedirs' do
|
76
|
+
it 'removes a dir' do
|
77
|
+
FS.makedir('foo')
|
78
|
+
FS.removedirs('foo')
|
79
|
+
File.exist?('foo').should be_false
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'removes a dir even if something is inside' do
|
83
|
+
FS.makedirs('foo/dir')
|
84
|
+
FS.touch('foo/file')
|
85
|
+
FS.removedirs('foo')
|
86
|
+
File.exist?('foo').should be_false
|
87
|
+
end
|
39
88
|
end
|
40
89
|
|
41
90
|
describe 'list' do
|
@@ -120,7 +169,7 @@ describe FS::Base do
|
|
120
169
|
end
|
121
170
|
|
122
171
|
describe 'move' do
|
123
|
-
it '
|
172
|
+
it 'renames a file' do
|
124
173
|
FS.touch('foo.txt')
|
125
174
|
FS.move('foo.txt', 'bar.txt')
|
126
175
|
FS.list.should eql(['bar.txt'])
|
@@ -144,6 +193,46 @@ describe FS::Base do
|
|
144
193
|
end
|
145
194
|
end
|
146
195
|
|
196
|
+
describe 'copy' do
|
197
|
+
it 'copies a file' do
|
198
|
+
FS.write('foo.txt', 'lala')
|
199
|
+
FS.copy('foo.txt', 'bar.txt')
|
200
|
+
File.exist?('foo.txt').should be_true
|
201
|
+
File.exist?('bar.txt').should be_true
|
202
|
+
end
|
203
|
+
|
204
|
+
it 'copies the content' do
|
205
|
+
FS.write('foo.txt', 'lala')
|
206
|
+
FS.copy('foo.txt', 'bar.txt')
|
207
|
+
FS.read('foo.txt').should eql('lala')
|
208
|
+
FS.read('bar.txt').should eql('lala')
|
209
|
+
end
|
210
|
+
|
211
|
+
it 'copies a file to a dir' do
|
212
|
+
FS.write('foo.txt', 'lala')
|
213
|
+
FS.makedir('dir')
|
214
|
+
FS.copy('foo.txt', 'dir/bar.txt')
|
215
|
+
File.exist?('foo.txt').should be_true
|
216
|
+
File.exist?('dir/bar.txt').should be_true
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
220
|
+
describe 'link' do
|
221
|
+
it 'links to files' do
|
222
|
+
FS.touch('foo.txt')
|
223
|
+
FS.link('foo.txt', 'bar.txt')
|
224
|
+
FS.write('foo.txt', 'lala')
|
225
|
+
FS.read('bar.txt').should eql('lala')
|
226
|
+
end
|
227
|
+
|
228
|
+
it 'links to dirs' do
|
229
|
+
FS.makedir('foo')
|
230
|
+
FS.link('foo', 'bar')
|
231
|
+
FS.touch('foo/file')
|
232
|
+
FS.list('bar').should eql(['file'])
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
147
236
|
describe 'remove' do
|
148
237
|
it 'removes files' do
|
149
238
|
FS.touch('file')
|
@@ -210,12 +299,27 @@ describe FS::Base do
|
|
210
299
|
FS.home('root').should match(/\/root$/)
|
211
300
|
end
|
212
301
|
end
|
213
|
-
|
214
|
-
# describe 'removedir'
|
215
|
-
# describe 'removedirs'
|
216
|
-
# describe 'currentdir'
|
217
|
-
# describe 'changedir'
|
218
|
-
# describe 'copy'
|
219
|
-
# describe 'link'
|
220
302
|
|
303
|
+
describe 'currentdir' do
|
304
|
+
it 'returns the current dir' do
|
305
|
+
FS.currentdir.should eql(@test_dir)
|
306
|
+
end
|
307
|
+
|
308
|
+
it 'works after dir was changed' do
|
309
|
+
here = FS.currentdir
|
310
|
+
FS.makedir('foo')
|
311
|
+
Dir.chdir('foo')
|
312
|
+
FS.currentdir.should eql(File.join(here, 'foo'))
|
313
|
+
end
|
314
|
+
end
|
315
|
+
|
316
|
+
describe 'changedir' do
|
317
|
+
it 'change the current dir' do
|
318
|
+
here = Dir.pwd
|
319
|
+
FS.makedir('foo')
|
320
|
+
FS.changedir('foo')
|
321
|
+
Dir.pwd.should eql(File.join(here, 'foo'))
|
322
|
+
end
|
323
|
+
end
|
324
|
+
|
221
325
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: fs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0
|
5
|
+
version: 0.1.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- "Bernd J\xC3\xBCnger"
|
@@ -62,8 +62,10 @@ files:
|
|
62
62
|
- Rakefile
|
63
63
|
- fs.gemspec
|
64
64
|
- lib/fs.rb
|
65
|
+
- lib/fs/alias.rb
|
65
66
|
- lib/fs/base.rb
|
66
67
|
- lib/fs/version.rb
|
68
|
+
- spec/alias_spec.rb
|
67
69
|
- spec/base_spec.rb
|
68
70
|
- spec/spec_helper.rb
|
69
71
|
- spec/support/test_dir_support.rb
|
@@ -97,6 +99,7 @@ signing_key:
|
|
97
99
|
specification_version: 3
|
98
100
|
summary: Work with your filesystem!
|
99
101
|
test_files:
|
102
|
+
- spec/alias_spec.rb
|
100
103
|
- spec/base_spec.rb
|
101
104
|
- spec/spec_helper.rb
|
102
105
|
- spec/support/test_dir_support.rb
|