filelist 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +20 -0
- data/README.textile +0 -0
- data/Rakefile +53 -0
- data/TODO +2 -0
- data/filelist.gemspec +23 -0
- data/lib/filelist.rb +396 -0
- metadata +59 -0
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 Jakub Stastny aka Botanicus
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.textile
ADDED
File without changes
|
data/Rakefile
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake/gempackagetask'
|
3
|
+
|
4
|
+
GEM_NAME = "filelist"
|
5
|
+
AUTHOR = "Jakub Stastny aka Botanicus"
|
6
|
+
EMAIL = "knava.bestvinensis@gmail.com"
|
7
|
+
HOMEPAGE = "http://101Ideas.cz/"
|
8
|
+
SUMMARY = "FileList from Rake"
|
9
|
+
GEM_VERSION = "0.0.1"
|
10
|
+
|
11
|
+
spec = Gem::Specification.new do |s|
|
12
|
+
s.name = GEM_NAME
|
13
|
+
s.version = GEM_VERSION
|
14
|
+
s.platform = Gem::Platform::RUBY
|
15
|
+
s.has_rdoc = true
|
16
|
+
s.extra_rdoc_files = ["README.textile", "LICENSE"]
|
17
|
+
s.summary = SUMMARY
|
18
|
+
s.description = s.summary
|
19
|
+
s.author = AUTHOR
|
20
|
+
s.email = EMAIL
|
21
|
+
s.homepage = HOMEPAGE
|
22
|
+
s.require_path = 'lib'
|
23
|
+
s.files = %w(LICENSE README.textile Rakefile) + Dir.glob("{lib,spec}/**/*")
|
24
|
+
end
|
25
|
+
|
26
|
+
Rake::GemPackageTask.new(spec) do |pkg|
|
27
|
+
pkg.gem_spec = spec
|
28
|
+
end
|
29
|
+
|
30
|
+
desc "Create a gemspec file"
|
31
|
+
task :gemspec do
|
32
|
+
File.open("#{GEM_NAME}.gemspec", "w") do |file|
|
33
|
+
file.puts spec.to_ruby
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def sudo_gem(cmd)
|
38
|
+
sh "#{SUDO} #{RUBY} -S gem #{cmd}", :verbose => false
|
39
|
+
end
|
40
|
+
|
41
|
+
desc "Install #{GEM_NAME} #{GEM_VERSION}"
|
42
|
+
task :install => [ :package ] do
|
43
|
+
sudo_gem "install --local pkg/#{GEM_NAME}-#{GEM_VERSION} --no-update-sources"
|
44
|
+
end
|
45
|
+
|
46
|
+
desc "Uninstall #{GEM_NAME} #{GEM_VERSION}"
|
47
|
+
task :uninstall => [ :clobber ] do
|
48
|
+
sudo_gem "uninstall #{GEM_NAME} -v#{GEM_VERSION} -Ix"
|
49
|
+
end
|
50
|
+
|
51
|
+
require 'spec/rake/spectask'
|
52
|
+
desc 'Default: run spec examples'
|
53
|
+
task :default => 'spec'
|
data/TODO
ADDED
data/filelist.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
#!/usr/bin/env gem build
|
2
|
+
# coding: utf-8
|
3
|
+
|
4
|
+
begin
|
5
|
+
require "rubygems/specification"
|
6
|
+
rescue SecurityError
|
7
|
+
# http://gems.github.com
|
8
|
+
end
|
9
|
+
|
10
|
+
VERSION = "0.0.1"
|
11
|
+
SPECIFICATION = ::Gem::Specification.new do |s|
|
12
|
+
s.name = "filelist"
|
13
|
+
s.version = VERSION
|
14
|
+
s.authors = ["Jakub Šťastný aka Botanicus"]
|
15
|
+
s.homepage = "http://github.com/botanicus/filelist"
|
16
|
+
s.summary = "FileList is taken from Rake"
|
17
|
+
s.description = "" # TODO: long description
|
18
|
+
s.cert_chain = nil
|
19
|
+
s.email = ["knava.bestvinensis", "gmail.com"].join("@")
|
20
|
+
s.files = Dir.glob("**/*") - Dir.glob("pkg/*")
|
21
|
+
s.require_paths = ["lib"]
|
22
|
+
# s.required_ruby_version = ::Gem::Requirement.new(">= 1.9.1")
|
23
|
+
end
|
data/lib/filelist.rb
ADDED
@@ -0,0 +1,396 @@
|
|
1
|
+
# stolen directly from rake
|
2
|
+
module Cloneable
|
3
|
+
# Clone an object by making a new object and setting all the instance
|
4
|
+
# variables to the same values.
|
5
|
+
def dup
|
6
|
+
sibling = self.class.new
|
7
|
+
instance_variables.each do |ivar|
|
8
|
+
value = self.instance_variable_get(ivar)
|
9
|
+
new_value = value.clone rescue value
|
10
|
+
sibling.instance_variable_set(ivar, new_value)
|
11
|
+
end
|
12
|
+
sibling.taint if tainted?
|
13
|
+
sibling
|
14
|
+
end
|
15
|
+
|
16
|
+
def clone
|
17
|
+
sibling = dup
|
18
|
+
sibling.freeze if frozen?
|
19
|
+
sibling
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class FileList
|
24
|
+
|
25
|
+
include Cloneable
|
26
|
+
|
27
|
+
# == Method Delegation
|
28
|
+
#
|
29
|
+
# The lazy evaluation magic of FileLists happens by implementing all the
|
30
|
+
# array specific methods to call +resolve+ before delegating the heavy
|
31
|
+
# lifting to an embedded array object (@items).
|
32
|
+
#
|
33
|
+
# In addition, there are two kinds of delegation calls. The regular kind
|
34
|
+
# delegates to the @items array and returns the result directly. Well,
|
35
|
+
# almost directly. It checks if the returned value is the @items object
|
36
|
+
# itself, and if so will return the FileList object instead.
|
37
|
+
#
|
38
|
+
# The second kind of delegation call is used in methods that normally
|
39
|
+
# return a new Array object. We want to capture the return value of these
|
40
|
+
# methods and wrap them in a new FileList object. We enumerate these
|
41
|
+
# methods in the +SPECIAL_RETURN+ list below.
|
42
|
+
|
43
|
+
# List of array methods (that are not in +Object+) that need to be
|
44
|
+
# delegated.
|
45
|
+
ARRAY_METHODS = (Array.instance_methods - Object.instance_methods).map { |n| n.to_s }
|
46
|
+
|
47
|
+
# List of additional methods that must be delegated.
|
48
|
+
MUST_DEFINE = %w[to_a inspect]
|
49
|
+
|
50
|
+
# List of methods that should not be delegated here (we define special
|
51
|
+
# versions of them explicitly below).
|
52
|
+
MUST_NOT_DEFINE = %w[to_a to_ary partition *]
|
53
|
+
|
54
|
+
# List of delegated methods that return new array values which need
|
55
|
+
# wrapping.
|
56
|
+
SPECIAL_RETURN = %w[
|
57
|
+
map collect sort sort_by select find_all reject grep
|
58
|
+
compact flatten uniq values_at
|
59
|
+
+ - & |
|
60
|
+
]
|
61
|
+
|
62
|
+
DELEGATING_METHODS = (ARRAY_METHODS + MUST_DEFINE - MUST_NOT_DEFINE).collect{ |s| s.to_s }.sort.uniq
|
63
|
+
|
64
|
+
# Now do the delegation.
|
65
|
+
DELEGATING_METHODS.each_with_index do |sym, i|
|
66
|
+
if SPECIAL_RETURN.include?(sym)
|
67
|
+
ln = __LINE__+1
|
68
|
+
class_eval %{
|
69
|
+
def #{sym}(*args, &block)
|
70
|
+
resolve
|
71
|
+
result = @items.send(:#{sym}, *args, &block)
|
72
|
+
FileList.new.import(result)
|
73
|
+
end
|
74
|
+
}, __FILE__, ln
|
75
|
+
else
|
76
|
+
ln = __LINE__+1
|
77
|
+
class_eval %{
|
78
|
+
def #{sym}(*args, &block)
|
79
|
+
resolve
|
80
|
+
result = @items.send(:#{sym}, *args, &block)
|
81
|
+
result.object_id == @items.object_id ? self : result
|
82
|
+
end
|
83
|
+
}, __FILE__, ln
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
# Create a file list from the globbable patterns given. If you wish to
|
88
|
+
# perform multiple includes or excludes at object build time, use the
|
89
|
+
# "yield self" pattern.
|
90
|
+
#
|
91
|
+
# Example:
|
92
|
+
# file_list = FileList.new('lib/**/*.rb', 'test/test*.rb')
|
93
|
+
#
|
94
|
+
# pkg_files = FileList.new('lib/**/*') do |fl|
|
95
|
+
# fl.exclude(/\bCVS\b/)
|
96
|
+
# end
|
97
|
+
#
|
98
|
+
def initialize(*patterns)
|
99
|
+
@pending_add = []
|
100
|
+
@pending = false
|
101
|
+
@exclude_patterns = DEFAULT_IGNORE_PATTERNS.dup
|
102
|
+
@exclude_procs = DEFAULT_IGNORE_PROCS.dup
|
103
|
+
@exclude_re = nil
|
104
|
+
@items = []
|
105
|
+
patterns.each { |pattern| include(pattern) }
|
106
|
+
yield self if block_given?
|
107
|
+
end
|
108
|
+
|
109
|
+
# Add file names defined by glob patterns to the file list. If an array
|
110
|
+
# is given, add each element of the array.
|
111
|
+
#
|
112
|
+
# Example:
|
113
|
+
# file_list.include("*.java", "*.cfg")
|
114
|
+
# file_list.include %w( math.c lib.h *.o )
|
115
|
+
#
|
116
|
+
def include(*filenames)
|
117
|
+
# TODO: check for pending
|
118
|
+
filenames.each do |fn|
|
119
|
+
if fn.respond_to? :to_ary
|
120
|
+
include(*fn.to_ary)
|
121
|
+
else
|
122
|
+
@pending_add << fn
|
123
|
+
end
|
124
|
+
end
|
125
|
+
@pending = true
|
126
|
+
self
|
127
|
+
end
|
128
|
+
alias :add :include
|
129
|
+
|
130
|
+
# Register a list of file name patterns that should be excluded from the
|
131
|
+
# list. Patterns may be regular expressions, glob patterns or regular
|
132
|
+
# strings. In addition, a block given to exclude will remove entries that
|
133
|
+
# return true when given to the block.
|
134
|
+
#
|
135
|
+
# Note that glob patterns are expanded against the file system. If a file
|
136
|
+
# is explicitly added to a file list, but does not exist in the file
|
137
|
+
# system, then an glob pattern in the exclude list will not exclude the
|
138
|
+
# file.
|
139
|
+
#
|
140
|
+
# Examples:
|
141
|
+
# FileList['a.c', 'b.c'].exclude("a.c") => ['b.c']
|
142
|
+
# FileList['a.c', 'b.c'].exclude(/^a/) => ['b.c']
|
143
|
+
#
|
144
|
+
# If "a.c" is a file, then ...
|
145
|
+
# FileList['a.c', 'b.c'].exclude("a.*") => ['b.c']
|
146
|
+
#
|
147
|
+
# If "a.c" is not a file, then ...
|
148
|
+
# FileList['a.c', 'b.c'].exclude("a.*") => ['a.c', 'b.c']
|
149
|
+
#
|
150
|
+
def exclude(*patterns, &block)
|
151
|
+
patterns.each do |pat|
|
152
|
+
@exclude_patterns << pat
|
153
|
+
end
|
154
|
+
if block_given?
|
155
|
+
@exclude_procs << block
|
156
|
+
end
|
157
|
+
resolve_exclude if ! @pending
|
158
|
+
self
|
159
|
+
end
|
160
|
+
|
161
|
+
|
162
|
+
# Clear all the exclude patterns so that we exclude nothing.
|
163
|
+
def clear_exclude
|
164
|
+
@exclude_patterns = []
|
165
|
+
@exclude_procs = []
|
166
|
+
calculate_exclude_regexp if ! @pending
|
167
|
+
self
|
168
|
+
end
|
169
|
+
|
170
|
+
# Define equality.
|
171
|
+
def ==(array)
|
172
|
+
to_ary == array
|
173
|
+
end
|
174
|
+
|
175
|
+
# Return the internal array object.
|
176
|
+
def to_a
|
177
|
+
resolve
|
178
|
+
@items
|
179
|
+
end
|
180
|
+
|
181
|
+
# Return the internal array object.
|
182
|
+
def to_ary
|
183
|
+
to_a
|
184
|
+
end
|
185
|
+
|
186
|
+
# Lie about our class.
|
187
|
+
def is_a?(klass)
|
188
|
+
klass == Array || super(klass)
|
189
|
+
end
|
190
|
+
alias kind_of? is_a?
|
191
|
+
|
192
|
+
# Redefine * to return either a string or a new file list.
|
193
|
+
def *(other)
|
194
|
+
result = @items * other
|
195
|
+
case result
|
196
|
+
when Array
|
197
|
+
FileList.new.import(result)
|
198
|
+
else
|
199
|
+
result
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
# Resolve all the pending adds now.
|
204
|
+
def resolve
|
205
|
+
if @pending
|
206
|
+
@pending = false
|
207
|
+
@pending_add.each do |fn| resolve_add(fn) end
|
208
|
+
@pending_add = []
|
209
|
+
resolve_exclude
|
210
|
+
end
|
211
|
+
self
|
212
|
+
end
|
213
|
+
|
214
|
+
def calculate_exclude_regexp
|
215
|
+
ignores = []
|
216
|
+
@exclude_patterns.each do |pat|
|
217
|
+
case pat
|
218
|
+
when Regexp
|
219
|
+
ignores << pat
|
220
|
+
when /[*?]/
|
221
|
+
Dir[pat].each do |p| ignores << p end
|
222
|
+
else
|
223
|
+
ignores << Regexp.quote(pat)
|
224
|
+
end
|
225
|
+
end
|
226
|
+
if ignores.empty?
|
227
|
+
@exclude_re = /^$/
|
228
|
+
else
|
229
|
+
re_str = ignores.collect { |p| "(" + p.to_s + ")" }.join("|")
|
230
|
+
@exclude_re = Regexp.new(re_str)
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
234
|
+
def resolve_add(fn)
|
235
|
+
case fn
|
236
|
+
when %r{[*?\[\{]}
|
237
|
+
add_matching(fn)
|
238
|
+
else
|
239
|
+
self << fn
|
240
|
+
end
|
241
|
+
end
|
242
|
+
private :resolve_add
|
243
|
+
|
244
|
+
def resolve_exclude
|
245
|
+
calculate_exclude_regexp
|
246
|
+
reject! { |fn| exclude?(fn) }
|
247
|
+
self
|
248
|
+
end
|
249
|
+
private :resolve_exclude
|
250
|
+
|
251
|
+
# Return a new FileList with the results of running +sub+ against each
|
252
|
+
# element of the oringal list.
|
253
|
+
#
|
254
|
+
# Example:
|
255
|
+
# FileList['a.c', 'b.c'].sub(/\.c$/, '.o') => ['a.o', 'b.o']
|
256
|
+
#
|
257
|
+
def sub(pat, rep)
|
258
|
+
inject(FileList.new) { |res, fn| res << fn.sub(pat,rep) }
|
259
|
+
end
|
260
|
+
|
261
|
+
# Return a new FileList with the results of running +gsub+ against each
|
262
|
+
# element of the original list.
|
263
|
+
#
|
264
|
+
# Example:
|
265
|
+
# FileList['lib/test/file', 'x/y'].gsub(/\//, "\\")
|
266
|
+
# => ['lib\\test\\file', 'x\\y']
|
267
|
+
#
|
268
|
+
def gsub(pat, rep)
|
269
|
+
inject(FileList.new) { |res, fn| res << fn.gsub(pat,rep) }
|
270
|
+
end
|
271
|
+
|
272
|
+
# Same as +sub+ except that the oringal file list is modified.
|
273
|
+
def sub!(pat, rep)
|
274
|
+
each_with_index { |fn, i| self[i] = fn.sub(pat,rep) }
|
275
|
+
self
|
276
|
+
end
|
277
|
+
|
278
|
+
# Same as +gsub+ except that the original file list is modified.
|
279
|
+
def gsub!(pat, rep)
|
280
|
+
each_with_index { |fn, i| self[i] = fn.gsub(pat,rep) }
|
281
|
+
self
|
282
|
+
end
|
283
|
+
|
284
|
+
# Apply the pathmap spec to each of the included file names, returning a
|
285
|
+
# new file list with the modified paths. (See String#pathmap for
|
286
|
+
# details.)
|
287
|
+
def pathmap(spec=nil)
|
288
|
+
collect { |fn| fn.pathmap(spec) }
|
289
|
+
end
|
290
|
+
|
291
|
+
# Return a new array with <tt>String#ext</tt> method applied to each
|
292
|
+
# member of the array.
|
293
|
+
#
|
294
|
+
# This method is a shortcut for:
|
295
|
+
#
|
296
|
+
# array.collect { |item| item.ext(newext) }
|
297
|
+
#
|
298
|
+
# +ext+ is a user added method for the Array class.
|
299
|
+
def ext(newext='')
|
300
|
+
collect { |fn| fn.ext(newext) }
|
301
|
+
end
|
302
|
+
|
303
|
+
|
304
|
+
# Grep each of the files in the filelist using the given pattern. If a
|
305
|
+
# block is given, call the block on each matching line, passing the file
|
306
|
+
# name, line number, and the matching line of text. If no block is given,
|
307
|
+
# a standard emac style file:linenumber:line message will be printed to
|
308
|
+
# standard out.
|
309
|
+
def egrep(pattern)
|
310
|
+
each do |fn|
|
311
|
+
open(fn) do |inf|
|
312
|
+
count = 0
|
313
|
+
inf.each do |line|
|
314
|
+
count += 1
|
315
|
+
if pattern.match(line)
|
316
|
+
if block_given?
|
317
|
+
yield fn, count, line
|
318
|
+
else
|
319
|
+
puts "#{fn}:#{count}:#{line}"
|
320
|
+
end
|
321
|
+
end
|
322
|
+
end
|
323
|
+
end
|
324
|
+
end
|
325
|
+
end
|
326
|
+
|
327
|
+
# Return a new file list that only contains file names from the current
|
328
|
+
# file list that exist on the file system.
|
329
|
+
def existing
|
330
|
+
select { |fn| File.exist?(fn) }
|
331
|
+
end
|
332
|
+
|
333
|
+
# Modify the current file list so that it contains only file name that
|
334
|
+
# exist on the file system.
|
335
|
+
def existing!
|
336
|
+
resolve
|
337
|
+
@items = @items.select { |fn| File.exist?(fn) }
|
338
|
+
self
|
339
|
+
end
|
340
|
+
|
341
|
+
# FileList version of partition. Needed because the nested arrays should
|
342
|
+
# be FileLists in this version.
|
343
|
+
def partition(&block) # :nodoc:
|
344
|
+
resolve
|
345
|
+
result = @items.partition(&block)
|
346
|
+
[
|
347
|
+
FileList.new.import(result[0]),
|
348
|
+
FileList.new.import(result[1]),
|
349
|
+
]
|
350
|
+
end
|
351
|
+
|
352
|
+
# Convert a FileList to a string by joining all elements with a space.
|
353
|
+
def to_s
|
354
|
+
resolve
|
355
|
+
self.join(' ')
|
356
|
+
end
|
357
|
+
|
358
|
+
# Add matching glob patterns.
|
359
|
+
def add_matching(pattern)
|
360
|
+
Dir[pattern].each do |fn|
|
361
|
+
self << fn unless exclude?(fn)
|
362
|
+
end
|
363
|
+
end
|
364
|
+
private :add_matching
|
365
|
+
|
366
|
+
# Should the given file name be excluded?
|
367
|
+
def exclude?(fn)
|
368
|
+
calculate_exclude_regexp unless @exclude_re
|
369
|
+
fn =~ @exclude_re || @exclude_procs.any? { |p| p.call(fn) }
|
370
|
+
end
|
371
|
+
|
372
|
+
DEFAULT_IGNORE_PATTERNS = [
|
373
|
+
/(^|[\/\\])CVS([\/\\]|$)/,
|
374
|
+
/(^|[\/\\])\.svn([\/\\]|$)/,
|
375
|
+
/\.bak$/,
|
376
|
+
/~$/
|
377
|
+
]
|
378
|
+
DEFAULT_IGNORE_PROCS = [
|
379
|
+
proc { |fn| fn =~ /(^|[\/\\])core$/ && ! File.directory?(fn) }
|
380
|
+
]
|
381
|
+
# @exclude_patterns = DEFAULT_IGNORE_PATTERNS.dup
|
382
|
+
|
383
|
+
def import(array)
|
384
|
+
@items = array
|
385
|
+
self
|
386
|
+
end
|
387
|
+
|
388
|
+
class << self
|
389
|
+
# Create a new file list including the files listed. Similar to:
|
390
|
+
#
|
391
|
+
# FileList.new(*args)
|
392
|
+
def [](*args)
|
393
|
+
new(*args)
|
394
|
+
end
|
395
|
+
end
|
396
|
+
end # FileList
|
metadata
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: filelist
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- "Jakub \xC5\xA0\xC5\xA5astn\xC3\xBD aka Botanicus"
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain:
|
11
|
+
date: 2009-12-31 00:00:00 +01:00
|
12
|
+
default_executable:
|
13
|
+
dependencies: []
|
14
|
+
|
15
|
+
description: ""
|
16
|
+
email: knava.bestvinensis@gmail.com
|
17
|
+
executables: []
|
18
|
+
|
19
|
+
extensions: []
|
20
|
+
|
21
|
+
extra_rdoc_files: []
|
22
|
+
|
23
|
+
files:
|
24
|
+
- filelist.gemspec
|
25
|
+
- lib/filelist.rb
|
26
|
+
- LICENSE
|
27
|
+
- Rakefile
|
28
|
+
- README.textile
|
29
|
+
- TODO
|
30
|
+
has_rdoc: true
|
31
|
+
homepage: http://github.com/botanicus/filelist
|
32
|
+
licenses: []
|
33
|
+
|
34
|
+
post_install_message:
|
35
|
+
rdoc_options: []
|
36
|
+
|
37
|
+
require_paths:
|
38
|
+
- lib
|
39
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: "0"
|
44
|
+
version:
|
45
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: "0"
|
50
|
+
version:
|
51
|
+
requirements: []
|
52
|
+
|
53
|
+
rubyforge_project:
|
54
|
+
rubygems_version: 1.3.5
|
55
|
+
signing_key:
|
56
|
+
specification_version: 3
|
57
|
+
summary: FileList is taken from Rake
|
58
|
+
test_files: []
|
59
|
+
|