oofile 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/TODO.rdoc CHANGED
@@ -1,2 +1,14 @@
1
1
  == todo
2
+ * rename all "traversers" to "visitors" to not be silly
3
+ * create relative_path_from method for files and dirs
4
+ * test OOFile::FileTraverser
5
+ * set up hudson
6
+
7
+ == done
8
+ * added a_dir_entry.files to return array of FsFile entries i.e. the files immediately within the target dir
9
+ * set up to run rake against Ruby 1.9 & JRuby
2
10
  * exclude mocha from rcov coverage
11
+ * nonexistent files/dirs map to UnknownEntry and are traversable. See test_traverse_on_nonexistent_handled_as_unknown
12
+
13
+
14
+
data/doc/demo.rdoc CHANGED
@@ -1,70 +1,71 @@
1
1
  == Sample output
2
2
 
3
3
 
4
- >> require 'oofile'
5
- => true
6
- >>
7
- ?> dir_string = File.join(ENV['SANDBOX'],'oofile','test','data')
8
- => "/Users/dev/oofile/test/data"
9
- >> file_string = File.join(dir_string,'testfile.txt')
10
- => "/Users/dev/oofile/test/data/testfile.txt"
11
- >>
12
- ?> file_string
13
- => "/Users/dev/oofile/test/data/testfile.txt"
14
- >>
15
- ?> dir_string
16
- => "/Users/dev/oofile/test/data"
17
- >>
18
- ?> f = OOFile::FsEntry.from(file_string)
19
- => #<OOFile::FileEntry:0x1016a37e8 @path="/Users/dev/oofile/test/data/testfile.txt">
20
- >>
21
- ?> f.extname
22
- => ".txt"
23
- >>
24
- ?> f.extnless
25
- => "testfile"
26
- >>
27
- ?> f.basename
28
- => "testfile.txt"
29
- >>
30
- ?> f.dirname
31
- => "/Users/dev/oofile/test/data"
32
- >>
33
- ?> f.ctime
34
- => Sat Feb 26 01:34:57 +0000 2011
35
- >>
36
- ?> f.size
37
- => 28
38
- >>
39
- ?> # equality comparison
40
- ?> f == OOFile::FsEntry.from(file_string)
41
- => true
42
- >>
43
- ?> # directories
44
- ?>
45
- ?> d= OOFile::FsEntry.from(dir_string)
46
- => #<OOFile::DirEntry:0x10168b120 @path="/Users/dev/oofile/test/data">
47
- >>
48
- ?> d.extname
49
- => ""
50
- >>
51
- ?> d.extnless
52
- => "data"
53
- >>
54
- ?> d.basename
55
- => "data"
56
- >>
57
- ?> d.dirname
58
- => "/Users/dev/oofile/test"
59
- >>
60
- ?> d.ctime
61
- => Sat Feb 26 01:34:57 +0000 2011
62
- >>
63
- ?> d.size
64
- => 102
65
- >>
66
- ?>
67
- ?> >> => nil
4
+ Welcome to ruby on java
5
+ jruby-1.6.5 :001 > require 'oofile'
6
+ => true
7
+ jruby-1.6.5 :002 >
8
+ jruby-1.6.5 :003 > dir_string = File.join(ENV['SANDBOX'],'oofile','test','data')
9
+ => "/Users/daf/github/oofile/test/data"
10
+ jruby-1.6.5 :004 > file_string = File.join(dir_string,'testfile.txt')
11
+ => "/Users/daf/github/oofile/test/data/testfile.txt"
12
+ jruby-1.6.5 :005 >
13
+ jruby-1.6.5 :006 > file_string
14
+ => "/Users/daf/github/oofile/test/data/testfile.txt"
15
+ jruby-1.6.5 :007 >
16
+ jruby-1.6.5 :008 > dir_string
17
+ => "/Users/daf/github/oofile/test/data"
18
+ jruby-1.6.5 :009 >
19
+ jruby-1.6.5 :010 > f = OOFile::FsEntry.from(file_string)
20
+ => OOFile::FileEntry(/Users/daf/github/oofile/test/data/testfile.txt)
21
+ jruby-1.6.5 :011 >
22
+ jruby-1.6.5 :012 > f.extname
23
+ => ".txt"
24
+ jruby-1.6.5 :013 >
25
+ jruby-1.6.5 :014 > f.extnless
26
+ => "testfile"
27
+ jruby-1.6.5 :015 >
28
+ jruby-1.6.5 :016 > f.basename
29
+ => "testfile.txt"
30
+ jruby-1.6.5 :017 >
31
+ jruby-1.6.5 :018 > f.dirname
32
+ => "/Users/daf/github/oofile/test/data"
33
+ jruby-1.6.5 :019 >
34
+ jruby-1.6.5 :020 > f.ctime
35
+ => Sat Nov 19 21:45:15 +0000 2011
36
+ jruby-1.6.5 :021 >
37
+ jruby-1.6.5 :022 > f.size
38
+ => 28
39
+ jruby-1.6.5 :023 >
40
+ jruby-1.6.5 :024 > # equality comparison
41
+ jruby-1.6.5 :025 > f == OOFile::FsEntry.from(file_string)
42
+ => true
43
+ jruby-1.6.5 :026 >
44
+ jruby-1.6.5 :027 > # directories
45
+ jruby-1.6.5 :028 >
46
+ jruby-1.6.5 :029 > d= OOFile::FsEntry.from(dir_string)
47
+ => OOFile::DirEntry(/Users/daf/github/oofile/test/data)
48
+ jruby-1.6.5 :030 >
49
+ jruby-1.6.5 :031 > d.extname
50
+ => ""
51
+ jruby-1.6.5 :032 >
52
+ jruby-1.6.5 :033 > d.extnless
53
+ => "data"
54
+ jruby-1.6.5 :034 >
55
+ jruby-1.6.5 :035 > d.basename
56
+ => "data"
57
+ jruby-1.6.5 :036 >
58
+ jruby-1.6.5 :037 > d.dirname
59
+ => "/Users/daf/github/oofile/test"
60
+ jruby-1.6.5 :038 >
61
+ jruby-1.6.5 :039 > d.ctime
62
+ => Sat Nov 19 20:07:45 +0000 2011
63
+ jruby-1.6.5 :040 >
64
+ jruby-1.6.5 :041 > d.size
65
+ => 204
66
+ jruby-1.6.5 :042 >
67
+ jruby-1.6.5 :043 >
68
+ jruby-1.6.5 :044 > jruby-1.6.5 :044 > => nil
68
69
 
