file-find 0.3.7 → 0.3.8
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.
- 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
|