file-find 0.3.5 → 0.3.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/CHANGES +6 -0
- data/README +6 -3
- data/Rakefile +6 -1
- data/file-find.gemspec +5 -4
- data/lib/file/find.rb +5 -7
- data/test/test_file_find.rb +400 -405
- metadata +79 -70
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
MTNmNWQwYTQ0NDdjNzQ5NDI4YjFjZWY0YjFmZjUzMmY0ZDJmZDNlZA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
YzU0Mzg2ZjA1ZGE2ZDcyOTAxMDZkNWI5YWE3MzI3MDYxNGViYTJmYw==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
YjM2Mjk1YTFlNmIwMzQ3YTNkNmIxOWNlZDE1YjEzOWFjOTVjMzBjNzMzZGYz
|
10
|
+
YTJjNTJjYmQ0ZGYyM2ViYWY4YWJiNTg4YzFmNGUzNTBkNjQyNTUxYWZmNjRk
|
11
|
+
ZGYxZDU3YTdjNDA1YjJmNWU0MjVkOTU4YzcwZjljNGMyZTMwNzA=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
MDg3NjA3OGRiOWFhYzZmZjVkYTk5YjQ5MjRkMDQxZDYyNzZlOGIxMjVmNTUz
|
14
|
+
MjZmMWMxZWY1ZWRhZWFlYzUzMGIxMGRhZTE0ODMxZGYyMjFhM2M4NDRmMjBh
|
15
|
+
YTNkMTQ4MjhmMzQwN2RhNjg3ZDc4NmI2YmExNTJmOWMzOTgwMjU=
|
data/CHANGES
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
== 0.3.6 - 6-Sep-2013
|
2
|
+
* Removed rbconfig from library and test file. Just use File::ALT_SEPARATOR
|
3
|
+
to check for Windows instead.
|
4
|
+
* Removed unused variables.
|
5
|
+
* Updated dev dependencies.
|
6
|
+
|
1
7
|
== 0.3.5 - 15-Jul-2011
|
2
8
|
* Fixed a bug with the :follow option.
|
3
9
|
* Gemspec, Rakefile and test cleanup.
|
data/README
CHANGED
@@ -76,6 +76,8 @@
|
|
76
76
|
* ok - This is not interactive software.
|
77
77
|
|
78
78
|
= Known Issues
|
79
|
+
The mindepth and maxdepth options do not work for more than 1 path.
|
80
|
+
|
79
81
|
The 'perm' option does not work on MS Windows, even for its limited subset of
|
80
82
|
permissions, i.e. 664 and 666. This is arguably a bug in Ruby's
|
81
83
|
File::Stat.mode method on MS Windows.
|
@@ -91,8 +93,9 @@
|
|
91
93
|
|
92
94
|
= Bugs
|
93
95
|
None that I'm aware of beyond the ones mentioned in the Known Issues. Please
|
94
|
-
log any bug reports on the project page at
|
95
|
-
|
96
|
+
log any bug reports on the project page at:
|
97
|
+
|
98
|
+
http://github.com/djberg96/file-find
|
96
99
|
|
97
100
|
= Acknowledgements
|
98
101
|
* Richard Clamp's File::Find::Rule Perl module for additional ideas and
|
@@ -104,7 +107,7 @@
|
|
104
107
|
Artistic 2.0
|
105
108
|
|
106
109
|
= Copyright
|
107
|
-
(C) 2007-
|
110
|
+
(C) 2007-2013, Daniel J. Berger, All Rights Reserved
|
108
111
|
|
109
112
|
= Author
|
110
113
|
Daniel J. Berger
|
data/Rakefile
CHANGED
@@ -14,7 +14,12 @@ namespace :gem do
|
|
14
14
|
spec.add_dependency('sys-admin', '>= 1.5.2')
|
15
15
|
end
|
16
16
|
|
17
|
-
Gem::
|
17
|
+
if Gem::VERSION.to_f < 2.0
|
18
|
+
Gem::Builder.new(spec).build
|
19
|
+
else
|
20
|
+
require 'rubygems/package'
|
21
|
+
Gem::Package.build(spec)
|
22
|
+
end
|
18
23
|
end
|
19
24
|
|
20
25
|
desc "Install the file-find gem"
|
data/file-find.gemspec
CHANGED
@@ -2,20 +2,21 @@ 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.6'
|
6
6
|
spec.author = 'Daniel Berger'
|
7
7
|
spec.license = 'Artistic 2.0'
|
8
8
|
spec.summary = 'A better way to find files'
|
9
9
|
spec.email = 'djberg96@gmail.com'
|
10
|
-
spec.homepage = 'http://
|
11
|
-
spec.platform = Gem::Platform::RUBY
|
10
|
+
spec.homepage = 'http://github.com/djberg96/file-find'
|
12
11
|
spec.files = Dir['**/*'].reject{ |f| f.include?('git') }
|
13
12
|
spec.test_file = 'test/test_file_find.rb'
|
14
13
|
|
15
14
|
spec.rubyforge_project = 'shards'
|
16
15
|
spec.extra_rdoc_files = ['README', 'CHANGES', 'MANIFEST']
|
17
16
|
|
18
|
-
spec.add_development_dependency('test-unit', '>= 2.
|
17
|
+
spec.add_development_dependency('test-unit', '>= 2.5.0')
|
18
|
+
spec.add_development_dependency('sys-admin')
|
19
|
+
spec.add_development_dependency('rake')
|
19
20
|
|
20
21
|
spec.description = <<-EOF
|
21
22
|
The file-find library provides a better, more object oriented approach
|
data/lib/file/find.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'date'
|
2
|
-
require 'rbconfig'
|
3
2
|
|
4
3
|
# For alternate implementations of Ruby, such as JRuby, that cannot
|
5
4
|
# build C extensions fall back to the Etc module.
|
@@ -11,7 +10,7 @@ end
|
|
11
10
|
|
12
11
|
class File::Find
|
13
12
|
# The version of the file-find library
|
14
|
-
VERSION = '0.3.
|
13
|
+
VERSION = '0.3.6'
|
15
14
|
|
16
15
|
# :stopdoc:
|
17
16
|
VALID_OPTIONS = %w/
|
@@ -234,7 +233,6 @@ class File::Find
|
|
234
233
|
next if prune_regex.match(file)
|
235
234
|
end
|
236
235
|
|
237
|
-
orig = file.dup
|
238
236
|
file = File.join(path, file)
|
239
237
|
|
240
238
|
stat_method = @follow ? :stat : :lstat
|
@@ -347,7 +345,7 @@ class File::Find
|
|
347
345
|
end
|
348
346
|
end
|
349
347
|
|
350
|
-
unless
|
348
|
+
unless File::ALT_SEPARATOR
|
351
349
|
if @inum
|
352
350
|
next unless stat_info.ino == @inum
|
353
351
|
end
|
@@ -461,10 +459,10 @@ class File::Find
|
|
461
459
|
match = cmd.match(regex)
|
462
460
|
raise "Invalid symbolic permissions: '#{str}'" if match.nil?
|
463
461
|
|
464
|
-
|
462
|
+
who, what, how = match.to_a[1..-1]
|
465
463
|
|
466
|
-
who = who.split(//).inject(
|
467
|
-
how = how.split(//).inject(
|
464
|
+
who = who.split(//).inject(0){ |num,b| num |= left[b]; num }
|
465
|
+
how = how.split(//).inject(0){ |num,b| num |= right[b]; num }
|
468
466
|
mask = who & how
|
469
467
|
|
470
468
|
case what
|
data/test/test_file_find.rb
CHANGED
@@ -4,32 +4,27 @@
|
|
4
4
|
# Test case for the File::Find package. You should run this via the
|
5
5
|
# 'rake test' task.
|
6
6
|
######################################################################
|
7
|
-
require '
|
8
|
-
gem 'test-unit'
|
9
|
-
|
10
|
-
require 'test/unit'
|
7
|
+
require 'test-unit'
|
11
8
|
require 'fileutils'
|
12
9
|
require 'file/find'
|
13
|
-
require 'rbconfig'
|
14
10
|
|
15
11
|
begin
|
16
|
-
|
12
|
+
require 'sys/admin'
|
17
13
|
rescue LoadError
|
18
|
-
|
14
|
+
require 'etc'
|
19
15
|
end
|
20
16
|
|
21
|
-
include Config
|
22
17
|
include FileUtils
|
23
18
|
|
24
19
|
class TC_File_Find < Test::Unit::TestCase
|
25
20
|
def self.startup
|
26
21
|
Dir.chdir(File.dirname(File.expand_path(__FILE__)))
|
27
22
|
|
28
|
-
@@windows =
|
23
|
+
@@windows = File::ALT_SEPARATOR
|
29
24
|
@@jruby = RUBY_PLATFORM.match('java')
|
30
25
|
|
31
26
|
unless @@windows
|
32
|
-
if @@jruby
|
27
|
+
if @@jruby || !defined? Sys::Admin
|
33
28
|
@@loguser = Etc.getpwnam(Etc.getlogin)
|
34
29
|
@@logroup = Etc.getgrgid(@@loguser.gid)
|
35
30
|
else
|
@@ -67,402 +62,402 @@ class TC_File_Find < Test::Unit::TestCase
|
|
67
62
|
@rule2 = File::Find.new
|
68
63
|
end
|
69
64
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
def test_path
|
75
|
-
assert_respond_to(@rule1, :path)
|
76
|
-
assert_respond_to(@rule1, :path=)
|
77
|
-
assert_equal(Dir.pwd, @rule1.path)
|
78
|
-
end
|
79
|
-
|
80
|
-
def test_options
|
81
|
-
assert_respond_to(@rule1, :options)
|
82
|
-
assert_respond_to(@rule1, :options=)
|
83
|
-
assert_equal({:name => '*.txt'}, @rule1.options)
|
84
|
-
end
|
85
|
-
|
86
|
-
def test_atime_basic
|
87
|
-
assert_respond_to(@rule1, :atime)
|
88
|
-
assert_respond_to(@rule1, :atime=)
|
89
|
-
assert_nil(@rule1.atime)
|
90
|
-
end
|
91
|
-
|
92
|
-
def test_atime
|
93
|
-
rule1 = File::Find.new(:name => "*.rb", :atime => 0)
|
94
|
-
rule2 = File::Find.new(:name => "*.rb", :atime => 1)
|
95
|
-
|
96
|
-
assert_false(rule1.find.empty?)
|
97
|
-
assert_true(rule2.find.empty?)
|
98
|
-
end
|
99
|
-
|
100
|
-
def test_ctime_basic
|
101
|
-
assert_respond_to(@rule1, :ctime)
|
102
|
-
assert_respond_to(@rule1, :ctime=)
|
103
|
-
assert_nil(@rule1.ctime)
|
104
|
-
end
|
105
|
-
|
106
|
-
def test_ctime
|
107
|
-
rule1 = File::Find.new(:name => "*.rb", :ctime => 0)
|
108
|
-
rule2 = File::Find.new(:name => "*.rb", :ctime => 1)
|
109
|
-
|
110
|
-
assert_false(rule1.find.empty?)
|
111
|
-
assert_true(rule2.find.empty?)
|
112
|
-
end
|
113
|
-
|
114
|
-
def test_find_basic
|
115
|
-
assert_respond_to(@rule1, :find)
|
116
|
-
assert_nothing_raised{ @rule1.find }
|
117
|
-
end
|
118
|
-
|
119
|
-
def test_find
|
120
|
-
assert_kind_of(Array, @rule1.find)
|
121
|
-
assert_nil(@rule1.find{})
|
122
|
-
end
|
123
|
-
|
124
|
-
def test_filetest_basic
|
125
|
-
assert_respond_to(@rule1, :filetest)
|
126
|
-
assert_respond_to(@rule1, :filetest=)
|
127
|
-
assert_nothing_raised{ @rule1.filetest }
|
128
|
-
assert_kind_of(Array, @rule1.filetest)
|
129
|
-
end
|
130
|
-
|
131
|
-
def test_filetest_valid_options
|
132
|
-
assert_nothing_raised{ File::Find.new(:readable? => true) }
|
133
|
-
assert_nothing_raised{ File::Find.new(:writable? => true) }
|
134
|
-
end
|
135
|
-
|
136
|
-
def test_filetest
|
137
|
-
omit_if(@@windows && @@jruby, "Skipping file test on JRuby/Windows")
|
138
|
-
|
139
|
-
rule = File::Find.new(:name => "*.doc", :writable? => true)
|
140
|
-
File.chmod(0644, @file_doc)
|
141
|
-
|
142
|
-
assert_equal([@file_doc], rule.find.map{ |f| File.basename(f) })
|
143
|
-
|
144
|
-
File.chmod(0444, @file_doc)
|
145
|
-
|
146
|
-
assert_equal([], rule.find)
|
147
|
-
end
|
148
|
-
|
149
|
-
def test_mtime
|
150
|
-
rule1 = File::Find.new(:name => "*.rb", :mtime => 0)
|
151
|
-
rule2 = File::Find.new(:name => "*.rb", :mtime => 1)
|
152
|
-
|
153
|
-
assert_false(rule1.find.empty?)
|
154
|
-
assert_true(rule2.find.empty?)
|
155
|
-
end
|
156
|
-
|
157
|
-
def test_mtime_basic
|
158
|
-
assert_respond_to(@rule1, :mtime)
|
159
|
-
assert_respond_to(@rule1, :mtime=)
|
160
|
-
assert_nil(@rule1.mtime)
|
161
|
-
end
|
162
|
-
|
163
|
-
def test_ftype_basic
|
164
|
-
assert_respond_to(@rule1, :ftype)
|
165
|
-
assert_respond_to(@rule1, :ftype=)
|
166
|
-
assert_nil(@rule1.ftype)
|
167
|
-
end
|
168
|
-
|
169
|
-
def test_ftype
|
170
|
-
rule1 = File::Find.new(:name => "*.rb", :ftype => "file")
|
171
|
-
rule2 = File::Find.new(:name => "*.rb", :ftype => "characterSpecial")
|
172
|
-
|
173
|
-
assert_false(rule1.find.empty?)
|
174
|
-
assert_true(rule2.find.empty?)
|
175
|
-
end
|
176
|
-
|
177
|
-
def test_group_basic
|
178
|
-
assert_respond_to(@rule1, :group)
|
179
|
-
assert_respond_to(@rule1, :group=)
|
180
|
-
assert_nil(@rule1.group)
|
181
|
-
end
|
182
|
-
|
183
|
-
def test_group_with_numeric_id
|
184
|
-
omit_if(@@windows, 'group test skipped on MS Windows')
|
185
|
-
@rule1 = File::Find.new(:name => '*.doc', :group => @@loguser.gid)
|
186
|
-
assert_equal([File.expand_path(@file_doc)], @rule1.find)
|
187
|
-
end
|
188
|
-
|
189
|
-
def test_group_with_string
|
190
|
-
omit_if(@@windows, 'group test skipped on MS Windows')
|
191
|
-
@rule1 = File::Find.new(:name => '*.doc', :group => @@logroup.name)
|
192
|
-
assert_equal([File.expand_path(@file_doc)], @rule1.find)
|
193
|
-
end
|
194
|
-
|
195
|
-
def test_group_with_bad_id
|
196
|
-
omit_if(@@windows, 'group test skipped on MS Windows')
|
197
|
-
@rule1 = File::Find.new(:name => '*.doc', :group => 'totallybogus')
|
198
|
-
@rule2 = File::Find.new(:name => '*.doc', :group => 99999999)
|
199
|
-
assert_equal([], @rule1.find)
|
200
|
-
assert_equal([], @rule2.find)
|
201
|
-
end
|
202
|
-
|
203
|
-
def test_inum_basic
|
204
|
-
assert_respond_to(@rule1, :inum)
|
205
|
-
assert_respond_to(@rule1, :inum=)
|
206
|
-
assert_nil(@rule1.inum)
|
207
|
-
end
|
208
|
-
|
209
|
-
def test_follow_basic
|
210
|
-
assert_respond_to(@rule1, :follow)
|
211
|
-
assert_respond_to(@rule1, :follow=)
|
212
|
-
assert_true(@rule1.follow)
|
213
|
-
end
|
214
|
-
|
215
|
-
def test_links_basic
|
216
|
-
assert_respond_to(@rule1, :links)
|
217
|
-
assert_respond_to(@rule1, :links=)
|
218
|
-
assert_nil(@rule1.links)
|
219
|
-
end
|
220
|
-
|
221
|
-
def test_links
|
222
|
-
omit_if(@@windows, 'links test skipped on MS Windows')
|
223
|
-
|
224
|
-
@rule1 = File::Find.new(:name => '*.rb', :links => 2)
|
225
|
-
@rule2 = File::Find.new(:name => '*.doc', :links => 1)
|
226
|
-
|
227
|
-
assert_equal([], @rule1.find)
|
228
|
-
assert_equal([File.expand_path(@file_doc)], @rule2.find)
|
229
|
-
end
|
230
|
-
|
231
|
-
def test_maxdepth_basic
|
232
|
-
assert_respond_to(@rule1, :maxdepth)
|
233
|
-
assert_respond_to(@rule1, :maxdepth=)
|
234
|
-
assert_nil(@rule1.maxdepth)
|
235
|
-
end
|
236
|
-
|
237
|
-
def test_maxdepth_file
|
238
|
-
mkpath('a1/a2/a3')
|
239
|
-
touch('a1/a.foo')
|
240
|
-
touch('a1/a2/b.foo')
|
241
|
-
touch('a1/a2/c.foo')
|
242
|
-
touch('a1/a2/a3/d.foo')
|
243
|
-
touch('a1/a2/a3/e.foo')
|
244
|
-
touch('a1/a2/a3/f.foo')
|
245
|
-
|
246
|
-
@rule2.pattern = "*.foo"
|
247
|
-
@rule2.maxdepth = 1
|
248
|
-
assert_equal([], @rule2.find)
|
249
|
-
|
250
|
-
@rule2.maxdepth = 2
|
251
|
-
assert_equal(['a.foo'], @rule2.find.map{ |e| File.basename(e) })
|
252
|
-
|
253
|
-
@rule2.maxdepth = 3
|
254
|
-
assert_equal(['a.foo', 'b.foo', 'c.foo'], @rule2.find.map{ |e| File.basename(e) })
|
255
|
-
|
256
|
-
@rule2.maxdepth = nil
|
257
|
-
assert_equal(
|
258
|
-
['a.foo', 'b.foo', 'c.foo', 'd.foo', 'e.foo', 'f.foo'],
|
259
|
-
@rule2.find.map{ |e| File.basename(e) }.sort
|
260
|
-
)
|
261
|
-
end
|
262
|
-
|
263
|
-
def test_maxdepth_directory
|
264
|
-
mkpath('a/b/c')
|
265
|
-
@rule2.pattern = "c"
|
266
|
-
|
267
|
-
@rule2.maxdepth = 1
|
268
|
-
assert_equal([], @rule2.find)
|
269
|
-
|
270
|
-
@rule2.maxdepth = 2
|
271
|
-
assert_equal([], @rule2.find)
|
272
|
-
|
273
|
-
@rule2.maxdepth = 3
|
274
|
-
assert_equal(['c'], @rule2.find.map{ |e| File.basename(e) })
|
275
|
-
end
|
276
|
-
|
277
|
-
def test_mindepth_basic
|
278
|
-
assert_respond_to(@rule1, :mindepth)
|
279
|
-
assert_respond_to(@rule1, :mindepth=)
|
280
|
-
assert_nil(@rule1.mindepth)
|
281
|
-
end
|
282
|
-
|
283
|
-
def test_mindepth_file
|
284
|
-
mkpath('a1/a2/a3')
|
285
|
-
touch('z.min')
|
286
|
-
touch('a1/a.min')
|
287
|
-
touch('a1/a2/b.min')
|
288
|
-
touch('a1/a2/c.min')
|
289
|
-
touch('a1/a2/a3/d.min')
|
290
|
-
touch('a1/a2/a3/e.min')
|
291
|
-
touch('a1/a2/a3/f.min')
|
292
|
-
|
293
|
-
@rule2.pattern = "*.min"
|
294
|
-
|
295
|
-
@rule2.mindepth = 0
|
296
|
-
assert_equal(
|
297
|
-
['a.min', 'b.min', 'c.min', 'd.min', 'e.min', 'f.min', 'z.min'],
|
298
|
-
@rule2.find.map{ |e| File.basename(e) }.sort
|
299
|
-
)
|
65
|
+
def test_version
|
66
|
+
assert_equal('0.3.6', File::Find::VERSION)
|
67
|
+
end
|
300
68
|
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
69
|
+
def test_path
|
70
|
+
assert_respond_to(@rule1, :path)
|
71
|
+
assert_respond_to(@rule1, :path=)
|
72
|
+
assert_equal(Dir.pwd, @rule1.path)
|
73
|
+
end
|
306
74
|
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
75
|
+
def test_options
|
76
|
+
assert_respond_to(@rule1, :options)
|
77
|
+
assert_respond_to(@rule1, :options=)
|
78
|
+
assert_equal({:name => '*.txt'}, @rule1.options)
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_atime_basic
|
82
|
+
assert_respond_to(@rule1, :atime)
|
83
|
+
assert_respond_to(@rule1, :atime=)
|
84
|
+
assert_nil(@rule1.atime)
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_atime
|
88
|
+
rule1 = File::Find.new(:name => "*.rb", :atime => 0)
|
89
|
+
rule2 = File::Find.new(:name => "*.rb", :atime => 1)
|
90
|
+
|
91
|
+
assert_false(rule1.find.empty?)
|
92
|
+
assert_true(rule2.find.empty?)
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_ctime_basic
|
96
|
+
assert_respond_to(@rule1, :ctime)
|
97
|
+
assert_respond_to(@rule1, :ctime=)
|
98
|
+
assert_nil(@rule1.ctime)
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_ctime
|
102
|
+
rule1 = File::Find.new(:name => "*.rb", :ctime => 0)
|
103
|
+
rule2 = File::Find.new(:name => "*.rb", :ctime => 1)
|
104
|
+
|
105
|
+
assert_false(rule1.find.empty?)
|
106
|
+
assert_true(rule2.find.empty?)
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_find_basic
|
110
|
+
assert_respond_to(@rule1, :find)
|
111
|
+
assert_nothing_raised{ @rule1.find }
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_find
|
115
|
+
assert_kind_of(Array, @rule1.find)
|
116
|
+
assert_nil(@rule1.find{})
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_filetest_basic
|
120
|
+
assert_respond_to(@rule1, :filetest)
|
121
|
+
assert_respond_to(@rule1, :filetest=)
|
122
|
+
assert_nothing_raised{ @rule1.filetest }
|
123
|
+
assert_kind_of(Array, @rule1.filetest)
|
124
|
+
end
|
125
|
+
|
126
|
+
def test_filetest_valid_options
|
127
|
+
assert_nothing_raised{ File::Find.new(:readable? => true) }
|
128
|
+
assert_nothing_raised{ File::Find.new(:writable? => true) }
|
129
|
+
end
|
130
|
+
|
131
|
+
def test_filetest
|
132
|
+
omit_if(@@windows && @@jruby, "Skipping file test on JRuby/Windows")
|
133
|
+
|
134
|
+
rule = File::Find.new(:name => "*.doc", :writable? => true)
|
135
|
+
File.chmod(0644, @file_doc)
|
136
|
+
|
137
|
+
assert_equal([@file_doc], rule.find.map{ |f| File.basename(f) })
|
138
|
+
|
139
|
+
File.chmod(0444, @file_doc)
|
140
|
+
|
141
|
+
assert_equal([], rule.find)
|
142
|
+
end
|
143
|
+
|
144
|
+
def test_mtime
|
145
|
+
rule1 = File::Find.new(:name => "*.rb", :mtime => 0)
|
146
|
+
rule2 = File::Find.new(:name => "*.rb", :mtime => 1)
|
147
|
+
|
148
|
+
assert_false(rule1.find.empty?)
|
149
|
+
assert_true(rule2.find.empty?)
|
150
|
+
end
|
151
|
+
|
152
|
+
def test_mtime_basic
|
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
|
159
|
+
assert_respond_to(@rule1, :ftype)
|
160
|
+
assert_respond_to(@rule1, :ftype=)
|
161
|
+
assert_nil(@rule1.ftype)
|
162
|
+
end
|
163
|
+
|
164
|
+
def test_ftype
|
165
|
+
rule1 = File::Find.new(:name => "*.rb", :ftype => "file")
|
166
|
+
rule2 = File::Find.new(:name => "*.rb", :ftype => "characterSpecial")
|
167
|
+
|
168
|
+
assert_false(rule1.find.empty?)
|
169
|
+
assert_true(rule2.find.empty?)
|
170
|
+
end
|
171
|
+
|
172
|
+
def test_group_basic
|
173
|
+
assert_respond_to(@rule1, :group)
|
174
|
+
assert_respond_to(@rule1, :group=)
|
175
|
+
assert_nil(@rule1.group)
|
176
|
+
end
|
177
|
+
|
178
|
+
def test_group_with_numeric_id
|
179
|
+
omit_if(@@windows, 'group test skipped on MS Windows')
|
180
|
+
@rule1 = File::Find.new(:name => '*.doc', :group => @@loguser.gid)
|
181
|
+
assert_equal([File.expand_path(@file_doc)], @rule1.find)
|
182
|
+
end
|
183
|
+
|
184
|
+
def test_group_with_string
|
185
|
+
omit_if(@@windows, 'group test skipped on MS Windows')
|
186
|
+
@rule1 = File::Find.new(:name => '*.doc', :group => @@logroup.name)
|
187
|
+
assert_equal([File.expand_path(@file_doc)], @rule1.find)
|
188
|
+
end
|
189
|
+
|
190
|
+
def test_group_with_bad_id
|
191
|
+
omit_if(@@windows, 'group test skipped on MS Windows')
|
192
|
+
@rule1 = File::Find.new(:name => '*.doc', :group => 'totallybogus')
|
193
|
+
@rule2 = File::Find.new(:name => '*.doc', :group => 99999999)
|
194
|
+
assert_equal([], @rule1.find)
|
195
|
+
assert_equal([], @rule2.find)
|
196
|
+
end
|
197
|
+
|
198
|
+
def test_inum_basic
|
199
|
+
assert_respond_to(@rule1, :inum)
|
200
|
+
assert_respond_to(@rule1, :inum=)
|
201
|
+
assert_nil(@rule1.inum)
|
202
|
+
end
|
203
|
+
|
204
|
+
def test_follow_basic
|
205
|
+
assert_respond_to(@rule1, :follow)
|
206
|
+
assert_respond_to(@rule1, :follow=)
|
207
|
+
assert_true(@rule1.follow)
|
208
|
+
end
|
209
|
+
|
210
|
+
def test_links_basic
|
211
|
+
assert_respond_to(@rule1, :links)
|
212
|
+
assert_respond_to(@rule1, :links=)
|
213
|
+
assert_nil(@rule1.links)
|
214
|
+
end
|
215
|
+
|
216
|
+
def test_links
|
217
|
+
omit_if(@@windows, 'links test skipped on MS Windows')
|
218
|
+
|
219
|
+
@rule1 = File::Find.new(:name => '*.rb', :links => 2)
|
220
|
+
@rule2 = File::Find.new(:name => '*.doc', :links => 1)
|
221
|
+
|
222
|
+
assert_equal([], @rule1.find)
|
223
|
+
assert_equal([File.expand_path(@file_doc)], @rule2.find)
|
224
|
+
end
|
225
|
+
|
226
|
+
def test_maxdepth_basic
|
227
|
+
assert_respond_to(@rule1, :maxdepth)
|
228
|
+
assert_respond_to(@rule1, :maxdepth=)
|
229
|
+
assert_nil(@rule1.maxdepth)
|
230
|
+
end
|
231
|
+
|
232
|
+
def test_maxdepth_file
|
233
|
+
mkpath('a1/a2/a3')
|
234
|
+
touch('a1/a.foo')
|
235
|
+
touch('a1/a2/b.foo')
|
236
|
+
touch('a1/a2/c.foo')
|
237
|
+
touch('a1/a2/a3/d.foo')
|
238
|
+
touch('a1/a2/a3/e.foo')
|
239
|
+
touch('a1/a2/a3/f.foo')
|
240
|
+
|
241
|
+
@rule2.pattern = "*.foo"
|
242
|
+
@rule2.maxdepth = 1
|
243
|
+
assert_equal([], @rule2.find)
|
244
|
+
|
245
|
+
@rule2.maxdepth = 2
|
246
|
+
assert_equal(['a.foo'], @rule2.find.map{ |e| File.basename(e) })
|
247
|
+
|
248
|
+
@rule2.maxdepth = 3
|
249
|
+
assert_equal(['a.foo', 'b.foo', 'c.foo'], @rule2.find.map{ |e| File.basename(e) })
|
250
|
+
|
251
|
+
@rule2.maxdepth = nil
|
252
|
+
assert_equal(
|
253
|
+
['a.foo', 'b.foo', 'c.foo', 'd.foo', 'e.foo', 'f.foo'],
|
316
254
|
@rule2.find.map{ |e| File.basename(e) }.sort
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
File.
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
255
|
+
)
|
256
|
+
end
|
257
|
+
|
258
|
+
def test_maxdepth_directory
|
259
|
+
mkpath('a/b/c')
|
260
|
+
@rule2.pattern = "c"
|
261
|
+
|
262
|
+
@rule2.maxdepth = 1
|
263
|
+
assert_equal([], @rule2.find)
|
264
|
+
|
265
|
+
@rule2.maxdepth = 2
|
266
|
+
assert_equal([], @rule2.find)
|
267
|
+
|
268
|
+
@rule2.maxdepth = 3
|
269
|
+
assert_equal(['c'], @rule2.find.map{ |e| File.basename(e) })
|
270
|
+
end
|
271
|
+
|
272
|
+
def test_mindepth_basic
|
273
|
+
assert_respond_to(@rule1, :mindepth)
|
274
|
+
assert_respond_to(@rule1, :mindepth=)
|
275
|
+
assert_nil(@rule1.mindepth)
|
276
|
+
end
|
277
|
+
|
278
|
+
def test_mindepth_file
|
279
|
+
mkpath('a1/a2/a3')
|
280
|
+
touch('z.min')
|
281
|
+
touch('a1/a.min')
|
282
|
+
touch('a1/a2/b.min')
|
283
|
+
touch('a1/a2/c.min')
|
284
|
+
touch('a1/a2/a3/d.min')
|
285
|
+
touch('a1/a2/a3/e.min')
|
286
|
+
touch('a1/a2/a3/f.min')
|
287
|
+
|
288
|
+
@rule2.pattern = "*.min"
|
289
|
+
|
290
|
+
@rule2.mindepth = 0
|
291
|
+
assert_equal(
|
292
|
+
['a.min', 'b.min', 'c.min', 'd.min', 'e.min', 'f.min', 'z.min'],
|
293
|
+
@rule2.find.map{ |e| File.basename(e) }.sort
|
294
|
+
)
|
295
|
+
|
296
|
+
@rule2.mindepth = 1
|
297
|
+
assert_equal(
|
298
|
+
['a.min', 'b.min', 'c.min', 'd.min', 'e.min', 'f.min', 'z.min'],
|
299
|
+
@rule2.find.map{ |e| File.basename(e) }.sort
|
300
|
+
)
|
301
|
+
|
302
|
+
@rule2.mindepth = 2
|
303
|
+
assert_equal(
|
304
|
+
['a.min', 'b.min', 'c.min', 'd.min', 'e.min', 'f.min'],
|
305
|
+
@rule2.find.map{ |e| File.basename(e) }.sort
|
306
|
+
)
|
307
|
+
|
308
|
+
@rule2.mindepth = 3
|
309
|
+
assert_equal(
|
310
|
+
['b.min', 'c.min', 'd.min', 'e.min', 'f.min'],
|
311
|
+
@rule2.find.map{ |e| File.basename(e) }.sort
|
312
|
+
)
|
313
|
+
|
314
|
+
@rule2.mindepth = 4
|
315
|
+
assert_equal(['d.min', 'e.min', 'f.min'], @rule2.find.map{ |e| File.basename(e) }.sort)
|
316
|
+
|
317
|
+
@rule2.mindepth = 5
|
318
|
+
assert_equal([], @rule2.find.map{ |e| File.basename(e) })
|
319
|
+
end
|
320
|
+
|
321
|
+
def test_mindepth_directory
|
322
|
+
mkpath('a/b/c')
|
323
|
+
@rule2.pattern = "a"
|
324
|
+
|
325
|
+
@rule2.mindepth = 1
|
326
|
+
assert_equal(['a'], @rule2.find.map{ |e| File.basename(e) })
|
327
|
+
|
328
|
+
@rule2.mindepth = 2
|
329
|
+
assert_equal([], @rule2.find)
|
330
|
+
|
331
|
+
@rule2.mindepth = 3
|
332
|
+
assert_equal([], @rule2.find)
|
333
|
+
end
|
334
|
+
|
335
|
+
def test_mount_basic
|
336
|
+
assert_respond_to(@rule1, :mount)
|
337
|
+
assert_respond_to(@rule1, :mount=)
|
338
|
+
assert_nil(@rule1.mount)
|
339
|
+
end
|
340
|
+
|
341
|
+
def test_name_basic
|
342
|
+
assert_respond_to(@rule1, :name)
|
343
|
+
assert_respond_to(@rule1, :name=)
|
344
|
+
assert_equal('*.txt', @rule1.name)
|
345
|
+
end
|
346
|
+
|
347
|
+
def test_pattern_alias
|
348
|
+
assert_respond_to(@rule1, :pattern)
|
349
|
+
assert_respond_to(@rule1, :pattern=)
|
350
|
+
assert_true(@rule1.method(:name) == @rule1.method(:pattern))
|
351
|
+
assert_true(@rule1.method(:name=) == @rule1.method(:pattern=))
|
352
|
+
end
|
353
|
+
|
354
|
+
def test_perm_basic
|
355
|
+
assert_respond_to(@rule1, :perm)
|
356
|
+
assert_respond_to(@rule1, :perm=)
|
357
|
+
assert_nil(@rule1.perm)
|
358
|
+
end
|
359
|
+
|
360
|
+
def test_perm
|
361
|
+
omit_if(@@windows, 'perm test skipped on MS Windows')
|
362
|
+
File.chmod(0664, @file_rb)
|
363
|
+
File.chmod(0644, @file_txt1)
|
364
|
+
results = File::Find.new(:name => "test1*", :perm => 664).find
|
365
|
+
|
366
|
+
assert_equal(1, results.length)
|
367
|
+
assert_equal('test1.rb', File.basename(results.first))
|
368
|
+
end
|
369
|
+
|
370
|
+
def test_perm_with_symbolic_permissions
|
371
|
+
omit_if(@@windows, 'symbolic perm test skipped on MS Windows')
|
372
|
+
|
373
|
+
File.chmod(0664, @file_rb) # test1.rb
|
374
|
+
File.chmod(0644, @file_txt1) # test1.txt
|
375
|
+
results1 = File::Find.new(:name => "test1*", :perm => "g=rw").find
|
376
|
+
results2 = File::Find.new(:name => "test1*", :perm => "u=rw").find
|
377
|
+
|
378
|
+
assert_equal(1, results1.length)
|
379
|
+
assert_equal(2, results2.length)
|
380
|
+
assert_equal('test1.rb', File.basename(results1.first))
|
381
|
+
assert_equal(['test1.rb', 'test1.txt'], results2.map{ |e| File.basename(e) }.sort)
|
382
|
+
end
|
383
|
+
|
384
|
+
def test_prune_basic
|
385
|
+
assert_respond_to(@rule1, :prune)
|
386
|
+
assert_respond_to(@rule1, :prune=)
|
387
|
+
assert_nil(@rule1.prune)
|
388
|
+
end
|
389
|
+
|
390
|
+
def test_prune
|
391
|
+
rule = File::Find.new(:name => "*.txt", :prune => 'foo')
|
392
|
+
assert_equal('test1.txt', File.basename(rule.find.first))
|
393
|
+
end
|
394
|
+
|
395
|
+
def test_size_basic
|
396
|
+
assert_respond_to(@rule1, :size)
|
397
|
+
assert_respond_to(@rule1, :size=)
|
398
|
+
assert_nil(@rule1.size)
|
399
|
+
end
|
400
|
+
|
401
|
+
def test_user_basic
|
402
|
+
assert_respond_to(@rule1, :user)
|
403
|
+
assert_respond_to(@rule1, :user=)
|
404
|
+
assert_nil(@rule1.user)
|
405
|
+
end
|
406
|
+
|
407
|
+
def test_user_with_numeric_id
|
408
|
+
omit_if(@@windows, 'user test skipped on MS Windows')
|
409
|
+
@rule1 = File::Find.new(:name => '*.doc', :user => @@loguser.uid)
|
410
|
+
assert_equal([File.expand_path(@file_doc)], @rule1.find)
|
411
|
+
end
|
412
|
+
|
413
|
+
def test_user_with_string
|
414
|
+
omit_if(@@windows, 'user test skipped on MS Windows')
|
415
|
+
@rule1 = File::Find.new(:name => '*.doc', :user => @@loguser.name)
|
416
|
+
assert_equal([File.expand_path(@file_doc)], @rule1.find)
|
417
|
+
end
|
418
|
+
|
419
|
+
def test_user_with_bad_id
|
420
|
+
omit_if(@@windows, 'user test skipped on MS Windows')
|
421
|
+
@rule1 = File::Find.new(:name => '*.doc', :user => 'totallybogus')
|
422
|
+
@rule2 = File::Find.new(:name => '*.doc', :user => 99999999)
|
423
|
+
assert_equal([], @rule1.find)
|
424
|
+
assert_equal([], @rule2.find)
|
425
|
+
end
|
426
|
+
|
427
|
+
def test_previous_basic
|
428
|
+
assert_respond_to(@rule1, :previous)
|
429
|
+
end
|
430
|
+
|
431
|
+
def test_expected_errors
|
432
|
+
assert_raise(Errno::ENOENT){ File::Find.new(:path => '/bogus/dir').find }
|
433
|
+
assert_raise(ArgumentError){ File::Find.new(:bogus => 1) }
|
434
|
+
assert_raise(ArgumentError){ File::Find.new(:bogus? => true) }
|
435
|
+
end
|
436
|
+
|
437
|
+
def teardown
|
438
|
+
rm_rf(@file_rb)
|
439
|
+
rm_rf(@file_txt1)
|
440
|
+
rm_rf(@file_txt2)
|
441
|
+
rm_rf(@file_doc)
|
442
|
+
rm_rf(@directory1)
|
443
|
+
rm_rf(@directory2)
|
444
|
+
rm_rf(@link1) unless @@windows
|
445
|
+
rm_rf('a')
|
446
|
+
rm_rf('a1')
|
447
|
+
rm_rf('z.min') if File.exists?('z.min')
|
448
|
+
|
449
|
+
@rule1 = nil
|
450
|
+
@rule2 = nil
|
451
|
+
@file_rb = nil
|
452
|
+
@file_txt1 = nil
|
453
|
+
@file_txt2 = nil
|
454
|
+
@file_doc = nil
|
455
|
+
end
|
456
|
+
|
457
|
+
def self.shutdown
|
458
|
+
@@windows = nil
|
459
|
+
@@jruby = nil
|
460
|
+
@@loguser = nil unless @@windows
|
461
|
+
@@logroup = nil unless @@windows
|
462
|
+
end
|
468
463
|
end
|
metadata
CHANGED
@@ -1,65 +1,83 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: file-find
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 3
|
9
|
-
- 5
|
10
|
-
version: 0.3.5
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.6
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- Daniel Berger
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
11
|
+
date: 2013-09-06 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
21
14
|
name: test-unit
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
hash: 9
|
29
|
-
segments:
|
30
|
-
- 2
|
31
|
-
- 1
|
32
|
-
- 1
|
33
|
-
version: 2.1.1
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ! '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 2.5.0
|
34
20
|
type: :development
|
35
|
-
|
36
|
-
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ! '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.5.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
37
28
|
name: sys-admin
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
38
49
|
prerelease: false
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: sys-admin
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
49
61
|
version: 1.5.2
|
50
62
|
type: :runtime
|
51
|
-
|
52
|
-
|
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"
|
53
73
|
email: djberg96@gmail.com
|
54
74
|
executables: []
|
55
|
-
|
56
75
|
extensions: []
|
57
|
-
|
58
|
-
extra_rdoc_files:
|
76
|
+
extra_rdoc_files:
|
59
77
|
- README
|
60
78
|
- CHANGES
|
61
79
|
- MANIFEST
|
62
|
-
files:
|
80
|
+
files:
|
63
81
|
- CHANGES
|
64
82
|
- file-find.gemspec
|
65
83
|
- lib/file/find.rb
|
@@ -67,38 +85,29 @@ files:
|
|
67
85
|
- Rakefile
|
68
86
|
- README
|
69
87
|
- test/test_file_find.rb
|
70
|
-
homepage: http://
|
71
|
-
licenses:
|
88
|
+
homepage: http://github.com/djberg96/file-find
|
89
|
+
licenses:
|
72
90
|
- Artistic 2.0
|
91
|
+
metadata: {}
|
73
92
|
post_install_message:
|
74
93
|
rdoc_options: []
|
75
|
-
|
76
|
-
require_paths:
|
94
|
+
require_paths:
|
77
95
|
- lib
|
78
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
none: false
|
89
|
-
requirements:
|
90
|
-
- - ">="
|
91
|
-
- !ruby/object:Gem::Version
|
92
|
-
hash: 3
|
93
|
-
segments:
|
94
|
-
- 0
|
95
|
-
version: "0"
|
96
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - ! '>='
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: '0'
|
101
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - ! '>='
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '0'
|
96
106
|
requirements: []
|
97
|
-
|
98
107
|
rubyforge_project: shards
|
99
|
-
rubygems_version:
|
108
|
+
rubygems_version: 2.0.3
|
100
109
|
signing_key:
|
101
|
-
specification_version:
|
110
|
+
specification_version: 4
|
102
111
|
summary: A better way to find files
|
103
|
-
test_files:
|
112
|
+
test_files:
|
104
113
|
- test/test_file_find.rb
|