69
70
 
70
- oofile 0.0.1
71
+ oofile 0.0.4
@@ -35,6 +35,10 @@ module OOFile
35
35
  def ctime
36
36
  File::ctime(@path)
37
37
  end
38
+
39
+ def mtime
40
+ File::mtime(@path)
41
+ end
38
42
 
39
43
  def size
40
44
  File.size(@path)
@@ -55,6 +59,10 @@ module OOFile
55
59
  # by default we ignore entries that cannot be handled
56
60
  def traverse(entry)
57
61
  end
62
+
63
+ def inspect
64
+ "#{self.class.to_s}(#{@path})"
65
+ end
58
66
 
59
67
  end
60
68
 
@@ -77,6 +85,11 @@ module OOFile
77
85
  # I represent directories in the filesystem.
78
86
  class DirEntry < FsEntry
79
87
 
88
+ # I return the files immediately in my directory.
89
+ def files
90
+ (Dir.new(@path).entries.select {|entry| File.file?(File.join(@path,entry))}).map {|filepath| FsEntry.from(File.join(@path,filepath)) }
91
+ end
92
+
80
93
  # I am visitable with a Traverser. I perform inorder traversal of FsEntries.
81
94
  def traverse(traverser)
82
95
  traverser.traverse_dir(self)
@@ -99,4 +112,4 @@ module OOFile
99
112
  end
100
113
  end
101
114
 
102
- end
115
+ end
@@ -0,0 +1 @@
1
+ another test file
@@ -0,0 +1 @@
1
+ file in a subdirectory
@@ -52,6 +52,11 @@ def test_ctime
52
52
  assert OOFile::FsEntry.new(TEST_FILEPATH).ctime.to_i > 0
53
53
  end
54
54
 
