file-find 0.3.5 → 0.3.6
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 +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
|