ptools 1.0.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/CHANGES ADDED
@@ -0,0 +1,40 @@
1
+ == 1.0.0 - 2-Jun-2005
2
+ * Modified the File.middle method to accept an optional block.
3
+ * File.whereis is now limited to unique values so that redundant PATH entries
4
+ do not cause redundant entries in the returned array (or block).
5
+ * File.nl_convert and File.touch now return self.
6
+ * File.nl_convert now raises ArgumentError (instead of StandardError) if
7
+ an unknown platform is provided.
8
+ * File.wc now raises ArgumentError (instead of RuntimeError) if a bad option
9
+ is provided.
10
+ * Made documentation rdoc friendly.
11
+ * Test suite updates, corrections and additions.
12
+ * Removed the INSTALL file. See the README instead.
13
+ * Moved project to RubyForge.
14
+
15
+ == 0.1.3 - 5-Dec-2003
16
+ * Modified File#which and File#whereis for Win32 to handle extensions better,
17
+ i.e. you can send "ruby" or "ruby.exe" and get back the same result.
18
+ * Minor test changes to tc_which.rb and tc_whereis.rb.
19
+
20
+ == 0.1.2 - 14-May-2003
21
+ * Modified nl_convert() to allow the destination filename to be the same as the
22
+ source file. In that case, a tempfile is used and copied back over the
23
+ original file.
24
+ * The target file name for nl_convert() now defaults to the source file name and
25
+ the default format is now "dos".
26
+ * Added a tc_constants.rb test suite.
27
+ * Test suite additions/fixes.
28
+ * Updates to MANIFEST.
29
+
30
+ == 0.1.1 - 21-Mar-2003
31
+ * Modified File.tail to return data in the same order that 'tail' does.
32
+ * Modified File.which to return nil if the program is not found.
33
+ * Modified File.whereis now uses '\' instead of '/' on MS Windows.
34
+ * Added File.middle class method.
35
+ * Test suite modification & additions.
36
+ * Thanks go to Shanko for both the spot and patch for tail, which, whereis
37
+ and middle.
38
+
39
+ == 0.1.0 - 18-Mar-2003
40
+ * Initial release
data/MANIFEST ADDED
@@ -0,0 +1,20 @@
1
+ CHANGES
2
+ README
3
+ MANIFEST
4
+ install.rb
5
+ ptools.gemspec
6
+
7
+ lib/ptools.rb
8
+
9
+ test/ts_all.rb
10
+ test/tc_constants.rb
11
+ test/tc_head.rb
12
+ test/tc_middle.rb
13
+ test/tc_nlconvert.rb
14
+ test/tc_tail.rb
15
+ test/tc_touch.rb
16
+ test/tc_wc.rb
17
+ test/tc_which.rb
18
+ test/tc_whereis.rb
19
+ test/test_file.txt
20
+ test/test_file2.txt
data/README ADDED
@@ -0,0 +1,62 @@
1
+ == Description
2
+ The ptools (power tools) package is an additional set of commands for the
3
+ File class based on Unix command line tools.
4
+
5
+ == Prerequisites
6
+ Ruby 1.8.0 or later is recommended but not required.
7
+
8
+ == Installation
9
+ ruby test/ts_all.rb (optional)
10
+ ruby install.rb
11
+
12
+ == Synopsis
13
+ require "ptools"
14
+
15
+ File.which("ruby") # '/usr/local/bin/ruby'
16
+ File.whereis("ruby") # ['/usr/local/bin/ruby','/opt/bin/ruby']
17
+
18
+ File.head("myfile") # Returns first 10 lines of 'myfile'
19
+ File.middle("myfile",8,12) # Returns lines 8-12 of 'myfile'
20
+ File.tail("myfile",3) # Returns last 3 lines of 'myfile'
21
+ File.wc("myfile",'words') # Returns the number of words in 'myfile'
22
+
23
+ File.touch("newfile") # "newfile" now exists
24
+
25
+ # Creates a copy of 'myfile' called 'newfile', in DOS format
26
+ File.nl_convert("myfile", "newfile", "dos")
27
+
28
+ == Known Bugs
29
+ There is a bug in 1.6.x that can cause $\ characters to accumulate when
30
+ converting to DOS or MAC format if nl_convert is run multiple times on
31
+ the same file. This appears to be fixed in 1.8.x.
32
+
33
+ == Acknowledgements
34
+ The which() method was adopted from the FileWhich code posted by Michael
35
+ Granger on http://www.rubygarden.org. The 'whereis' command is a minor
36
+ modification of that code as well.
37
+
38
+ The nl_convert() method was adopted (somewhat) from the nlcvt program
39
+ found at http://www.perl.com/language/ppt/src/nlcvt/nlcvt, written by
40
+ Tom Christiansen.
41
+
42
+ The middle() method was provided by Shashank Date.
43
+
44
+ == Future Plans
45
+ Add whatever other tools people think might be useful.
46
+
47
+ == License
48
+ Ruby's
49
+
50
+ == Copyright
51
+ (C) 2003-2005 Daniel J. Berger
52
+ All Rights Reserved.
53
+
54
+ == Warranty
55
+ This package is provided "as is" and without any express or
56
+ implied warranties, including, without limitation, the implied
57
+ warranties of merchantability and fitness for a particular purpose.
58
+
59
+ == Author
60
+ Daniel J. Berger
61
+ djberg96 at gmail dot com
62
+ imperator on IRC (irc.freenode.net)
data/lib/ptools.rb ADDED
@@ -0,0 +1,230 @@
1
+ class File
2
+
3
+ PTOOLS_VERSION = "1.0.0"
4
+ WIN32EXTS = %w/.exe .com .bat/
5
+
6
+ # Looks for the first occurrence of +program+ within +path+.
7
+ #
8
+ # On Win32, it looks for executables ending with .exe, .bat and .com
9
+ # which you may optionally include in the program name.
10
+ #
11
+ # Returns nil if not found.
12
+ def self.which(program, path=ENV['PATH'])
13
+ programs = program.to_a
14
+
15
+ # If no file extension is provided on Windows, try .bat, .com
16
+ # and .exe in turn.
17
+ if File::ALT_SEPARATOR && File.extname(program).empty?
18
+ unless WIN32EXTS.include?(File.extname(program))
19
+ WIN32EXTS.each{ |ext|
20
+ programs.push(program + ext)
21
+ }
22
+ end
23
+ end
24
+
25
+ # Catch the first path found, or nil
26
+ location = catch(:done){
27
+ path.split(File::PATH_SEPARATOR).each{ |dir|
28
+ programs.each{ |prog|
29
+ f = File.join(dir, prog)
30
+ if File.executable?(f) && !File.directory?(f)
31
+ location = File.join(dir, prog)
32
+ location.tr!('/',File::ALT_SEPARATOR) if File::ALT_SEPARATOR
33
+ throw(:done, location)
34
+ end
35
+ }
36
+ }
37
+ nil # Evaluate to nil if not found
38
+ }
39
+
40
+ location
41
+ end
42
+
43
+ # In block form, yields each +program+ within +path+. In non-block
44
+ # form, returns an array of each +program+ within +path+.
45
+ #
46
+ # On Win32, it looks for executables ending with .exe, .bat and .com
47
+ # which you may optionally include in the program name.
48
+ def self.whereis(program, path=ENV['PATH'])
49
+ dirs = []
50
+ programs = program.to_a
51
+
52
+ # If no file extension is provided on Windows, try .bat, .com
53
+ # and .exe in turn.
54
+ if File::ALT_SEPARATOR && File.extname(program).empty?
55
+ unless WIN32EXTS.include?(File.extname(program))
56
+ WIN32EXTS.each{ |ext|
57
+ programs.push(program + ext)
58
+ }
59
+ end
60
+ end
61
+
62
+ path.split(File::PATH_SEPARATOR).each{ |dir|
63
+ programs.each{ |prog|
64
+ file = File.join(dir,prog)
65
+ file.tr!('/',File::ALT_SEPARATOR) if File::ALT_SEPARATOR
66
+ if File.executable?(file) && !File.directory?(file)
67
+ if block_given?
68
+ yield file
69
+ else
70
+ dirs << file
71
+ end
72
+ end
73
+ }
74
+ }
75
+ dirs.empty? ? nil : dirs.uniq
76
+ end
77
+
78
+ # In block form, yields the first +num_lines+ from +filename+. In non-block
79
+ # form, returns an Array of +num_lines+
80
+ def self.head(filename, num_lines=10)
81
+ a = []
82
+ IO.foreach(filename){ |line|
83
+ break if num_lines <= 0
84
+ num_lines -= 1
85
+ if block_given?
86
+ yield line
87
+ else
88
+ a << line
89
+ end
90
+ }
91
+ return a.empty? ? nil : a # Return nil in block form
92
+ end
93
+
94
+ # In block form, yields line +from+ up to line +to+. In non-block form
95
+ # returns an Array of lines from +from+ to +to+.
96
+ def self.middle(filename, from=10, to=20)
97
+ if block_given?
98
+ IO.readlines(filename)[from-1..to-1].each{ |line| yield line }
99
+ else
100
+ IO.readlines(filename)[from-1..to-1]
101
+ end
102
+ end
103
+
104
+ # In block form, yields the last +num_lines+ of file +filename+.
105
+ # In non-block form, it returns the lines as an array.
106
+ #
107
+ # Note that this method slurps the entire file, so I don't recommend it
108
+ # for very large files. Also note that 'tail -f' functionality is not
109
+ # present.
110
+ def self.tail(filename, num_lines=10)
111
+ if block_given?
112
+ IO.readlines(filename).reverse[0..num_lines-1].reverse.each{ |line|
113
+ yield line
114
+ }
115
+ else
116
+ IO.readlines(filename).reverse[0..num_lines-1].reverse
117
+ end
118
+ end
119
+
120
+ # Converts a text file from one OS platform format to another, ala
121
+ # 'dos2unix'. Valid values for 'format', which are case insensitve,
122
+ # include:
123
+
124
+ # * MS Windows -> dos, windows, win32
125
+ # * Unix/BSD -> unix, linux, bsd
126
+ # * Mac -> mac, macintosh, apple, osx
127
+
128
+ # Note that this method is only valid for an ftype of "file". Otherwise a
129
+ # TypeError will be raised. If an invalid format value is received, an
130
+ # ArgumentError is raised.
131
+ def self.nl_convert(filename, newfilename=filename, platform="dos")
132
+
133
+ unless File.ftype(filename) == "file"
134
+ raise TypeError, "Only valid for plain text files"
135
+ end
136
+
137
+ if platform =~ /dos|windows|win32/i
138
+ format = "\cM\cJ"
139
+ elsif platform =~ /unix|linux|bsd/i
140
+ format = "\cJ"
141
+ elsif platform =~ /mac|apple|macintosh|osx/i
142
+ format = "\cM"
143
+ else
144
+ raise ArgumentError, "Invalid platform string"
145
+ end
146
+
147
+ orig = $\
148
+ $\ = format
149
+
150
+ if filename == newfilename
151
+ require "ftools"
152
+ require "tempfile"
153
+ tf = Tempfile.new("temp")
154
+ tf.open
155
+ IO.foreach(filename){ |line|
156
+ line.chomp!
157
+ tf.print line
158
+ }
159
+ tf.close
160
+ File.delete(filename)
161
+ File.copy(tf.path,filename)
162
+ else
163
+ nf = File.new(newfilename,"w+")
164
+ IO.foreach(filename){ |line|
165
+ line.chomp!
166
+ nf.print line
167
+ }
168
+ nf.close
169
+ end
170
+
171
+ $\ = orig
172
+ self
173
+ end
174
+
175
+ # Creates the 0 byte file +filename+.
176
+ def self.touch(filename)
177
+ File.open(filename,"w+"){}
178
+ self
179
+ end
180
+
181
+ # With no arguments, returns a four element array consisting of the number
182
+ # of bytes, characters, words and lines in filename, respectively.
183
+
184
+ # Valid options are 'bytes', 'characters' (or just 'chars'), 'words' and
185
+ # 'lines'.
186
+ def self.wc(filename,option='all')
187
+ option.downcase!
188
+ valid = %w/all bytes characters chars lines words/
189
+
190
+ unless valid.include?(option)
191
+ raise ArgumentError, "Invalid option: '#{option}'"
192
+ end
193
+
194
+ n = 0
195
+ if option == 'lines'
196
+ IO.foreach(filename){ n += 1 }
197
+ return n
198
+ elsif option == 'bytes'
199
+ File.open(filename){ |f|
200
+ f.each_byte{ n += 1 }
201
+ }
202
+ return n
203
+ elsif option == 'characters' || option == 'chars'
204
+ File.open(filename){ |f|
205
+ while f.getc
206
+ n += 1
207
+ end
208
+ }
209
+ return n
210
+ elsif option == 'words'
211
+ IO.foreach(filename){ |line|
212
+ n += line.split.length
213
+ }
214
+ return n
215
+ else
216
+ bytes,chars,lines,words = 0,0,0,0
217
+ IO.foreach(filename){ |line|
218
+ lines += 1
219
+ words += line.split.length
220
+ chars += line.split('').length
221
+ }
222
+ File.open(filename){ |f|
223
+ while f.getc
224
+ bytes += 1
225
+ end
226
+ }
227
+ return [bytes,chars,words,lines]
228
+ end
229
+ end
230
+ end
@@ -0,0 +1,22 @@
1
+ ##################################################
2
+ # tc_constants.rb
3
+ #
4
+ # Tests whatever constant that have been defined
5
+ ##################################################
6
+ base = File.basename(Dir.pwd)
7
+
8
+ if base == "test" or base =~ /ptools/
9
+ Dir.chdir("..") if base == "test"
10
+ $LOAD_PATH.unshift(Dir.pwd)
11
+ $LOAD_PATH.unshift(Dir.pwd + "/lib")
12
+ Dir.chdir("test") if Dir.pwd != "test"
13
+ end
14
+
15
+ require "test/unit"
16
+ require "ptools"
17
+
18
+ class TC_Constants < Test::Unit::TestCase
19
+ def test_version
20
+ assert_equal("1.0.0", File::PTOOLS_VERSION, "Bad VERSION")
21
+ end
22
+ end
data/test/tc_head.rb ADDED
@@ -0,0 +1,49 @@
1
+ ##########################################
2
+ # tc_head.rb
3
+ #
4
+ # Test case for the File.head method.
5
+ ##########################################
6
+ base = File.basename(Dir.pwd)
7
+
8
+ if base == "test" or base =~ /ptools/
9
+ Dir.chdir("..") if base == "test"
10
+ $LOAD_PATH.unshift(Dir.pwd)
11
+ $LOAD_PATH.unshift(Dir.pwd + "/lib")
12
+ Dir.chdir("test") if Dir.pwd != "test"
13
+ end
14
+
15
+ require "test/unit"
16
+ require "ptools"
17
+
18
+ class TC_FileHead < Test::Unit::TestCase
19
+ def setup
20
+ @test_file = 'test_file1.txt'
21
+
22
+ @expected_head1 = ["line1\n","line2\n","line3\n","line4\n","line5\n"]
23
+ @expected_head1.push("line6\n","line7\n","line8\n","line9\n","line10\n")
24
+
25
+ @expected_head2 = ["line1\n","line2\n","line3\n","line4\n","line5\n"]
26
+ end
27
+
28
+ def test_head_basic
29
+ assert_respond_to(File, :head)
30
+ assert_nothing_raised{ File.head(@test_file) }
31
+ assert_nothing_raised{ File.head(@test_file, 5) }
32
+ assert_nothing_raised{ File.head(@test_file){} }
33
+ end
34
+
35
+ def test_head_expected_results
36
+ assert_kind_of(Array, File.head(@test_file))
37
+ assert_equal(@expected_head1, File.head(@test_file))
38
+ assert_equal(@expected_head2, File.head(@test_file, 5))
39
+ end
40
+
41
+ def test_head_expected_errors
42
+ assert_raises(ArgumentError){ File.head(@test_file, 5, "foo") }
43
+ assert_raises(Errno::ENOENT){ File.head("bogus") }
44
+ end
45
+
46
+ def teardown
47
+ @test_file = nil
48
+ end
49
+ end
data/test/tc_middle.rb ADDED
@@ -0,0 +1,58 @@
1
+ ##########################################
2
+ # tc_middle.rb
3
+ #
4
+ # Test case for the File.middle method
5
+ ##########################################
6
+ base = File.basename(Dir.pwd)
7
+
8
+ if base == "test" or base =~ /ptools/
9
+ Dir.chdir("..") if base == "test"
10
+ $LOAD_PATH.unshift(Dir.pwd)
11
+ $LOAD_PATH.unshift(Dir.pwd + "/lib")
12
+ Dir.chdir("test") if Dir.pwd != "test"
13
+ end
14
+
15
+ require "test/unit"
16
+ require "ptools"
17
+
18
+ class TC_FileMiddle < Test::Unit::TestCase
19
+ def setup
20
+ @test_file = 'test_file1.txt'
21
+
22
+ @expected_middle1 = ["line10\n", "line11\n", "line12\n", "line13\n", "line14\n"]
23
+ @expected_middle1.push("line15\n","line16\n", "line17\n", "line18\n")
24
+ @expected_middle1.push("line19\n","line20\n")
25
+
26
+ @expected_middle2 = ["line14\n","line15\n","line16\n","line17\n"]
27
+ @expected_middle2.push("line18\n","line19\n","line20\n")
28
+
29
+ @expected_middle3 = ["line5\n","line6\n","line7\n"]
30
+ @expected_middle3.push("line8\n","line9\n","line10\n")
31
+ end
32
+
33
+ def test_method_basic
34
+ assert_respond_to(File, :middle)
35
+ assert_nothing_raised{ File.middle(@test_file) }
36
+ assert_nothing_raised{ File.middle(@test_file, 14) }
37
+ assert_nothing_raised{ File.middle(@test_file, 5, 10) }
38
+ assert_nothing_raised{ File.middle(@test_file){} }
39
+ end
40
+
41
+ def test_middle_expected_results
42
+ assert_kind_of(Array, File.middle(@test_file))
43
+ assert_equal(@expected_middle1, File.middle(@test_file))
44
+ assert_equal(@expected_middle2, File.middle(@test_file, 14))
45
+ assert_equal(@expected_middle3, File.middle(@test_file, 5, 10))
46
+ end
47
+
48
+ def test_middle_expected_errors
49
+ assert_raises(ArgumentError){ File.middle }
50
+ assert_raises(ArgumentError){ File.middle(@test_file, 5, 10, 15) }
51
+ assert_raises(NoMethodError){ File.middle(@test_file, "foo") }
52
+ assert_raises(Errno::ENOENT){ File.middle("bogus") }
53
+ end
54
+
55
+ def teardown
56
+ @test_file = nil
57
+ end
58
+ end
@@ -0,0 +1,79 @@
1
+ #############################################
2
+ # tc_nlconvert.rb
3
+ #
4
+ # Test case for the File.nl_convert method.
5
+ #############################################
6
+ base = File.basename(Dir.pwd)
7
+
8
+ if base == "test" or base =~ /ptools/
9
+ Dir.chdir("..") if base == "test"
10
+ $LOAD_PATH.unshift(Dir.pwd)
11
+ $LOAD_PATH.unshift(Dir.pwd + "/lib")
12
+ Dir.chdir("test") if Dir.pwd != "test"
13
+ end
14
+
15
+ require "test/unit"
16
+ require "ptools"
17
+
18
+ class TC_FileNLConvert < Test::Unit::TestCase
19
+ def setup
20
+ @test_file1 = 'test_file1.txt'
21
+ @test_file2 = 'test_file2.txt'
22
+ @dos_file = 'dos_test_file.txt'
23
+ @mac_file = 'mac_test_file.txt'
24
+ @unix_file = 'nix_test_file.txt'
25
+ end
26
+
27
+ def test_nl_convert_basic
28
+ assert_respond_to(File, :nl_convert)
29
+ assert_nothing_raised{ File.nl_convert(@test_file2) }
30
+ assert_nothing_raised{ File.nl_convert(@test_file2, @test_file2) }
31
+ assert_nothing_raised{ File.nl_convert(@test_file2, @test_file2, "unix") }
32
+ end
33
+
34
+ def test_nl_convert_to_dos
35
+ msg = "dos file should be larger, but isn't"
36
+
37
+ assert_nothing_raised{ File.nl_convert(@test_file1, @dos_file, "dos") }
38
+ assert_equal(true, File.size(@dos_file) > File.size(@test_file1), msg)
39
+ assert_equal(["\cM","\cJ"],
40
+ IO.readlines(@dos_file).first.split("")[-2..-1]
41
+ )
42
+ end
43
+
44
+ def test_nl_convert_to_mac
45
+ if File::ALT_SEPARATOR
46
+ msg = "test may fail on Win32"
47
+ else
48
+ msg = "mac file should be the same size (or larger), but isn't"
49
+ end
50
+
51
+ assert_nothing_raised{ File.nl_convert(@test_file1, @mac_file, "mac") }
52
+ assert_equal(true, File.size(@mac_file) == File.size(@test_file1), msg)
53
+ assert_equal("\cM", IO.readlines(@mac_file).first.split("").last)
54
+ end
55
+
56
+ def test_nl_convert_to_unix
57
+ msg = "unix file should be the same size (or smaller), but isn't"
58
+
59
+ assert_nothing_raised{ File.nl_convert(@test_file1, @unix_file, "unix") }
60
+ assert_equal("\n", IO.readlines(@unix_file).first.split("").last)
61
+
62
+ if File::ALT_SEPARATOR
63
+ assert_equal(true, File.size(@unix_file) >= File.size(@test_file1),msg)
64
+ else
65
+ assert_equal(true, File.size(@unix_file) <= File.size(@test_file1),msg)
66
+ end
67
+ end
68
+
69
+ def test_nl_convert_expected_errors
70
+ assert_raises(ArgumentError){ File.nl_convert }
71
+ assert_raises(ArgumentError){ File.nl_convert(@test_file1, "bogus.txt", "blah") }
72
+ end
73
+
74
+ def teardown
75
+ [@dos_file, @mac_file, @unix_file].each{ |file|
76
+ File.delete(file) if File.exists?(file)
77
+ }
78
+ end
79
+ end
data/test/tc_tail.rb ADDED
@@ -0,0 +1,50 @@
1
+ ########################################
2
+ # tc_tail.rb
3
+ #
4
+ # Test case for the File.tail method.
5
+ ########################################
6
+ base = File.basename(Dir.pwd)
7
+
8
+ if base == "test" or base =~ /ptools/
9
+ Dir.chdir("..") if base == "test"
10
+ $LOAD_PATH.unshift(Dir.pwd)
11
+ $LOAD_PATH.unshift(Dir.pwd + "/lib")
12
+ Dir.chdir("test") if Dir.pwd != "test"
13
+ end
14
+
15
+ require "test/unit"
16
+ require "ptools"
17
+
18
+ class TC_FileTail < Test::Unit::TestCase
19
+ def setup
20
+ @test_file = 'test_file1.txt'
21
+
22
+ @expected_tail1 = ["line16\n","line17\n","line18\n","line19\n"]
23
+ @expected_tail1.push("line20\n","line21\n","line22\n", "line23\n")
24
+ @expected_tail1.push("line24\n","line25\n")
25
+
26
+ @expected_tail2 = ["line21\n","line22\n","line23\n","line24\n","line25\n"]
27
+ end
28
+
29
+ def test_tail_basic
30
+ assert_respond_to(File, :tail)
31
+ assert_nothing_raised{ File.tail(@test_file) }
32
+ assert_nothing_raised{ File.tail(@test_file, 5) }
33
+ assert_nothing_raised{ File.tail(@test_file){} }
34
+ end
35
+
36
+ def test_tail_expected_return_values
37
+ assert_kind_of(Array, File.tail(@test_file))
38
+ assert_equal(@expected_tail1, File.tail(@test_file))
39
+ assert_equal(@expected_tail2, File.tail(@test_file, 5))
40
+ end
41
+
42
+ def test_tail_expected_errors
43
+ assert_raises(ArgumentError){ File.tail }
44
+ assert_raises(ArgumentError){ File.tail(@test_file, 5, 5) }
45
+ end
46
+
47
+ def teardown
48
+ @test_file = nil
49
+ end
50
+ end
data/test/tc_touch.rb ADDED
@@ -0,0 +1,41 @@
1
+ ###########################################
2
+ # tc_touch.rb
3
+ #
4
+ # Test case for the File.touch method.
5
+ ###########################################
6
+ base = File.basename(Dir.pwd)
7
+
8
+ if base == "test" or base =~ /ptools/
9
+ Dir.chdir("..") if base == "test"
10
+ $LOAD_PATH.unshift(Dir.pwd)
11
+ $LOAD_PATH.unshift(Dir.pwd + "/lib")
12
+ Dir.chdir("test") if Dir.pwd != "test"
13
+ end
14
+
15
+ require "test/unit"
16
+ require "ptools"
17
+
18
+ class TC_FileTouch < Test::Unit::TestCase
19
+ def setup
20
+ @test_file = "delete.this"
21
+ end
22
+
23
+ def test_touch_basic
24
+ assert_respond_to(File, :touch)
25
+ assert_nothing_raised{ File.touch(@test_file) }
26
+ end
27
+
28
+ def test_touch_expected_results
29
+ assert_equal(File, File.touch(@test_file))
30
+ assert_equal(true, File.exists?(@test_file))
31
+ assert_equal(0, File.size(@test_file))
32
+ end
33
+
34
+ def test_touch_expected_errors
35
+ assert_raises(ArgumentError){ File.touch }
36
+ end
37
+
38
+ def teardown
39
+ File.delete(@test_file) if File.exists?(@test_file)
40
+ end
41
+ end
data/test/tc_wc.rb ADDED
@@ -0,0 +1,49 @@
1
+ ####################################
2
+ # tc_wc.rb
3
+ #
4
+ # Test case for the File.wc method.
5
+ ####################################
6
+ base = File.basename(Dir.pwd)
7
+
8
+ if base == "test" or base =~ /ptools/
9
+ Dir.chdir("..") if base == "test"
10
+ $LOAD_PATH.unshift(Dir.pwd)
11
+ $LOAD_PATH.unshift(Dir.pwd + "/lib")
12
+ Dir.chdir("test") if Dir.pwd != "test"
13
+ end
14
+
15
+ require "test/unit"
16
+ require "ptools"
17
+
18
+ class TC_FileWC < Test::Unit::TestCase
19
+ def setup
20
+ @test_file = 'test_file1.txt'
21
+ end
22
+
23
+ def test_wc_basic
24
+ assert_respond_to(File, :wc)
25
+ assert_nothing_raised{ File.wc(@test_file) }
26
+ assert_nothing_raised{ File.wc(@test_file, 'bytes') }
27
+ assert_nothing_raised{ File.wc(@test_file, 'chars') }
28
+ assert_nothing_raised{ File.wc(@test_file, 'words') }
29
+ assert_nothing_raised{ File.wc(@test_file, 'LINES') }
30
+ end
31
+
32
+ def test_wc_results
33
+ assert_kind_of(Array, File.wc(@test_file))
34
+ assert_equal([166,166,25,25], File.wc(@test_file))
35
+ assert_equal(166, File.wc(@test_file,'bytes'), "Wrong number of bytes")
36
+ assert_equal(166, File.wc(@test_file,'chars'), "Wrong number of chars")
37
+ assert_equal(25, File.wc(@test_file,'words'), "Wrong number of words")
38
+ assert_equal(25, File.wc(@test_file,'lines'), "Wrong number of lines")
39
+ end
40
+
41
+ def test_wc_expected_errors
42
+ assert_raises(ArgumentError){ File.wc }
43
+ assert_raises(ArgumentError){ File.wc(@test_file, "bogus") }
44
+ end
45
+
46
+ def teardown
47
+ @test_file = nil
48
+ end
49
+ end
@@ -0,0 +1,52 @@
1
+ ##########################################
2
+ # tc_whereis.rb
3
+ #
4
+ # Test case for the File.whereis method.
5
+ ##########################################
6
+ base = File.basename(Dir.pwd)
7
+
8
+ if base == "test" or base =~ /ptools/
9
+ Dir.chdir("..") if base == "test"
10
+ $LOAD_PATH.unshift(Dir.pwd)
11
+ $LOAD_PATH.unshift(Dir.pwd + "/lib")
12
+ Dir.chdir("test") if Dir.pwd != "test"
13
+ end
14
+
15
+ require "test/unit"
16
+ require "ptools"
17
+
18
+ class TC_FileWhereis < Test::Unit::TestCase
19
+
20
+ def setup
21
+ # Change this to suit your system
22
+ @expected_locs = ['/usr/local/bin/ruby','/opt/sfw/bin/ruby']
23
+ @expected_locs.push('/opt/bin/ruby', '/usr/bin/ruby')
24
+
25
+ # MS Windows - change as needed
26
+ if File::ALT_SEPARATOR
27
+ @expected_locs = ["c:\\ruby\\bin\\ruby.exe"]
28
+ end
29
+ end
30
+
31
+ def test_whereis_basic
32
+ assert_respond_to(File, :whereis)
33
+ assert_nothing_raised{ File.whereis("ruby") }
34
+ assert_nothing_raised{ File.whereis("ruby","/usr/bin:/usr/local/bin") }
35
+ assert_nothing_raised{ File.whereis("ruby"){} }
36
+ end
37
+
38
+ def test_whereis_expected_return_values
39
+ assert_kind_of(Array, File.whereis("ruby"))
40
+ assert_equal(true, @expected_locs.include?(File.whereis("ruby").first))
41
+ assert_equal(nil, File.whereis("blahblah"))
42
+ end
43
+
44
+ def test_whereis_expected_errors
45
+ assert_raises(ArgumentError){ File.whereis }
46
+ assert_raises(ArgumentError){ File.whereis("ruby","foo","bar") }
47
+ end
48
+
49
+ def teardown
50
+ @expected_locs = nil
51
+ end
52
+ end
data/test/tc_which.rb ADDED
@@ -0,0 +1,54 @@
1
+ ########################################
2
+ # tc_which.rb
3
+ #
4
+ # Test case for the File.which method.
5
+ ########################################
6
+ base = File.basename(Dir.pwd)
7
+
8
+ if base == "test" or base =~ /ptools/
9
+ Dir.chdir("..") if base == "test"
10
+ $LOAD_PATH.unshift(Dir.pwd)
11
+ $LOAD_PATH.unshift(Dir.pwd + "/lib")
12
+ Dir.chdir("test") if Dir.pwd != "test"
13
+ end
14
+
15
+ require 'rbconfig'
16
+ require 'test/unit'
17
+ require 'ptools'
18
+
19
+ # I make the assumption that Ruby is in your PATH for these tests
20
+
21
+ class TC_FileWhich < Test::Unit::TestCase
22
+ include Config
23
+
24
+ def setup
25
+ @exe = File.join(CONFIG["bindir"], CONFIG["ruby_install_name"])
26
+
27
+ if File::ALT_SEPARATOR
28
+ @exe.tr!('/','\\')
29
+ @exe << ".exe"
30
+ end
31
+ end
32
+
33
+ def test_which_basic
34
+ assert_respond_to(File, :which)
35
+ assert_nothing_raised{ File.which("ruby") }
36
+ assert_nothing_raised{ File.which("ruby", "/usr/bin:/usr/local/bin") }
37
+ end
38
+
39
+ def test_which_expected_return_values
40
+ assert_kind_of(String, File.which("ruby"))
41
+ assert_equal(@exe, File.which("ruby"))
42
+ assert_equal(nil, File.which("ruby", "/bogus/path"))
43
+ assert_equal(nil, File.which("blahblah"))
44
+ end
45
+
46
+ def test_which_expected_errors
47
+ assert_raises(ArgumentError){ File.which }
48
+ assert_raises(ArgumentError){ File.which("ruby", "foo", "bar") }
49
+ end
50
+
51
+ def teardown
52
+ @exe = nil
53
+ end
54
+ end
@@ -0,0 +1,25 @@
1
+ line1
2
+ line2
3
+ line3
4
+ line4
5
+ line5
6
+ line6
7
+ line7
8
+ line8
9
+ line9
10
+ line10
11
+ line11
12
+ line12
13
+ line13
14
+ line14
15
+ line15
16
+ line16
17
+ line17
18
+ line18
19
+ line19
20
+ line20
21
+ line21
22
+ line22
23
+ line23
24
+ line24
25
+ line25
@@ -0,0 +1,25 @@
1
+ line1
2
+ line2
3
+ line3
4
+ line4
5
+ line5
6
+ line6
7
+ line7
8
+ line8
9
+ line9
10
+ line10
11
+ line11
12
+ line12
13
+ line13
14
+ line14
15
+ line15
16
+ line16
17
+ line17
18
+ line18
19
+ line19
20
+ line20
21
+ line21
22
+ line22
23
+ line23
24
+ line24
25
+ line25
data/test/ts_all.rb ADDED
@@ -0,0 +1,17 @@
1
+ ########################################
2
+ # ts_all.rb
3
+ #
4
+ # All tests for the ptools package.
5
+ ########################################
6
+ $LOAD_PATH.unshift(Dir.pwd)
7
+ $LOAD_PATH.unshift(Dir.pwd + "/test")
8
+
9
+ require 'tc_constants'
10
+ require 'tc_head'
11
+ require 'tc_middle'
12
+ require 'tc_nlconvert'
13
+ require 'tc_tail'
14
+ require 'tc_touch'
15
+ require 'tc_wc'
16
+ require 'tc_which'
17
+ require 'tc_whereis'
metadata ADDED
@@ -0,0 +1,55 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.8.10
3
+ specification_version: 1
4
+ name: ptools
5
+ version: !ruby/object:Gem::Version
6
+ version: 1.0.0
7
+ date: 2005-06-02
8
+ summary: Extra methods for the File class
9
+ require_paths:
10
+ - lib
11
+ email: djberg96@gmail.com
12
+ homepage: http://www.rubyforge.org/projects/shards
13
+ rubyforge_project:
14
+ description:
15
+ autorequire:
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: true
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ -
22
+ - ">"
23
+ - !ruby/object:Gem::Version
24
+ version: 0.0.0
25
+ version:
26
+ platform: ruby
27
+ authors:
28
+ - Daniel J. Berger
29
+ files:
30
+ - lib/ptools.rb
31
+ - README
32
+ - CHANGES
33
+ - MANIFEST
34
+ - test/tc_head.rb
35
+ - test/ts_all.rb
36
+ - test/tc_whereis.rb
37
+ - test/tc_middle.rb
38
+ - test/tc_which.rb
39
+ - test/tc_constants.rb
40
+ - test/tc_tail.rb
41
+ - test/tc_wc.rb
42
+ - test/tc_nlconvert.rb
43
+ - test/test_file1.txt
44
+ - test/test_file2.txt
45
+ - test/tc_touch.rb
46
+ test_files:
47
+ - test/ts_all.rb
48
+ rdoc_options: []
49
+ extra_rdoc_files:
50
+ - README
51
+ - CHANGES
52
+ executables: []
53
+ extensions: []
54
+ requirements: []
55
+ dependencies: []