55
+ def test_mtime
56
+ assert_equal(File::mtime(TEST_FILEPATH), OOFile::FsEntry.new(TEST_FILEPATH).mtime)
57
+ assert OOFile::FsEntry.new(TEST_FILEPATH).mtime.to_i > 0
58
+ end
59
+
55
60
  def test_size
56
61
  assert_equal(28, OOFile::FsEntry.new(TEST_FILEPATH).size)
57
62
  end
@@ -90,22 +95,43 @@ end
90
95
 
91
96
  class DirEntryTest < Test::Unit::TestCase
92
97
 
98
+ def name_on_expected_list!(list, name)
99
+ return false unless list.member? name
100
+ list.delete(name)
101
+ true
102
+ end
103
+
93
104
  def test_traverse
105
+ expected_files_basenames = ['testfile.txt', 'second_testfile.txt', 'a_nested_testfile.txt']
106
+ expected_directories = [TESTDATA_DIR, File.join(TESTDATA_DIR,'subdirectory')]
94
107
  traverser = OOFile::Traverser.new
95
- traverser.expects(:traverse_file).once().with do |file|
96
- OOFile::FileEntry==file.class && 'testfile.txt'==file.basename
108
+ traverser.expects(:traverse_file).times(3).with do |file|
109
+ puts file.basename
110
+ OOFile::FileEntry==file.class && name_on_expected_list!(expected_files_basenames, file.basename)
97
111
  end
98
- traverser.expects(:traverse_dir).once().with do |dir|
99
- OOFile::DirEntry==dir.class && TESTDATA_DIR==dir.path
112
+ traverser.expects(:traverse_dir).times(2).with do |dir|
113
+ OOFile::DirEntry==dir.class && name_on_expected_list!(expected_directories, dir.path)
100
114
  end
101
115
  traverser.expects(:traverse_unknown).once().with do |unknown|
102
116
  OOFile::UnknownEntry==unknown.class && 'pipeentry'==unknown.basename
103
117
  end
104
118
 
105
- file = OOFile::FsEntry.from(TESTDATA_DIR)
106
- file.traverse(traverser)
119
+ directory = OOFile::FsEntry.from(TESTDATA_DIR)
120
+ assert_equal directory.class, OOFile::DirEntry
121
+ directory.traverse(traverser)
122
+ assert expected_files_basenames.empty?, "These files were expected to be traversed but remain: #{expected_files_basenames.inspect}"
123
+ assert expected_directories.empty?, "These dirs were expected to be traversed but remain: #{expected_directories.inspect}"
107
124
  end
108
125
 
126
+ def test_return_all_top_level_files
127
+ directory = OOFile::FsEntry.from(TESTDATA_DIR)
128
+ actual_files = directory.files
129
+ assert_equal 2, actual_files.size
130
+ expected_filenames = ['testfile.txt', 'second_testfile.txt']
131
+ actual_files.each {|actual_file| assert_equal OOFile::FileEntry, actual_file.class }
132
+ expected_filenames.each {|expected_filename| (actual_files.select {|file| file.basename==expected_filename}).size == 2}
133
+ end
134
+
109
135
  end
110
136
 
111
137
  class UnknownEntryTest < Test::Unit::TestCase
@@ -117,5 +143,19 @@ class UnknownEntryTest < Test::Unit::TestCase
117
143
  file = OOFile::FsEntry.from(File.join(TESTDATA_DIR,'pipeentry'))
118
144
  file.traverse(traverser)
119
145
  end
146
+
147
+ def test_traverse_on_nonexistent_handled_as_unknown
148
+ traverser= OOFile::Traverser.new
149
+ traverser.expects(:traverse_file).never()
150
+ traverser.expects(:traverse_dir).never()
151
+ traverser.expects(:traverse_unknown).once().with do |unknown|
152
+ OOFile::UnknownEntry==unknown.class && 'nonexistentfile'==unknown.basename
153
+ end
154
+
155
+ file = OOFile::FsEntry.from(File.join(TESTDATA_DIR,'nonexistentfile'))
156
+
157
+ assert_equal file.class, OOFile::UnknownEntry
158
+ file.traverse(traverser)
159
+ end
120
160
 
121
161
  end
metadata CHANGED
@@ -1,55 +1,39 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oofile
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 0
9
- - 3
10
- version: 0.0.3
4
+ prerelease:
5
+ version: 0.0.4
11
6
  platform: ruby
