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 +12 -0
- data/doc/demo.rdoc +66 -65
- data/lib/oofile/filesystem.rb +14 -1
- data/test/data/second_testfile.txt +1 -0
- data/test/data/subdirectory/a_nested_testfile.txt +1 -0
- data/test/filesystem_test.rb +46 -6
- metadata +53 -74
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
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
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.
|
71
|
+
oofile 0.0.4
|
data/lib/oofile/filesystem.rb
CHANGED
@@ -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
|
data/test/filesystem_test.rb
CHANGED
@@ -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).
|
96
|
-
|
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).
|
99
|
-
OOFile::DirEntry==dir.class &&
|
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
|
-
|
106
|
-
|
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
|
-
|
5
|
-
|
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-
|
19
|
-
default_executable:
|
13
|
+
date: 2011-11-19 00:00:00 Z
|
20
14
|
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
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
|
68
|
-
- lib/oofile.rb
|
69
|
-
- test/
|
70
|
-
- test/
|
71
|
-
-
|
72
|
-
-
|
73
|
-
-
|
74
|
-
-
|
75
|
-
-
|
76
|
-
-
|
77
|
-
|
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
|
-
|
91
|
-
|
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
|
-
|
100
|
-
|
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.
|
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
|