fs 0.2.0 → 0.2.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/.gitignore CHANGED
@@ -3,5 +3,4 @@
3
3
  Gemfile.lock
4
4
  pkg/*
5
5
  .rvmrc
6
- .yardoc/
7
- doc/
6
+ .rbenv-version
@@ -1,2 +1,3 @@
1
1
  rvm:
2
- - 1.9.2
2
+ - 1.9.2
3
+ - 1.9.3
@@ -1,4 +1,5 @@
1
- # FS (FileSystem)
1
+ # FS (FileSystem) [![Build Status](http://travis-ci.org/blindgaenger/fs.png)](http://travis-ci.org/blindgaenger/fs)
2
+
2
3
 
3
4
  Work with your filesystem!
4
5
 
data/Rakefile CHANGED
@@ -3,10 +3,4 @@ Bundler::GemHelper.install_tasks
3
3
 
4
4
  require 'rspec/core/rake_task'
5
5
  RSpec::Core::RakeTask.new
6
- task :default => :spec
7
-
8
- require 'yard'
9
- YARD::Rake::YardocTask.new do |t|
10
- t.files = ['lib/**/*.rb']
11
- t.options = ["--title", "FS #{FS::VERSION}"]
12
- end
6
+ task :default => :spec
data/fs.gemspec CHANGED
@@ -17,8 +17,6 @@ Gem::Specification.new do |s|
17
17
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
18
  s.require_paths = ["lib"]
19
19
 
20
- s.add_development_dependency 'rake', '0.9.2.2'
21
- s.add_development_dependency 'rspec', '2.7.0'
22
- s.add_development_dependency 'yard', '0.7.2'
23
- s.add_development_dependency 'bluecloth', '2.2.0'
24
- end
20
+ s.add_development_dependency 'rake'
21
+ s.add_development_dependency 'rspec'
22
+ end
@@ -19,7 +19,7 @@ module FS
19
19
  # FileUtils#rmdir
20
20
  def removedir(*dirs)
21
21
  dirs.each do |dir|
22
- raise Errno::ENOTEMPTY unless list(dir).empty?
22
+ raise Errno::ENOTEMPTY unless empty?(dir)
23
23
  end
24
24
  FileUtils.rmdir(dirs)
25
25
  end
@@ -31,15 +31,15 @@ module FS
31
31
 
32
32
  # Dir#glob
33
33
  def list(dir='.', pattern='*')
34
- glob(dir, pattern, nil)
34
+ glob(dir, pattern)
35
35
  end
36
36
 
37
37
  def list_dirs(dir='.', pattern='*')
38
- glob(dir, pattern, ->(path){FS.directory?(path)})
38
+ glob(dir, pattern) {|path| FS.directory?(path) }
39
39
  end
40
40
 
41
41
  def list_files(dir='.', pattern='*')
42
- glob(dir, pattern, ->(path){FS.file?(path)})
42
+ glob(dir, pattern) {|path| FS.file?(path) }
43
43
  end
44
44
 
45
45
  # TODO: find time to make this cool, not work only
@@ -83,10 +83,10 @@ module FS
83
83
  end
84
84
  end
85
85
 
86
- # File#open(file, 'r')
86
+ # File#open(file, 'r').read
87
87
  def read(file, &block)
88
88
  if block_given?
89
- File.open(file, 'r', &block)
89
+ File.open(file, 'r') {|f| block[f.read] }
90
90
  else
91
91
  content = nil
92
92
  File.open(file, 'r') {|f| content = f.read }
@@ -94,6 +94,28 @@ module FS
94
94
  end
95
95
  end
96
96
 
97
+ # File#open(file, 'r').each
98
+ def read_lines(file, &block)
99
+ if block_given?
100
+ File.open(file, 'r').each {|line| line.chomp!; block[line] }
101
+ else
102
+ lines = []
103
+ File.open(file, 'r').each {|line| line.chomp!; lines << line }
104
+ lines
105
+ end
106
+ end
107
+
108
+ # File#open(file, 'r') =~ /REGEX/
109
+ def grep(file, regexp, &block)
110
+ if block_given?
111
+ File.open(file, 'r').each {|line| line.chomp!; block[line] if line =~ regexp }
112
+ else
113
+ lines = []
114
+ File.open(file, 'r').each {|line| line.chomp!; lines << line if line =~ regexp }
115
+ lines
116
+ end
117
+ end
118
+
97
119
  # Dir#home
98
120
  # the path is always expanded
99
121
  def home(user=nil)