12
7
  authors:
13
- - Dafydd Rees
8
+ - Dafydd Rees
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
12
 
18
- date: 2011-03-02 00:00:00 +00:00
19
- default_executable:
13
+ date: 2011-11-19 00:00:00 Z
20
14
  dependencies:
21
- - !ruby/object:Gem::Dependency
22
- name: mocha
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 43
30
- segments:
31
- - 0
32
- - 9
33
- - 8
34
- version: 0.9.8
35
- type: :development
36
- version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
38
- name: rcov
39
- prerelease: false
40
- requirement: &id002 !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ">="
44
- - !ruby/object:Gem::Version
45
- hash: 55
46
- segments:
47
- - 0
48
- - 9
49
- - 6
50
- version: 0.9.6
51
- type: :development
52
- version_requirements: *id002
15
+ - !ruby/object:Gem::Dependency
16
+ name: mocha
17
+ prerelease: false
18
+ requirement: &id001 !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 0.9.8
24
+ type: :development
25
+ version_requirements: *id001
26
+ - !ruby/object:Gem::Dependency
27
+ name: rcov
28
+ prerelease: false
29
+ requirement: &id002 !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: 0.9.6
35
+ type: :development
36
+ version_requirements: *id002
53
37
  description: Object-oriented access to the filesystem.
54
38
  email: os@greenbarsoft.co.uk
55
39
  executables: []
@@ -57,24 +41,25 @@ executables: []
57
41
  extensions: []
58
42
 
59
43
  extra_rdoc_files:
60
- - CHANGELOG.rdoc
61
- - COPYING
62
- - README.rdoc
63
- - doc/demo.rdoc
64
- - TODO.rdoc
44
+ - CHANGELOG.rdoc
45
+ - COPYING
46
+ - README.rdoc
47
+ - doc/demo.rdoc
48
+ - TODO.rdoc
65
49
  files:
66
- - doc/demo.script
67
- - lib/oofile/filesystem.rb
68
- - lib/oofile.rb
69
- - test/data/testfile.txt
70
- - test/filesystem_test.rb
71
- - ./test/filesystem_test.rb
72
- - CHANGELOG.rdoc
73
- - COPYING
74
- - README.rdoc
75
- - doc/demo.rdoc
76
- - TODO.rdoc
77
- has_rdoc: true
50
+ - doc/demo.script
51
+ - lib/oofile.rb
52
+ - lib/oofile/filesystem.rb
53
+ - test/filesystem_test.rb
54
+ - test/data/second_testfile.txt
55
+ - test/data/testfile.txt
56
+ - test/data/subdirectory/a_nested_testfile.txt
57
+ - ./test/filesystem_test.rb
58
+ - CHANGELOG.rdoc
59
+ - COPYING
60
+ - README.rdoc
61
+ - doc/demo.rdoc
62
+ - TODO.rdoc
78
63
  homepage: http://www.greenbarsoft.co.uk/software/oofile
79
64
  licenses: []
80
65
 
@@ -82,31 +67,25 @@ post_install_message:
82
67
  rdoc_options: []
83
68
 
84
69
  require_paths:
85
- - lib
70
+ - lib
86
71
  required_ruby_version: !ruby/object:Gem::Requirement
87
72
  none: false
88
73
  requirements:
89
- - - ">="
90
- - !ruby/object:Gem::Version
91
- hash: 3
92
- segments:
93
- - 0
94
- version: "0"
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: "0"
95
77
  required_rubygems_version: !ruby/object:Gem::Requirement
96
78
  none: false
97
79
  requirements:
98
- - - ">="
99
- - !ruby/object:Gem::Version
100
- hash: 3
101
- segments:
102
- - 0
103
- version: "0"
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: "0"
104
83
  requirements: []
105
84
 
106
85
  rubyforge_project:
107
- rubygems_version: 1.3.7
86
+ rubygems_version: 1.8.9
108
87
  signing_key:
109
88
  specification_version: 3
110
89
  summary: Object-oriented, traversable file system representation.
111
90
  test_files:
112
- - ./test/filesystem_test.rb
91
+ - ./test/filesystem_test.rb