file-find 0.3.7 → 0.3.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/CHANGES +10 -0
- data/README +12 -22
- data/Rakefile +0 -6
- data/file-find.gemspec +3 -3
- data/lib/file/find.rb +39 -49
- data/test/test_file_find.rb +150 -82
- metadata +24 -37
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
MTlkYmUzYzBmOWE2Nzk0ZTVkMzk3OGU0NDZlZDg4MGM2MjRiN2I5OA==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 0f07a119a3ad4179edcb7ea6dd0c0cfa0fd2efa9
|
4
|
+
data.tar.gz: 62762fc4f258b1174f673e198c5a6445bcf7a8d6
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
ZmZhYTVlNTk4MDMwYjkwYjA1N2ZiNmE3ODllNDBjMjU3YjcxMmFjZDg5MTU2
|
11
|
-
NWI3ZjkwMWQ5NjkyMDI4YzMxNjBiZjZkMjFjNDc5YzI3MTQ5NTk=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
YjYyYTNmZGUyODI2OGZiZTA0MGJmYTg1OWFhOGFkMWY5Yjg5MjkyNmJkYjI1
|
14
|
-
MjI3NzcwM2VkMzc5YTkwYmY0MmE2ZTlkYWQ4NTU1ZDBmN2YyZTA1MzYwYTY1
|
15
|
-
NGQ2MmI3NmY4OWE4N2Q1MTk2NTM1OTI3YTQ2NjhjNWE5OTQ5MWM=
|
6
|
+
metadata.gz: f2f291fbd58a30acb7a0b8a9a58a00f90fea8466670428af17055dd3f499816ff014ac60641b66df409a0b4ec367158205c5b4f9cbfd73c426f3b7b0d7e6e83f
|
7
|
+
data.tar.gz: 6478327935c6eab676d1806d679e1ad26e920dbe6ff4e3663c2541f999bc5dfa01733e52364d0b3c6fd64fedeae40a14611bc21f178cce3d141a32a10f0689a7
|
data/CHANGES
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
== 0.3.8 - 12-Feb-2014
|
2
|
+
* Removed all references to the Etc module since the sys-admin library now uses
|
3
|
+
FFI and works with JRuby.
|
4
|
+
* The :user, :group, and :inum options will now work on MS Windows if you have
|
5
|
+
the win32-file gem installed.
|
6
|
+
* Fixed the perm option on Windows for its limited subset of available perms.
|
7
|
+
* You can now include a leading zero for the perm option if you wish.
|
8
|
+
* Some tests that were previously omitted on Windows are now included.
|
9
|
+
* Updates to the test suite, readme, etc.
|
10
|
+
|
1
11
|
== 0.3.7 - 15-Jan-2014
|
2
12
|
* Fixed a bug with brackets in the path name. Thanks go to Jeremy Lawler
|
3
13
|
for the spot and the patch.
|
data/README
CHANGED
@@ -2,6 +2,10 @@
|
|
2
2
|
This is a drop-in replacement for the find module currently in the standard
|
3
3
|
library. It is modeled on a typical 'find' command found on most Unix systems.
|
4
4
|
|
5
|
+
= Installation
|
6
|
+
|
7
|
+
gem install file-find
|
8
|
+
|
5
9
|
= Synopsis
|
6
10
|
require 'file/find'
|
7
11
|
|
@@ -15,12 +19,7 @@
|
|
15
19
|
puts f
|
16
20
|
}
|
17
21
|
|
18
|
-
= Installation
|
19
|
-
|
20
|
-
gem install file-find
|
21
|
-
|
22
22
|
= Rationale
|
23
|
-
|
24
23
|
The current find module in the standard library is inadequate. It is, quite
|
25
24
|
frankly, not much more than a plain Dir.glob call. This library provides an
|
26
25
|
interface based on options typically available on your command line 'find'
|
@@ -31,7 +30,7 @@
|
|
31
30
|
* ctime
|
32
31
|
* follow
|
33
32
|
* ftype
|
34
|
-
* inum
|
33
|
+
* inum
|
35
34
|
* group (name or id)
|
36
35
|
* maxdepth
|
37
36
|
* mindepth
|
@@ -39,7 +38,7 @@
|
|
39
38
|
* mtime
|
40
39
|
* name (or 'pattern')
|
41
40
|
* path
|
42
|
-
* perm
|
41
|
+
* perm
|
43
42
|
* prune
|
44
43
|
* size
|
45
44
|
* user (name or id)
|
@@ -50,15 +49,9 @@
|
|
50
49
|
See the RDoc documentation for more details about these options.
|
51
50
|
|
52
51
|
= Future Plans
|
53
|
-
|
54
|
-
considered. Please log any feature requests on the project page at
|
55
|
-
http://www.rubyforge.org/projects/shards.
|
52
|
+
None at this time. Please log any feature requests on the project page at:
|
56
53
|
|
57
|
-
|
58
|
-
|
59
|
-
* exec
|
60
|
-
* links
|
61
|
-
* support for :user and :group on MS Windows
|
54
|
+
http://github.com/djberg96/file-find
|
62
55
|
|
63
56
|
= Options I won't support
|
64
57
|
Generally speaking, anything that would require mucking around with C code
|
@@ -78,13 +71,10 @@
|
|
78
71
|
= Known Issues
|
79
72
|
The mindepth and maxdepth options do not work for more than 1 path.
|
80
73
|
|
81
|
-
The
|
82
|
-
permissions, i.e. 664 and 666. This is arguably a bug in Ruby's
|
83
|
-
File::Stat.mode method on MS Windows.
|
74
|
+
The :perm option is limited to 0644 and 0444 on MS Windows.
|
84
75
|
|
85
|
-
The
|
86
|
-
|
87
|
-
win32-file-stat libraries (which would then become dependencies).
|
76
|
+
The :user, :group, and :inum options require the win32-file gem to work
|
77
|
+
properly on MS Windows. However, it is not officially a dependency.
|
88
78
|
|
89
79
|
There are 3 test failures with JRuby, all related to the 'perm' option. I
|
90
80
|
have not been able to reduce them to a simple test case and discern the
|
@@ -107,7 +97,7 @@
|
|
107
97
|
Artistic 2.0
|
108
98
|
|
109
99
|
= Copyright
|
110
|
-
(C) 2007-
|
100
|
+
(C) 2007-2014, Daniel J. Berger, All Rights Reserved
|
111
101
|
|
112
102
|
= Author
|
113
103
|
Daniel J. Berger
|
data/Rakefile
CHANGED
@@ -8,12 +8,6 @@ namespace :gem do
|
|
8
8
|
desc 'Create the file-find gem'
|
9
9
|
task :create => [:clean] do
|
10
10
|
spec = eval(IO.read('file-find.gemspec'))
|
11
|
-
if RUBY_PLATFORM.match('java')
|
12
|
-
spec.platform = Gem::Platform::CURRENT
|
13
|
-
else
|
14
|
-
spec.add_dependency('sys-admin', '>= 1.5.2')
|
15
|
-
end
|
16
|
-
|
17
11
|
if Gem::VERSION.to_f < 2.0
|
18
12
|
Gem::Builder.new(spec).build
|
19
13
|
else
|
data/file-find.gemspec
CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = 'file-find'
|
5
|
-
spec.version = '0.3.
|
5
|
+
spec.version = '0.3.8'
|
6
6
|
spec.author = 'Daniel Berger'
|
7
7
|
spec.license = 'Artistic 2.0'
|
8
8
|
spec.summary = 'A better way to find files'
|
@@ -14,8 +14,8 @@ Gem::Specification.new do |spec|
|
|
14
14
|
spec.rubyforge_project = 'shards'
|
15
15
|
spec.extra_rdoc_files = ['README', 'CHANGES', 'MANIFEST']
|
16
16
|
|
17
|
-
spec.
|
18
|
-
spec.add_development_dependency('
|
17
|
+
spec.add_dependency('sys-admin', '>= 1.6.0')
|
18
|
+
spec.add_development_dependency('test-unit')
|
19
19
|
spec.add_development_dependency('rake')
|
20
20
|
|
21
21
|
spec.description = <<-EOF
|
data/lib/file/find.rb
CHANGED
@@ -1,19 +1,18 @@
|
|
1
1
|
require 'date'
|
2
|
+
require 'sys/admin'
|
2
3
|
|
3
|
-
# For alternate implementations of Ruby, such as JRuby, that cannot
|
4
|
-
# build C extensions fall back to the Etc module.
|
5
4
|
begin
|
6
|
-
require '
|
5
|
+
require 'win32/file'
|
7
6
|
rescue LoadError
|
8
|
-
|
7
|
+
# Do nothing, not required, just nicer.
|
9
8
|
end
|
10
9
|
|
11
10
|
class File::Find
|
12
11
|
# The version of the file-find library
|
13
|
-
VERSION = '0.3.
|
12
|
+
VERSION = '0.3.8'
|
14
13
|
|
15
14
|
# :stopdoc:
|
16
|
-
VALID_OPTIONS = %w
|
15
|
+
VALID_OPTIONS = %w[
|
17
16
|
atime
|
18
17
|
ctime
|
19
18
|
follow
|
@@ -32,7 +31,7 @@ class File::Find
|
|
32
31
|
prune
|
33
32
|
size
|
34
33
|
user
|
35
|
-
|
34
|
+
]
|
36
35
|
# :startdoc:
|
37
36
|
|
38
37
|
# The starting path(s) for the search. The default is the current directory.
|
@@ -60,8 +59,6 @@ class File::Find
|
|
60
59
|
# Limits searches to files that belong to a specific group, where the
|
61
60
|
# group can be either a group name or ID.
|
62
61
|
#
|
63
|
-
# Not currently supported on MS Windows.
|
64
|
-
#
|
65
62
|
attr_accessor :group
|
66
63
|
|
67
64
|
# An array of two element arrays for storing FileTest methods and their
|
@@ -80,8 +77,7 @@ class File::Find
|
|
80
77
|
#
|
81
78
|
attr_accessor :ftype
|
82
79
|
|
83
|
-
# Limits search to a file with a specific inode number.
|
84
|
-
# Windows.
|
80
|
+
# Limits search to a file with a specific inode number.
|
85
81
|
#
|
86
82
|
attr_accessor :inum
|
87
83
|
|
@@ -117,12 +113,11 @@ class File::Find
|
|
117
113
|
|
118
114
|
# Limits searches to files which have permissions that match the octal
|
119
115
|
# value that you provide. For purposes of this comparison, only the user,
|
120
|
-
# group, and world settings are used.
|
121
|
-
# that you supply, e.g. use 755 not 0755.
|
116
|
+
# group, and world settings are used.
|
122
117
|
#
|
123
118
|
# You may optionally use symbolic permissions, e.g. "g+rw", "u=rwx", etc.
|
124
119
|
#
|
125
|
-
#
|
120
|
+
# MS Windows only recognizes two modes, 0644 and 0444.
|
126
121
|
#
|
127
122
|
attr_accessor :perm
|
128
123
|
|
@@ -140,8 +135,6 @@ class File::Find
|
|
140
135
|
# Limits searches to files that belong to a specific user, where the user
|
141
136
|
# can be either a user name or an ID.
|
142
137
|
#
|
143
|
-
# Not currently supported on MS Windows.
|
144
|
-
#
|
145
138
|
attr_accessor :user
|
146
139
|
|
147
140
|
# The file that matched previously in the current search.
|
@@ -339,28 +332,35 @@ class File::Find
|
|
339
332
|
|
340
333
|
if @group
|
341
334
|
if @group.is_a?(String)
|
342
|
-
|
335
|
+
if File::ALT_SEPARATOR
|
336
|
+
begin
|
337
|
+
next unless Sys::Admin.get_group(stat_info.gid, :LocalAccount => true).name == @group
|
338
|
+
rescue Sys::Admin::Error
|
339
|
+
next
|
340
|
+
end
|
341
|
+
else
|
342
|
+
begin
|
343
|
+
next unless Sys::Admin.get_group(stat_info.gid).name == @group
|
344
|
+
rescue Sys::Admin::Error
|
345
|
+
next
|
346
|
+
end
|
347
|
+
end
|
343
348
|
else
|
344
349
|
next unless stat_info.gid == @group
|
345
350
|
end
|
346
351
|
end
|
347
352
|
|
348
|
-
|
349
|
-
|
350
|
-
next unless stat_info.ino == @inum
|
351
|
-
end
|
353
|
+
if @inum
|
354
|
+
next unless stat_info.ino == @inum
|
352
355
|
end
|
353
356
|
|
354
|
-
#
|
355
|
-
# fashion for 0666 and 0664, because File.stat.mode doesn't
|
356
|
-
# return the proper value.
|
357
|
-
#
|
357
|
+
# Note that only 0644 and 0444 are supported on MS Windows.
|
358
358
|
if @perm
|
359
359
|
if @perm.is_a?(String)
|
360
360
|
octal_perm = sym2oct(@perm)
|
361
361
|
next unless stat_info.mode & octal_perm == octal_perm
|
362
362
|
else
|
363
|
-
next unless sprintf("%o", stat_info.mode & 07777) == @perm
|
363
|
+
next unless sprintf("%o", stat_info.mode & 07777) == sprintf("%o", @perm)
|
364
364
|
end
|
365
365
|
end
|
366
366
|
|
@@ -385,7 +385,19 @@ class File::Find
|
|
385
385
|
|
386
386
|
if @user
|
387
387
|
if @user.is_a?(String)
|
388
|
-
|
388
|
+
if File::ALT_SEPARATOR
|
389
|
+
begin
|
390
|
+
next unless Sys::Admin.get_user(stat_info.uid, :LocalAccount => true).name == @user
|
391
|
+
rescue Sys::Admin::Error
|
392
|
+
next
|
393
|
+
end
|
394
|
+
else
|
395
|
+
begin
|
396
|
+
next unless Sys::Admin.get_user(stat_info.uid).name == @user
|
397
|
+
rescue Sys::Admin::Error
|
398
|
+
next
|
399
|
+
end
|
400
|
+
end
|
389
401
|
else
|
390
402
|
next unless stat_info.uid == @user
|
391
403
|
end
|
@@ -477,26 +489,4 @@ class File::Find
|
|
477
489
|
|
478
490
|
perm
|
479
491
|
end
|
480
|
-
|
481
|
-
# Returns the group object based on the group id. Implemented for the
|
482
|
-
# sake of platforms that cannot build extensions, such as JRuby.
|
483
|
-
#
|
484
|
-
def get_group(gid)
|
485
|
-
if defined? Sys::Admin
|
486
|
-
Sys::Admin.get_group(gid)
|
487
|
-
else
|
488
|
-
Etc.getgrgid(gid)
|
489
|
-
end
|
490
|
-
end
|
491
|
-
|
492
|
-
# Returns the user object based on the group id. Implemented for the
|
493
|
-
# sake of platforms that cannot build extensions, such as JRuby.
|
494
|
-
#
|
495
|
-
def get_user(uid)
|
496
|
-
if defined? Sys::Admin
|
497
|
-
Sys::Admin.get_user(uid)
|
498
|
-
else
|
499
|
-
Etc.getpwuid(uid)
|
500
|
-
end
|
501
|
-
end
|
502
492
|
end
|
data/test/test_file_find.rb
CHANGED
@@ -7,11 +7,11 @@
|
|
7
7
|
require 'test-unit'
|
8
8
|
require 'fileutils'
|
9
9
|
require 'file/find'
|
10
|
+
require 'sys/admin'
|
10
11
|
|
11
|
-
|
12
|
-
require '
|
13
|
-
|
14
|
-
require 'etc'
|
12
|
+
if File::ALT_SEPARATOR
|
13
|
+
require 'win32/file'
|
14
|
+
require 'win32/security'
|
15
15
|
end
|
16
16
|
|
17
17
|
include FileUtils
|
@@ -23,14 +23,16 @@ class TC_File_Find < Test::Unit::TestCase
|
|
23
23
|
@@windows = File::ALT_SEPARATOR
|
24
24
|
@@jruby = RUBY_PLATFORM.match('java')
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
@@
|
26
|
+
if @@windows
|
27
|
+
@@elevated = Win32::Security.elevated_security?
|
28
|
+
if @@elevated
|
29
|
+
@@loguser = Sys::Admin.get_group("Administrators", :LocalAccount => true)
|
30
30
|
else
|
31
|
-
@@loguser = Sys::Admin.get_user(Sys::Admin.get_login)
|
32
|
-
@@logroup = Sys::Admin.get_group(@@loguser.gid)
|
31
|
+
@@loguser = Sys::Admin.get_user(Sys::Admin.get_login, :LocalAccount => true)
|
33
32
|
end
|
33
|
+
else
|
34
|
+
@@loguser = Sys::Admin.get_user(Sys::Admin.get_login)
|
35
|
+
@@logroup = Sys::Admin.get_group(@@loguser.gid)
|
34
36
|
end
|
35
37
|
end
|
36
38
|
|
@@ -47,13 +49,16 @@ class TC_File_Find < Test::Unit::TestCase
|
|
47
49
|
File.open(@file_txt2, 'w'){}
|
48
50
|
File.open(@file_doc, 'w'){}
|
49
51
|
|
50
|
-
|
51
|
-
|
52
|
+
@link1 = 'link1'
|
53
|
+
|
54
|
+
if @@windows
|
55
|
+
File.symlink(@file_rb, @link1) if @@elevated
|
56
|
+
else
|
52
57
|
File.symlink(@file_rb, @link1)
|
53
58
|
end
|
54
59
|
|
55
|
-
Dir.mkdir(@directory1) unless File.
|
56
|
-
Dir.mkdir(@directory2) unless File.
|
60
|
+
Dir.mkdir(@directory1) unless File.exist?(@directory1)
|
61
|
+
Dir.mkdir(@directory2) unless File.exist?(@directory2)
|
57
62
|
|
58
63
|
File.open(File.join(@directory1, 'bar.txt'), 'w'){}
|
59
64
|
File.open(File.join(@directory2, 'baz.txt'), 'w'){}
|
@@ -62,29 +67,38 @@ class TC_File_Find < Test::Unit::TestCase
|
|
62
67
|
@rule2 = File::Find.new
|
63
68
|
end
|
64
69
|
|
65
|
-
|
66
|
-
assert_equal('0.3.
|
70
|
+
test "version constant is set to expected value" do
|
71
|
+
assert_equal('0.3.8', File::Find::VERSION)
|
67
72
|
end
|
68
73
|
|
69
|
-
|
74
|
+
test "path accessor basic functionality" do
|
70
75
|
assert_respond_to(@rule1, :path)
|
71
76
|
assert_respond_to(@rule1, :path=)
|
77
|
+
end
|
78
|
+
|
79
|
+
test "path method returns expected value" do
|
72
80
|
assert_equal(Dir.pwd, @rule1.path)
|
73
81
|
end
|
74
82
|
|
75
|
-
|
83
|
+
test "options accessor basic functionality" do
|
76
84
|
assert_respond_to(@rule1, :options)
|
77
85
|
assert_respond_to(@rule1, :options=)
|
86
|
+
end
|
87
|
+
|
88
|
+
test "options method returns expected value" do
|
78
89
|
assert_equal({:name => '*.txt'}, @rule1.options)
|
79
90
|
end
|
80
91
|
|
81
|
-
|
92
|
+
test "atime accessor basic functionality" do
|
82
93
|
assert_respond_to(@rule1, :atime)
|
83
94
|
assert_respond_to(@rule1, :atime=)
|
95
|
+
end
|
96
|
+
|
97
|
+
test "atime method returns expected default value" do
|
84
98
|
assert_nil(@rule1.atime)
|
85
99
|
end
|
86
100
|
|
87
|
-
|
101
|
+
test "find with atime option works as expected" do
|
88
102
|
rule1 = File::Find.new(:name => "*.rb", :atime => 0)
|
89
103
|
rule2 = File::Find.new(:name => "*.rb", :atime => 1)
|
90
104
|
|
@@ -92,13 +106,16 @@ class TC_File_Find < Test::Unit::TestCase
|
|
92
106
|
assert_true(rule2.find.empty?)
|
93
107
|
end
|
94
108
|
|
95
|
-
|
109
|
+
test "ctime accessor basic functionality" do
|
96
110
|
assert_respond_to(@rule1, :ctime)
|
97
111
|
assert_respond_to(@rule1, :ctime=)
|
112
|
+
end
|
113
|
+
|
114
|
+
test "ctime method returns expected default value" do
|
98
115
|
assert_nil(@rule1.ctime)
|
99
116
|
end
|
100
117
|
|
101
|
-
|
118
|
+
test "find with ctime option works as expected" do
|
102
119
|
rule1 = File::Find.new(:name => "*.rb", :ctime => 0)
|
103
120
|
rule2 = File::Find.new(:name => "*.rb", :ctime => 1)
|
104
121
|
|
@@ -106,31 +123,32 @@ class TC_File_Find < Test::Unit::TestCase
|
|
106
123
|
assert_true(rule2.find.empty?)
|
107
124
|
end
|
108
125
|
|
109
|
-
|
126
|
+
test "find method basic functionality" do
|
110
127
|
assert_respond_to(@rule1, :find)
|
111
128
|
assert_nothing_raised{ @rule1.find }
|
112
129
|
end
|
113
130
|
|
114
|
-
|
131
|
+
test "find method returns expected value" do
|
115
132
|
assert_kind_of(Array, @rule1.find)
|
116
133
|
assert_nil(@rule1.find{})
|
117
134
|
end
|
118
135
|
|
119
|
-
|
136
|
+
test "filetest accessor basic functionality" do
|
120
137
|
assert_respond_to(@rule1, :filetest)
|
121
138
|
assert_respond_to(@rule1, :filetest=)
|
122
139
|
assert_nothing_raised{ @rule1.filetest }
|
140
|
+
end
|
141
|
+
|
142
|
+
test "filetest method returns expected value" do
|
123
143
|
assert_kind_of(Array, @rule1.filetest)
|
124
144
|
end
|
125
145
|
|
126
|
-
|
146
|
+
test "valid filetest options work as expected" do
|
127
147
|
assert_nothing_raised{ File::Find.new(:readable? => true) }
|
128
148
|
assert_nothing_raised{ File::Find.new(:writable? => true) }
|
129
149
|
end
|
130
150
|
|
131
|
-
|
132
|
-
omit_if(@@windows && @@jruby, "Skipping file test on JRuby/Windows")
|
133
|
-
|
151
|
+
test "find method works with filetest option" do
|
134
152
|
rule = File::Find.new(:name => "*.doc", :writable? => true)
|
135
153
|
File.chmod(0644, @file_doc)
|
136
154
|
|
@@ -141,7 +159,16 @@ class TC_File_Find < Test::Unit::TestCase
|
|
141
159
|
assert_equal([], rule.find)
|
142
160
|
end
|
143
161
|
|
144
|
-
|
162
|
+
test "mtime accessor basic functionality" do
|
163
|
+
assert_respond_to(@rule1, :mtime)
|
164
|
+
assert_respond_to(@rule1, :mtime=)
|
165
|
+
end
|
166
|
+
|
167
|
+
test "mtime method returns expected default value" do
|
168
|
+
assert_nil(@rule1.mtime)
|
169
|
+
end
|
170
|
+
|
171
|
+
test "find with mtime option works as expected" do
|
145
172
|
rule1 = File::Find.new(:name => "*.rb", :mtime => 0)
|
146
173
|
rule2 = File::Find.new(:name => "*.rb", :mtime => 1)
|
147
174
|
|
@@ -149,19 +176,16 @@ class TC_File_Find < Test::Unit::TestCase
|
|
149
176
|
assert_true(rule2.find.empty?)
|
150
177
|
end
|
151
178
|
|
152
|
-
|
153
|
-
assert_respond_to(@rule1, :mtime)
|
154
|
-
assert_respond_to(@rule1, :mtime=)
|
155
|
-
assert_nil(@rule1.mtime)
|
156
|
-
end
|
157
|
-
|
158
|
-
def test_ftype_basic
|
179
|
+
test "ftype accessor basic functionality" do
|
159
180
|
assert_respond_to(@rule1, :ftype)
|
160
181
|
assert_respond_to(@rule1, :ftype=)
|
182
|
+
end
|
183
|
+
|
184
|
+
test "ftype method returns expected default value" do
|
161
185
|
assert_nil(@rule1.ftype)
|
162
186
|
end
|
163
187
|
|
164
|
-
|
188
|
+
test "ftype method works as expected" do
|
165
189
|
rule1 = File::Find.new(:name => "*.rb", :ftype => "file")
|
166
190
|
rule2 = File::Find.new(:name => "*.rb", :ftype => "characterSpecial")
|
167
191
|
|
@@ -169,25 +193,30 @@ class TC_File_Find < Test::Unit::TestCase
|
|
169
193
|
assert_true(rule2.find.empty?)
|
170
194
|
end
|
171
195
|
|
172
|
-
|
196
|
+
test "group accessor basic functionality" do
|
173
197
|
assert_respond_to(@rule1, :group)
|
174
198
|
assert_respond_to(@rule1, :group=)
|
199
|
+
end
|
200
|
+
|
201
|
+
test "group method returns expected default value" do
|
175
202
|
assert_nil(@rule1.group)
|
176
203
|
end
|
177
204
|
|
178
|
-
|
205
|
+
# TODO: Update test for Windows
|
206
|
+
test "find with numeric group id works as expected" do
|
179
207
|
omit_if(@@windows, 'group test skipped on MS Windows')
|
180
208
|
@rule1 = File::Find.new(:name => '*.doc', :group => @@loguser.gid)
|
181
209
|
assert_equal([File.expand_path(@file_doc)], @rule1.find)
|
182
210
|
end
|
183
211
|
|
184
|
-
|
212
|
+
# TODO: Update test for Windows
|
213
|
+
test "find with string group id works as expected" do
|
185
214
|
omit_if(@@windows, 'group test skipped on MS Windows')
|
186
215
|
@rule1 = File::Find.new(:name => '*.doc', :group => @@logroup.name)
|
187
216
|
assert_equal([File.expand_path(@file_doc)], @rule1.find)
|
188
217
|
end
|
189
218
|
|
190
|
-
|
219
|
+
test "find with bogus group returns empty results" do
|
191
220
|
omit_if(@@windows, 'group test skipped on MS Windows')
|
192
221
|
@rule1 = File::Find.new(:name => '*.doc', :group => 'totallybogus')
|
193
222
|
@rule2 = File::Find.new(:name => '*.doc', :group => 99999999)
|
@@ -195,27 +224,35 @@ class TC_File_Find < Test::Unit::TestCase
|
|
195
224
|
assert_equal([], @rule2.find)
|
196
225
|
end
|
197
226
|
|
198
|
-
|
227
|
+
test "inum accessor basic functionality" do
|
199
228
|
assert_respond_to(@rule1, :inum)
|
200
229
|
assert_respond_to(@rule1, :inum=)
|
230
|
+
end
|
231
|
+
|
232
|
+
test "inum method returns expected default value" do
|
201
233
|
assert_nil(@rule1.inum)
|
202
234
|
end
|
203
235
|
|
204
|
-
|
236
|
+
test "follow accessor basic functionality" do
|
205
237
|
assert_respond_to(@rule1, :follow)
|
206
238
|
assert_respond_to(@rule1, :follow=)
|
239
|
+
end
|
240
|
+
|
241
|
+
test "follow method returns expected default value" do
|
207
242
|
assert_true(@rule1.follow)
|
208
243
|
end
|
209
244
|
|
210
|
-
|
245
|
+
test "links accessor basic functionality" do
|
211
246
|
assert_respond_to(@rule1, :links)
|
212
247
|
assert_respond_to(@rule1, :links=)
|
213
|
-
assert_nil(@rule1.links)
|
214
248
|
end
|
215
249
|
|
216
|
-
|
217
|
-
|
250
|
+
test "links method returns expected default value" do
|
251
|
+
assert_nil(@rule1.links)
|
252
|
+
end
|
218
253
|
|
254
|
+
test "links method returns expected result" do
|
255
|
+
omit_if(@@windows && !@@elevated)
|
219
256
|
@rule1 = File::Find.new(:name => '*.rb', :links => 2)
|
220
257
|
@rule2 = File::Find.new(:name => '*.doc', :links => 1)
|
221
258
|
|
@@ -234,7 +271,7 @@ class TC_File_Find < Test::Unit::TestCase
|
|
234
271
|
# I did this because I'm a little paranoid about the directory
|
235
272
|
# not getting mangled. - jlawler.
|
236
273
|
#
|
237
|
-
|
274
|
+
test "find method works on dirs that contain brackets" do
|
238
275
|
omit_if(@@windows, 'dirs with brackets test skipped on MS Windows')
|
239
276
|
|
240
277
|
bracket_files = [ 'bracket/a[1]/a.foo', 'bracket/a [2] /b.foo', 'bracket/[a] b [c]/d.foo' ].sort
|
@@ -264,7 +301,7 @@ class TC_File_Find < Test::Unit::TestCase
|
|
264
301
|
assert_equal(bracket_paths, @dir_rule.find.sort )
|
265
302
|
end
|
266
303
|
|
267
|
-
|
304
|
+
test "find with maxdepth option returns expected results" do
|
268
305
|
mkpath('a1/a2/a3')
|
269
306
|
touch('a1/a.foo')
|
270
307
|
touch('a1/a2/b.foo')
|
@@ -290,7 +327,7 @@ class TC_File_Find < Test::Unit::TestCase
|
|
290
327
|
)
|
291
328
|
end
|
292
329
|
|
293
|
-
|
330
|
+
test "find with maxdepth option returns expected results for directories" do
|
294
331
|
mkpath('a/b/c')
|
295
332
|
@rule2.pattern = "c"
|
296
333
|
|
@@ -304,13 +341,16 @@ class TC_File_Find < Test::Unit::TestCase
|
|
304
341
|
assert_equal(['c'], @rule2.find.map{ |e| File.basename(e) })
|
305
342
|
end
|
306
343
|
|
307
|
-
|
344
|
+
test "mindepth accessor basic functionality" do
|
308
345
|
assert_respond_to(@rule1, :mindepth)
|
309
346
|
assert_respond_to(@rule1, :mindepth=)
|
347
|
+
end
|
348
|
+
|
349
|
+
test "mindepth method returns expected default value" do
|
310
350
|
assert_nil(@rule1.mindepth)
|
311
351
|
end
|
312
352
|
|
313
|
-
|
353
|
+
test "find with mindepth option returns expected results" do
|
314
354
|
mkpath('a1/a2/a3')
|
315
355
|
touch('z.min')
|
316
356
|
touch('a1/a.min')
|
@@ -353,7 +393,7 @@ class TC_File_Find < Test::Unit::TestCase
|
|
353
393
|
assert_equal([], @rule2.find.map{ |e| File.basename(e) })
|
354
394
|
end
|
355
395
|
|
356
|
-
|
396
|
+
test "find with mindepth option returns expected results for directories" do
|
357
397
|
mkpath('a/b/c')
|
358
398
|
@rule2.pattern = "a"
|
359
399
|
|
@@ -367,42 +407,54 @@ class TC_File_Find < Test::Unit::TestCase
|
|
367
407
|
assert_equal([], @rule2.find)
|
368
408
|
end
|
369
409
|
|
370
|
-
|
410
|
+
test "mount accessor basic functionality" do
|
371
411
|
assert_respond_to(@rule1, :mount)
|
372
412
|
assert_respond_to(@rule1, :mount=)
|
413
|
+
end
|
414
|
+
|
415
|
+
test "mount method returns expected default value" do
|
373
416
|
assert_nil(@rule1.mount)
|
374
417
|
end
|
375
418
|
|
376
|
-
|
419
|
+
test "name accessor basic functionality" do
|
377
420
|
assert_respond_to(@rule1, :name)
|
378
421
|
assert_respond_to(@rule1, :name=)
|
422
|
+
end
|
423
|
+
|
424
|
+
test "name method returns expected default value" do
|
379
425
|
assert_equal('*.txt', @rule1.name)
|
380
426
|
end
|
381
427
|
|
382
|
-
|
428
|
+
test "pattern accessor basic functionality" do
|
383
429
|
assert_respond_to(@rule1, :pattern)
|
384
430
|
assert_respond_to(@rule1, :pattern=)
|
385
|
-
assert_true(@rule1.method(:name) == @rule1.method(:pattern))
|
386
|
-
assert_true(@rule1.method(:name=) == @rule1.method(:pattern=))
|
387
431
|
end
|
388
432
|
|
389
|
-
|
433
|
+
test "pattern is an alias for name" do
|
434
|
+
assert_alias_method(@rule1, :name, :pattern)
|
435
|
+
assert_alias_method(@rule1, :name=, :pattern=)
|
436
|
+
end
|
437
|
+
|
438
|
+
test "perm accessor basic functionality" do
|
390
439
|
assert_respond_to(@rule1, :perm)
|
391
440
|
assert_respond_to(@rule1, :perm=)
|
441
|
+
end
|
442
|
+
|
443
|
+
test "perm method returns expected default value" do
|
392
444
|
assert_nil(@rule1.perm)
|
393
445
|
end
|
394
446
|
|
395
|
-
|
396
|
-
|
397
|
-
File.chmod(0664, @file_rb)
|
447
|
+
test "perm method returns expected results" do
|
448
|
+
File.chmod(0444, @file_rb)
|
398
449
|
File.chmod(0644, @file_txt1)
|
399
|
-
|
450
|
+
|
451
|
+
results = File::Find.new(:name => "test1*", :perm => 0644).find
|
400
452
|
|
401
453
|
assert_equal(1, results.length)
|
402
|
-
assert_equal('test1.
|
454
|
+
assert_equal('test1.txt', File.basename(results.first))
|
403
455
|
end
|
404
456
|
|
405
|
-
|
457
|
+
test "perm method works with symbolic permissions" do
|
406
458
|
omit_if(@@windows, 'symbolic perm test skipped on MS Windows')
|
407
459
|
|
408
460
|
File.chmod(0664, @file_rb) # test1.rb
|
@@ -416,55 +468,71 @@ class TC_File_Find < Test::Unit::TestCase
|
|
416
468
|
assert_equal(['test1.rb', 'test1.txt'], results2.map{ |e| File.basename(e) }.sort)
|
417
469
|
end
|
418
470
|
|
419
|
-
|
471
|
+
test "prune accessor basic functionality" do
|
420
472
|
assert_respond_to(@rule1, :prune)
|
421
473
|
assert_respond_to(@rule1, :prune=)
|
474
|
+
end
|
475
|
+
|
476
|
+
test "prune method returns expected default value" do
|
422
477
|
assert_nil(@rule1.prune)
|
423
478
|
end
|
424
479
|
|
425
|
-
|
480
|
+
test "find method with prune option works as expected" do
|
426
481
|
rule = File::Find.new(:name => "*.txt", :prune => 'foo')
|
427
482
|
assert_equal('test1.txt', File.basename(rule.find.first))
|
428
483
|
end
|
429
484
|
|
430
|
-
|
485
|
+
test "size accessor basic functionality" do
|
431
486
|
assert_respond_to(@rule1, :size)
|
432
487
|
assert_respond_to(@rule1, :size=)
|
488
|
+
end
|
489
|
+
|
490
|
+
test "size method returns expected default value" do
|
433
491
|
assert_nil(@rule1.size)
|
434
492
|
end
|
435
493
|
|
436
|
-
|
494
|
+
test "user accessor basic functionality" do
|
437
495
|
assert_respond_to(@rule1, :user)
|
438
496
|
assert_respond_to(@rule1, :user=)
|
497
|
+
end
|
498
|
+
|
499
|
+
test "user method returns expected default value" do
|
439
500
|
assert_nil(@rule1.user)
|
440
501
|
end
|
441
502
|
|
442
|
-
|
443
|
-
|
444
|
-
|
503
|
+
test "user method works with numeric id as expected" do
|
504
|
+
if @@windows && @@elevated
|
505
|
+
uid = @@loguser.gid # Windows assigns the group if any member is an admin
|
506
|
+
else
|
507
|
+
uid = @@loguser.uid
|
508
|
+
end
|
509
|
+
|
510
|
+
@rule1 = File::Find.new(:name => '*.doc', :user => uid)
|
445
511
|
assert_equal([File.expand_path(@file_doc)], @rule1.find)
|
446
512
|
end
|
447
513
|
|
448
|
-
|
449
|
-
omit_if(@@windows
|
514
|
+
test "user method works with string as expected" do
|
515
|
+
omit_if(@@windows && @@elevated)
|
450
516
|
@rule1 = File::Find.new(:name => '*.doc', :user => @@loguser.name)
|
451
517
|
assert_equal([File.expand_path(@file_doc)], @rule1.find)
|
452
518
|
end
|
453
519
|
|
454
|
-
|
455
|
-
omit_if(@@windows, 'user test skipped on MS Windows')
|
520
|
+
test "find method with user option using invalid user returns expected results" do
|
456
521
|
@rule1 = File::Find.new(:name => '*.doc', :user => 'totallybogus')
|
457
522
|
@rule2 = File::Find.new(:name => '*.doc', :user => 99999999)
|
458
523
|
assert_equal([], @rule1.find)
|
459
524
|
assert_equal([], @rule2.find)
|
460
525
|
end
|
461
526
|
|
462
|
-
|
527
|
+
test "previous method basic functionality" do
|
463
528
|
assert_respond_to(@rule1, :previous)
|
464
529
|
end
|
465
530
|
|
466
|
-
|
531
|
+
test "an error is raised if the path does not exist" do
|
467
532
|
assert_raise(Errno::ENOENT){ File::Find.new(:path => '/bogus/dir').find }
|
533
|
+
end
|
534
|
+
|
535
|
+
test "an error is raised if an invalid option is passed" do
|
468
536
|
assert_raise(ArgumentError){ File::Find.new(:bogus => 1) }
|
469
537
|
assert_raise(ArgumentError){ File::Find.new(:bogus? => true) }
|
470
538
|
end
|
@@ -476,11 +544,11 @@ class TC_File_Find < Test::Unit::TestCase
|
|
476
544
|
rm_rf(@file_doc)
|
477
545
|
rm_rf(@directory1)
|
478
546
|
rm_rf(@directory2)
|
479
|
-
rm_rf(@link1) unless @@windows
|
547
|
+
rm_rf(@link1) #unless @@windows
|
480
548
|
rm_rf('a')
|
481
549
|
rm_rf('a1')
|
482
550
|
rm_rf('bracket')
|
483
|
-
rm_rf('z.min') if File.
|
551
|
+
rm_rf('z.min') if File.exist?('z.min')
|
484
552
|
|
485
553
|
@rule1 = nil
|
486
554
|
@rule2 = nil
|
@@ -493,7 +561,7 @@ class TC_File_Find < Test::Unit::TestCase
|
|
493
561
|
def self.shutdown
|
494
562
|
@@windows = nil
|
495
563
|
@@jruby = nil
|
496
|
-
@@
|
564
|
+
@@elevated = nil if @@windows
|
497
565
|
@@logroup = nil unless @@windows
|
498
566
|
end
|
499
567
|
end
|
metadata
CHANGED
@@ -1,75 +1,62 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: file-find
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Berger
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-02-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: sys-admin
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
20
|
-
type: :
|
19
|
+
version: 1.6.0
|
20
|
+
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 1.6.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: test-unit
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 1.5.2
|
62
|
-
type: :runtime
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - ! '>='
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: 1.5.2
|
69
|
-
description: ! " The file-find library provides a better, more object oriented
|
70
|
-
approach\n to finding files. It allows you to find files based on a variety of\n
|
71
|
-
\ properties, such as access time, size, owner, etc. You can also limit\n directory
|
72
|
-
depth.\n"
|
55
|
+
description: |2
|
56
|
+
The file-find library provides a better, more object oriented approach
|
57
|
+
to finding files. It allows you to find files based on a variety of
|
58
|
+
properties, such as access time, size, owner, etc. You can also limit
|
59
|
+
directory depth.
|
73
60
|
email: djberg96@gmail.com
|
74
61
|
executables: []
|
75
62
|
extensions: []
|
@@ -79,11 +66,11 @@ extra_rdoc_files:
|
|
79
66
|
- MANIFEST
|
80
67
|
files:
|
81
68
|
- CHANGES
|
82
|
-
- file-find.gemspec
|
83
|
-
- lib/file/find.rb
|
84
69
|
- MANIFEST
|
85
|
-
- Rakefile
|
86
70
|
- README
|
71
|
+
- Rakefile
|
72
|
+
- file-find.gemspec
|
73
|
+
- lib/file/find.rb
|
87
74
|
- test/test_file_find.rb
|
88
75
|
homepage: http://github.com/djberg96/file-find
|
89
76
|
licenses:
|
@@ -95,17 +82,17 @@ require_paths:
|
|
95
82
|
- lib
|
96
83
|
required_ruby_version: !ruby/object:Gem::Requirement
|
97
84
|
requirements:
|
98
|
-
- -
|
85
|
+
- - '>='
|
99
86
|
- !ruby/object:Gem::Version
|
100
87
|
version: '0'
|
101
88
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
102
89
|
requirements:
|
103
|
-
- -
|
90
|
+
- - '>='
|
104
91
|
- !ruby/object:Gem::Version
|
105
92
|
version: '0'
|
106
93
|
requirements: []
|
107
94
|
rubyforge_project: shards
|
108
|
-
rubygems_version: 2.
|
95
|
+
rubygems_version: 2.2.2
|
109
96
|
signing_key:
|
110
97
|
specification_version: 4
|
111
98
|
summary: A better way to find files
|