@@ -156,10 +178,10 @@ module FS
156
178
  # uses File.size and Dir.entries
157
179
  # for files it returns `nil` if file does not exist, `true` if it's empty
158
180
  def empty?(path)
159
- if !File.exist?(path)
160
- nil
161
- elsif File.directory?(path)
162
- Dir.entries(path) == ['.', '..']
181
+ raise Errno::ENOENT unless File.exist?(path)
182
+ if File.directory?(path)
183
+ files = Dir.entries(path)
184
+ files.size == 2 && files.sort == ['.', '..']
163
185
  else
164
186
  File.size(path) == 0
165
187
  end
@@ -217,7 +239,8 @@ module FS
217
239
  return '' if path == '/' || path == '.'
218
240
  base = File.basename(path)
219
241
  ext = File.extname(path)
220
- ext.empty? ? base :base[0...-ext.size]
242
+ return base if ext.empty?
243
+ base[0...-ext.size]
221
244
  end
222
245
 
223
246
  # "tmp/foo/bar.todo" => ["tmp/foo", "bar", ".todo"]
@@ -239,16 +262,12 @@ module FS
239
262
 
240
263
  private
241
264
 
242
- def assert_dir(path)
243
- raise "not a directory: #{path}" unless File.directory?(path)
244
- end
245
-
246
- def glob(dir, *patterns, condition)
265
+ def glob(dir, *patterns, &block)
247
266
  fulldir = File.expand_path(dir)
248
267
  regexp = /^#{Regexp.escape(fulldir)}\/?/
249
268
  Dir.
250
269
  glob(File.join(fulldir, patterns)).
251
- select {|path| condition.nil? || condition[path] }.
270
+ select {|path| block.nil? || block[path] }.
252
271
  map {|path| path.gsub(regexp, '') }.
253
272
  sort
254
273
  end
@@ -29,12 +29,12 @@ module FS
29
29
  end
30
30
 
31
31
  def find_dirs(dir, options={}, &block)
32
- condition = ->(path){FileTest.directory?(path)}
32
+ condition = ->(path){ FileTest.directory?(path) }
33
33
  find(dir, options.merge(:condition => condition), &block)
34
34
  end
35
35
 
36
36
  def find_files(dir, options={}, &block)
37
- condition = ->(path){!FileTest.directory?(path)}
37
+ condition = ->(path){ !FileTest.directory?(path) }
38
38
  find(dir, options.merge(:condition => condition), &block)
39
39
  end
40
40
 
@@ -1,3 +1,3 @@
1
1
  module FS
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
@@ -37,7 +37,7 @@ describe FS::Base do
37
37
  end
38
38
 
39
39
  it 'fails if a parent dir is missing' do
40
- lambda {FS.makedir('foo/bar')}.should raise_error
40
+ ->{ FS.makedir('foo/bar') }.should raise_error
41
41
  end
42
42
  end
43
43
 
@@ -68,7 +68,7 @@ describe FS::Base do
68
68
  it 'fails if dir not empty' do
69
69
  FS.makedirs('foo/dir')
70
70
  FS.touch('foo/file')
71
- lambda {FS.removedir('foo')}.should raise_error
71
+ ->{ FS.removedir('foo') }.should raise_error(Errno::ENOTEMPTY)
72
72
  end
73
73
  end
74
74
 
@@ -269,14 +269,14 @@ describe FS::Base do
269
269
 
270
270
  it 'fails on dirs' do
271
271
  FS.makedir('dir')
272
- lambda {FS.remove('dir')}.should raise_error
272
+ ->{ FS.remove('dir') }.should raise_error
273
273
  end
274
274
 
275
275
  # FIXME: fakefs
276
276
  # it 'fails if the dir is not empty' do
277
277
  # FS.makedir('/foo')
278
278
  # FS.touch('/foo/bar')
279
- # lambda {FS.remove('/foo')}.should raise_error
279
+ # ->{ FS.remove('/foo') }.should raise_error
280
280
  # end
281
281
  end
282
282
 
@@ -293,14 +293,48 @@ describe FS::Base do
293
293
  end
294
294
 
295
295
  describe '::read' do
296
- it 'reads the content to a string' do
296
+ before do
297
297
  File.open('foo.txt', 'w') {|f| f.write 'bar' }
298
+ end
299
+
300
+ it 'reads the content to a string' do
298
301
  FS.read('foo.txt').should eql('bar')
299
302
  end
300
303
 
