oofile 0.0.3 → 0.0.4

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/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