301
- it 'reads the content to a block' do
302
- File.open('foo.txt', 'w') {|f| f.write 'bar' }
303
- FS.read('foo.txt') {|f| f.read.should eql('bar')}
304
+ it 'yields the content to a block' do
305
+ FS.read('foo.txt') {|content| content.should eql('bar')}
306
+ end
307
+ end
308
+
309
+ describe '::read_lines' do
310
+ before do
311
+ File.open('foo.txt', 'w') {|f| f.write "bar\nbaz\nqux" }
312
+ end
313
+
314
+ it 'reads all lines to an array' do
315
+ FS.read_lines('foo.txt').should eql(['bar', 'baz', 'qux'])
316
+ end
317
+
318
+ it 'yields all lines to a block' do
319
+ lines = []
320
+ FS.read_lines('foo.txt') {|line| lines << line}
321
+ lines.should eql(['bar', 'baz', 'qux'])
322
+ end
323
+ end
324
+
325
+ describe '::grep' do
326
+ before do
327
+ File.open('foo.txt', 'w') {|f| f.write "this\nis\nthe\ntest" }
328
+ end
329
+
330
+ it 'greps matching lines to an array' do
331
+ FS.grep('foo.txt', /is/).should eql(['this', 'is'])
332
+ end
333
+
334
+ it 'yields matching lines to a block' do
335
+ lines = []
336
+ FS.grep('foo.txt', /is/) {|line| lines << line}
337
+ lines.should eql(['this', 'is'])
304
338
  end
305
339
  end
306
340
 
@@ -415,7 +449,7 @@ TXT
415
449
  describe '::empty?' do
416
450
  it 'returns nil if the path does not exist' do
417
451
  FS.exist?('foobar').should be_false
418
- FS.empty?('foobar').should be_nil
452
+ ->{ FS.empty?('foobar') }.should raise_error(Errno::ENOENT)
419
453
  end
420
454
 
421
455
  it 'returns if a file is empty' do
@@ -1,6 +1,6 @@
1
1
  module FS
2
2
  module SpecHelpers
3
-
3
+
4
4
  def self.extended(example_group)
5
5
  example_group.use_helper(example_group)
6
6
  end
@@ -24,7 +24,7 @@ module FS
24
24
  end
25
25
  end
26
26
  end
27
-
27
+
28
28
  end
29
29
  end
30
30
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,52 +9,30 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-10 00:00:00.000000000Z
12
+ date: 2012-02-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &2158694320 !ruby/object:Gem::Requirement
16
+ requirement: &70120123039860 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
- - - =
19
+ - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
- version: 0.9.2.2
21
+ version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *2158694320
24
+ version_requirements: *70120123039860
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &2158693840 !ruby/object:Gem::Requirement
27
+ requirement: &70120123039440 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
- - - =
30
+ - - ! '>='
31
31
  - !ruby/object:Gem::Version
32
- version: 2.7.0
32
+ version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *2158693840
36
- - !ruby/object:Gem::Dependency
37
- name: yard
38
- requirement: &2158693380 !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
41
- - - =
42
- - !ruby/object:Gem::Version
43
- version: 0.7.2
44
- type: :development
45
- prerelease: false
46
- version_requirements: *2158693380
47
- - !ruby/object:Gem::Dependency
48
- name: bluecloth
49
- requirement: &2158692920 !ruby/object:Gem::Requirement
50
- none: false
51
- requirements:
52
- - - =
53
- - !ruby/object:Gem::Version
54
- version: 2.2.0
55
- type: :development
56
- prerelease: false
57
- version_requirements: *2158692920
35
+ version_requirements: *70120123039440
58
36
  description: FS gathers the cluttered methods for working with files and dirs. Internally
59
37
  using the good old standard library, but providing simple methods in a single place.
60
38
  email:
@@ -95,7 +73,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
95
73
  version: '0'
96
74
  segments:
97
75
  - 0
98
- hash: 2428767844622882813
76
+ hash: -2961947820199174561
99
77
  required_rubygems_version: !ruby/object:Gem::Requirement
100
78
  none: false
101
79
  requirements:
@@ -104,10 +82,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
104
82
  version: '0'
105
83
  segments:
106
84
  - 0
107
- hash: 2428767844622882813
85
+ hash: -2961947820199174561
108
86
  requirements: []
109
87
  rubyforge_project:
110
- rubygems_version: 1.8.10
88
+ rubygems_version: 1.8.11
111
89
  signing_key:
112
90
  specification_version: 3
113
91
  summary: Work with your filesystem!