rbfind 2.2 → 2.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 +4 -4
- data/bin/rbfind +48 -19
- data/lib/rbfind.rb +122 -101
- data/lib/rbfind/humansiz.rb +16 -5
- data/lib/rbfind/table.rb +35 -25
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f0a448408396d2339b4aa0656dfeb579c6533373623ca9e6cb0e4b48812e2b03
|
4
|
+
data.tar.gz: d71f32510fdc92315c7f5aaa16d08560d6bc6b1d9515af85913f3c4a4f42e6ba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bab39e437deaa7cf9d4e283f83c5ee354c3f28b4ed7159b90adfdcc7210c2dfce80593cfadcceb3c0702c4641c93b66b4fd2e4351deccd62adb9267754aaf588
|
7
|
+
data.tar.gz: 44adde8bccbb1f840187bb9973a7e835d098f05c715fa22cf493a06fa8c00bc5bdbdb7e0d5da77db925034f3315f16148fd7431ed8b745febaeaadda0d5fd560
|
data/bin/rbfind
CHANGED
@@ -33,13 +33,17 @@ module RbFind
|
|
33
33
|
[ %w(--depth -d), nil, "yield directory after its contents"],
|
34
34
|
[ %w(--maxdepth -m), :num, "maxium step depth"],
|
35
35
|
[ %w(--follow -y), nil, "follow symbolic links"],
|
36
|
-
[ %w(--nosort -
|
37
|
-
[ %w(--sort-by -s), :str, "sort expression
|
38
|
-
[ %w(--reverse -R),
|
36
|
+
[ %w(--nosort -U), nil, "unsorted"],
|
37
|
+
[ %w(--sort-by -s), :str, "sort expression"],
|
38
|
+
[ %w(--reverse -R), nil, "reverse the sort"],
|
39
|
+
[ %w(--time -t), nil, "sort by time, newest first"],
|
40
|
+
[ %w(--size -S), nil, "sort by size, largest first"],
|
41
|
+
[ %w(--dirs -F), nil, "sort directories before files"],
|
39
42
|
[ %w(--require -r), :rb, "require library"],
|
40
43
|
[ %w(--puts-path -p), nil, "do 'puts path/cpath' on true block"],
|
41
44
|
[ %w(--ls-l -P), nil, "do 'ls -l' style output on true block"],
|
42
|
-
[ %w(--
|
45
|
+
[ %w(--long -Q), nil, "alternate long format on true block"],
|
46
|
+
[ %w(--wider -+), nil, "widen fields in long output format"],
|
43
47
|
[ %w(--slash -/), nil, "append a slash to directory names"],
|
44
48
|
[ %w(--lines -l), :blk, "surround block by 'lines { |$_,$.| ... }'"],
|
45
49
|
[ %w(--reallines -L), :blk, "same as -l but stop at any null character"],
|
@@ -48,14 +52,15 @@ module RbFind
|
|
48
52
|
[ %w(--binary -b), nil, "grep even binary files"],
|
49
53
|
[ %w(--no-vcs -C), nil, "prune version control dirs (CVS/.svn/.git)"],
|
50
54
|
[ %w(--no-swap -W), nil, "ignore Vim swapfiles"],
|
51
|
-
[ %w(--skip -k), :
|
52
|
-
[ %w(--demand -D), :
|
55
|
+
[ %w(--skip -k), :rgx, "filenames to skip"],
|
56
|
+
[ %w(--demand -D), :rgx, "skip all filenames but these"],
|
53
57
|
[ %w(--ext -e), :lst, "skip all filename extensions but these"],
|
54
58
|
[ %w(--visible -I), nil, "skip all hidden (starting with .dot)"],
|
59
|
+
[ %w(--all -a), nil, "all, including hidden (starting with .dot)"],
|
55
60
|
[ %w(--nodirs -N), nil, "skip directories"],
|
56
61
|
[ %w(--begin -B), :blk, "eval block before begin"],
|
57
62
|
[ %w(--end -E), :blk, "eval block after end"],
|
58
|
-
[ %w(--file -f), :
|
63
|
+
[ %w(--file -f), :nam, "read block expression from file"],
|
59
64
|
[ %w(--encoding -K), :str, "encoding extern[:intern] (same as ruby -E)"],
|
60
65
|
]
|
61
66
|
|
@@ -81,12 +86,16 @@ module RbFind
|
|
81
86
|
when '--maxdepth' then @params[ :max_depth] = arg.to_i
|
82
87
|
when '--follow' then @params[ :follow] = true
|
83
88
|
when '--nosort' then @params[ :sort] = false
|
84
|
-
when '--sort-by' then @params[ :sort] = instance_eval "proc {
|
89
|
+
when '--sort-by' then @params[ :sort] = instance_eval "proc { #{arg} }"
|
90
|
+
when '--time' then @params[ :sort] = proc { mtime } ; @params[ :reverse] = true
|
91
|
+
when '--size' then @params[ :sort] = proc { size } ; @params[ :reverse] = true
|
92
|
+
when '--dirs' then @params[ :dirs] = true
|
85
93
|
when '--reverse' then @params[ :reverse] = true
|
86
94
|
when '--require' then require arg
|
87
95
|
when '--puts-path' then @puts = true
|
88
|
-
when '--ls-l' then @puts =
|
89
|
-
when '--
|
96
|
+
when '--ls-l' then @puts = :ls ; @wds = 6 ; @wd = 6
|
97
|
+
when '--long' then @puts = :alt ; @wds = 7 ; @wd = 4
|
98
|
+
when '--wider' then @wd and @wd += 2.succ ; @wds and @wds += @puts == :alt ? 4 : 3
|
90
99
|
when '--slash' then @slash = true
|
91
100
|
when '--lines' then @lines = :plain ; @block = arg
|
92
101
|
when '--reallines' then @lines = :plain ; @real = true ; @block = arg
|
@@ -99,6 +108,7 @@ module RbFind
|
|
99
108
|
when '--demand' then @demand = arg
|
100
109
|
when '--ext' then @ext = arg
|
101
110
|
when '--visible' then @visible = true
|
111
|
+
when '--all' then @visible = false
|
102
112
|
when '--nodirs' then @nodirs = true
|
103
113
|
when '--begin' then @blkbegin = arg
|
104
114
|
when '--end' then @blkend = arg
|
@@ -142,7 +152,7 @@ module RbFind
|
|
142
152
|
@binary or @block = "not binary? and (#@block)"
|
143
153
|
|
144
154
|
else
|
145
|
-
@block ||= if @args.last and not (File.
|
155
|
+
@block ||= if @args.last and not (File.lstat @args.last rescue false) then
|
146
156
|
@args.pop.dup
|
147
157
|
else
|
148
158
|
@puts ||= true
|
@@ -150,11 +160,15 @@ module RbFind
|
|
150
160
|
end
|
151
161
|
if @puts then
|
152
162
|
@block = "( #@block ) and "
|
153
|
-
@block <<
|
154
|
-
|
155
|
-
"
|
156
|
-
|
157
|
-
|
163
|
+
@block << case @puts
|
164
|
+
when :alt then
|
165
|
+
"spcsep stype+modes, user!.w#@wd, group!.w#@wd, size.w_#@wds, " +
|
166
|
+
"mtime.long, #{opath} + #{co ? 'carrow' : 'arrow'}.to_s"
|
167
|
+
when :ls then
|
168
|
+
"spcsep stype+modes, user.w#@wd, group.w#@wd, size.w#@wds, " +
|
169
|
+
"mtime.lsish, #{opath} + #{co ? 'carrow' : 'arrow'}.to_s"
|
170
|
+
else
|
171
|
+
"puts #{opath}"
|
158
172
|
end
|
159
173
|
end
|
160
174
|
|
@@ -246,7 +260,7 @@ module RbFind
|
|
246
260
|
$ rbfind -d -m3 -- /mnt/data
|
247
261
|
$ rbfind 'filesize > 10.MiB and colsep size.to_hib, path'
|
248
262
|
|
249
|
-
$ rbfind -
|
263
|
+
$ rbfind -U "name =~ /^\.*/ ; $'.downcase"
|
250
264
|
$ rbfind -B '$s=0' -E 'puts $s.to_h' 'filesize {|s|$s+=s}'
|
251
265
|
$ rbfind 'puts path if ext == ".rb"'
|
252
266
|
$ rbfind -p 'ext == ".rb"'
|
@@ -447,8 +461,9 @@ class Integer
|
|
447
461
|
# convenient formatting, right justification
|
448
462
|
def method_missing sym, *args
|
449
463
|
case sym.to_s # .to_s for Ruby 1.8
|
450
|
-
when /\
|
451
|
-
|
464
|
+
when /\Aw(\d+)/ then "%#{$1}d" % self
|
465
|
+
when /\Aw_(\d+)/ then to_g.rjust $1.to_i
|
466
|
+
else super
|
452
467
|
end
|
453
468
|
end
|
454
469
|
end
|
@@ -483,6 +498,20 @@ class NilClass
|
|
483
498
|
end
|
484
499
|
end
|
485
500
|
|
501
|
+
class TrueClass
|
502
|
+
def <=> oth
|
503
|
+
oth == true ? 0 : oth == false ? 1 : nil
|
504
|
+
end
|
505
|
+
include Enumerable
|
506
|
+
end
|
507
|
+
|
508
|
+
class FalseClass
|
509
|
+
def <=> oth
|
510
|
+
oth == false ? 0 : oth == true ? -1 : nil
|
511
|
+
end
|
512
|
+
include Enumerable
|
513
|
+
end
|
514
|
+
|
486
515
|
class Proc
|
487
516
|
def to_s
|
488
517
|
"#<%s:0x%08x>" % [ self.class, object_id]
|
data/lib/rbfind.rb
CHANGED
@@ -8,7 +8,7 @@ require "rbfind/csv"
|
|
8
8
|
|
9
9
|
module RbFind
|
10
10
|
|
11
|
-
VERSION = "2.
|
11
|
+
VERSION = "2.6".freeze
|
12
12
|
|
13
13
|
=begin rdoc
|
14
14
|
|
@@ -241,7 +241,7 @@ Reverse sort:
|
|
241
241
|
|
242
242
|
Sort without case sensitivity and preceding dot:
|
243
243
|
|
244
|
-
s = proc {
|
244
|
+
s = proc { name =~ /^\.?/ ; $'.downcase }
|
245
245
|
RbFind.run sort: s do
|
246
246
|
puts path
|
247
247
|
end
|
@@ -270,36 +270,30 @@ Sort without case sensitivity and preceding dot:
|
|
270
270
|
|
271
271
|
private
|
272
272
|
|
273
|
-
|
274
|
-
sort:
|
275
|
-
@max_depth = max_depth
|
276
|
-
@depth_first = depth_first
|
277
|
-
@follow = follow
|
278
|
-
@sort = sort_parser sort, reverse
|
279
|
-
@error = error
|
280
|
-
@block = block
|
281
|
-
|
282
|
-
ostat = $stdout.stat
|
283
|
-
@ostat = ostat if ostat.file?
|
284
|
-
|
285
|
-
@wd, @start, @count = Dir.getwd, Time.now, 0
|
286
|
-
end
|
273
|
+
Params = Struct.new :max_depth, :depth_first, :follow,
|
274
|
+
:sort, :dirs, :reverse, :error, :block
|
287
275
|
|
288
|
-
def
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
276
|
+
def initialize max_depth: nil, depth_first: nil, follow: nil,
|
277
|
+
sort: true, dirs: false, reverse: false, error: nil, &block
|
278
|
+
@params = Params.new max_depth, depth_first, follow,
|
279
|
+
(sort_parser sort), dirs, reverse, error, block
|
280
|
+
@start = Time.instance_eval { @start = Time.now }
|
281
|
+
Time.instance_eval { @start = Time.now }
|
282
|
+
@count, @depth = 0, 0
|
283
|
+
end
|
284
|
+
|
285
|
+
def sort_parser st
|
286
|
+
case st
|
287
|
+
when Proc then proc { |l| l.sort_by! { |e| e.instance_eval &st } }
|
288
|
+
when String then proc { |l| l.sort_by! { |e| e.instance_eval st } }
|
289
|
+
when nil, false then proc { }
|
290
|
+
else proc { |l| l.sort_by! { |e| e.name } }
|
293
291
|
end
|
294
|
-
rev ? proc { |l| r.call l ; l.reverse! } : r
|
295
292
|
end
|
296
293
|
|
297
294
|
public
|
298
295
|
|
299
|
-
attr_reader :wd, :start, :count, :depth
|
300
|
-
|
301
296
|
def run *args
|
302
|
-
@levels, @depth = [], 0
|
303
297
|
args.flatten!
|
304
298
|
args.compact!
|
305
299
|
if args.empty? then
|
@@ -307,94 +301,69 @@ Sort without case sensitivity and preceding dot:
|
|
307
301
|
else
|
308
302
|
args.each { |base|
|
309
303
|
handle_error do
|
310
|
-
File.
|
311
|
-
|
304
|
+
File.lstat base rescue raise "`#{base}` doesn't exist."
|
305
|
+
e = Entry.new base, self
|
306
|
+
enter e
|
312
307
|
end
|
313
308
|
}
|
314
309
|
end
|
315
|
-
ensure
|
316
|
-
@levels = @depth = nil
|
317
310
|
end
|
318
311
|
|
312
|
+
attr_reader :start, :count
|
313
|
+
attr_reader :depth
|
314
|
+
attr_reader :current
|
315
|
+
|
319
316
|
private
|
320
317
|
|
321
|
-
def
|
322
|
-
|
318
|
+
def enter elem
|
319
|
+
c_, @current = @current, elem
|
320
|
+
@count += 1
|
321
|
+
visit_depth
|
322
|
+
ensure
|
323
|
+
@current = c_
|
323
324
|
end
|
324
325
|
|
325
|
-
def
|
326
|
-
@
|
327
|
-
|
328
|
-
|
329
|
-
@
|
326
|
+
def visit_dir dir
|
327
|
+
return if @params.max_depth and @params.max_depth == @depth
|
328
|
+
list = (Dir.new dir).children.map { |f| Entry.new f, self }
|
329
|
+
@params.sort.call list
|
330
|
+
@params.reverse and list.reverse!
|
331
|
+
@params.dirs and list = list.partition { |e| e.rstat.directory? }.flatten
|
332
|
+
begin
|
333
|
+
@depth += 1
|
334
|
+
list.each { |e| enter e }
|
335
|
+
ensure
|
336
|
+
@depth -= 1
|
337
|
+
end
|
330
338
|
end
|
331
339
|
|
332
|
-
def visit_depth
|
333
|
-
@
|
334
|
-
p_, @path = @path, join_path
|
335
|
-
if @depth_first then
|
340
|
+
def visit_depth
|
341
|
+
if @params.depth_first then
|
336
342
|
enter_dir
|
337
|
-
call_block
|
343
|
+
call_block
|
338
344
|
else
|
339
345
|
call_block and enter_dir
|
340
346
|
end
|
341
|
-
@count += 1
|
342
|
-
ensure
|
343
|
-
@path = p_
|
344
|
-
@levels.pop
|
345
347
|
end
|
346
348
|
|
347
349
|
def enter_dir
|
348
|
-
return unless
|
349
|
-
|
350
|
-
return unless @follow and handle_error do
|
351
|
-
d = @path.dup
|
352
|
-
while d != Dir::CUR_DIR do
|
353
|
-
d, = File.split d
|
354
|
-
raise "cyclic recursion in #@path" if File.identical? d, @path
|
355
|
-
end
|
356
|
-
true
|
357
|
-
end
|
358
|
-
end
|
350
|
+
return unless @current.stat.directory? || (@params.follow &&
|
351
|
+
@current.symlink? && @current.rstat.directory?)
|
359
352
|
handle_error do
|
360
|
-
|
353
|
+
@current.cyclic? and
|
354
|
+
raise "Cyclic recursion in #{@current.path}"
|
355
|
+
visit_dir @current.path
|
361
356
|
end
|
362
357
|
end
|
363
358
|
|
364
|
-
def visit_dir dir
|
365
|
-
return if @max_depth and @max_depth == @depth
|
366
|
-
list = (Dir.new dir).children
|
367
|
-
@sort.call list
|
368
|
-
list.each { |f| visit f }
|
369
|
-
ensure
|
370
|
-
end
|
371
|
-
|
372
359
|
def call_block
|
373
|
-
e = Entry.new @levels.last, @path, self
|
374
360
|
handle_error do
|
375
|
-
$_, $. = e.name, count
|
376
361
|
begin
|
377
|
-
|
362
|
+
$_, $. = @current.name, @count
|
363
|
+
@current.instance_eval &@params.block
|
378
364
|
rescue Done
|
379
365
|
end
|
380
|
-
|
381
|
-
if e.name then
|
382
|
-
e.name == (File.basename e.name) or
|
383
|
-
raise "#{self.class}: rename to `#{e.name}' may not be a path."
|
384
|
-
e.name.freeze
|
385
|
-
@levels.pop
|
386
|
-
@levels.push e.name
|
387
|
-
p, @path = @path, join_path
|
388
|
-
File.rename p, @path
|
389
|
-
else
|
390
|
-
if e.dir? then
|
391
|
-
Dir.rmdir @path
|
392
|
-
else
|
393
|
-
File.unlink @path
|
394
|
-
end
|
395
|
-
end
|
396
|
-
end
|
397
|
-
true
|
366
|
+
@current.path
|
398
367
|
end
|
399
368
|
rescue Prune
|
400
369
|
end
|
@@ -402,9 +371,9 @@ Sort without case sensitivity and preceding dot:
|
|
402
371
|
def handle_error
|
403
372
|
yield
|
404
373
|
rescue
|
405
|
-
case @error
|
406
|
-
when Proc then @error.call
|
407
|
-
when String then instance_eval @error
|
374
|
+
case @params.error
|
375
|
+
when Proc then @params.error.call
|
376
|
+
when String then instance_eval @params.error
|
408
377
|
else raise
|
409
378
|
end
|
410
379
|
nil
|
@@ -417,21 +386,35 @@ Sort without case sensitivity and preceding dot:
|
|
417
386
|
|
418
387
|
attr_reader :path, :name
|
419
388
|
|
420
|
-
def initialize
|
421
|
-
@
|
389
|
+
def initialize filename, walk
|
390
|
+
@walk = walk
|
391
|
+
@prev, @name = walk.current, filename.dup.freeze
|
392
|
+
@path = join_path @name
|
393
|
+
end
|
394
|
+
|
395
|
+
protected
|
396
|
+
attr_reader :prev
|
397
|
+
private
|
398
|
+
def join_path name
|
399
|
+
@prev ? (File.join @prev.path, name).freeze : name
|
400
|
+
end
|
401
|
+
def reset
|
402
|
+
@fullpath = @stat = @rstat = @ostat = @colors = nil
|
422
403
|
end
|
404
|
+
public
|
423
405
|
|
406
|
+
def count ; @walk.count ; end
|
424
407
|
def depth ; @walk.depth ; end
|
425
408
|
def now ; @walk.start ; end
|
426
409
|
|
427
|
-
def fullpath ; @fullpath ||= File.absolute_path @path
|
410
|
+
def fullpath ; @fullpath ||= File.absolute_path @path ; end
|
428
411
|
|
429
412
|
def stat ; @stat ||= File.lstat @path ; end
|
430
413
|
def rstat ; @rstat ||= File.stat @path ; end
|
431
414
|
|
432
415
|
|
433
416
|
private
|
434
|
-
def append_slash s ;
|
417
|
+
def append_slash s ; directory? ? (File.join s, "") : s ; end
|
435
418
|
public
|
436
419
|
|
437
420
|
def path! ; append_slash path ; end
|
@@ -461,7 +444,23 @@ Sort without case sensitivity and preceding dot:
|
|
461
444
|
end
|
462
445
|
public
|
463
446
|
|
464
|
-
def
|
447
|
+
def directory? ; stat.directory? ; end
|
448
|
+
alias dir? directory?
|
449
|
+
|
450
|
+
def symlink? ; stat.symlink? ; end
|
451
|
+
|
452
|
+
def cyclic?
|
453
|
+
e = self
|
454
|
+
loop do
|
455
|
+
e = e.prev
|
456
|
+
e or break
|
457
|
+
if File.identical? e.path, @path then
|
458
|
+
return true
|
459
|
+
end
|
460
|
+
end
|
461
|
+
false
|
462
|
+
end
|
463
|
+
|
465
464
|
|
466
465
|
def aage ; @walk.start - stat.atime ; end
|
467
466
|
def mage ; @walk.start - stat.mtime ; end
|
@@ -516,10 +515,10 @@ Sort without case sensitivity and preceding dot:
|
|
516
515
|
end
|
517
516
|
|
518
517
|
|
519
|
-
def readlink ; File.readlink @path if
|
518
|
+
def readlink ; File.readlink @path if symlink? ; end
|
520
519
|
|
521
520
|
def broken_link?
|
522
|
-
return unless
|
521
|
+
return unless symlink?
|
523
522
|
rstat
|
524
523
|
false
|
525
524
|
rescue
|
@@ -529,7 +528,7 @@ Sort without case sensitivity and preceding dot:
|
|
529
528
|
|
530
529
|
ARROW = " -> "
|
531
530
|
def arrow
|
532
|
-
ARROW + (File.readlink @path) if
|
531
|
+
ARROW + (File.readlink @path) if symlink?
|
533
532
|
end
|
534
533
|
|
535
534
|
|
@@ -552,7 +551,11 @@ Sort without case sensitivity and preceding dot:
|
|
552
551
|
# Check whether a directory contains an entry.
|
553
552
|
#
|
554
553
|
def contains? name
|
555
|
-
|
554
|
+
p = File.join @path, name
|
555
|
+
File.lstat p
|
556
|
+
true
|
557
|
+
rescue
|
558
|
+
false
|
556
559
|
end
|
557
560
|
|
558
561
|
# :call-seq:
|
@@ -580,7 +583,8 @@ Sort without case sensitivity and preceding dot:
|
|
580
583
|
# nothing will be done.
|
581
584
|
#
|
582
585
|
def open &block
|
583
|
-
@ostat
|
586
|
+
@ostat ||= $stdout.stat
|
587
|
+
@ostat.identical? @path and
|
584
588
|
raise "Refusing to open output file."
|
585
589
|
File.open @path, &block if file?
|
586
590
|
end
|
@@ -690,10 +694,27 @@ Sort without case sensitivity and preceding dot:
|
|
690
694
|
include Csv
|
691
695
|
|
692
696
|
|
693
|
-
def rename newname
|
697
|
+
def rename newname
|
698
|
+
@name = newname
|
699
|
+
newname == (File.basename newname) or
|
700
|
+
raise "Rename to `#{newname}' may not be a path."
|
701
|
+
p = join_path newname
|
702
|
+
(File.exist? p) and raise "Rename to `#{p}` would overwrite."
|
703
|
+
File.rename @path, p
|
704
|
+
@name, @path = newname.dup.freeze, p
|
705
|
+
reset
|
706
|
+
end
|
694
707
|
alias mv rename
|
695
708
|
|
696
|
-
def rm
|
709
|
+
def rm
|
710
|
+
if directory? then
|
711
|
+
Dir.rmdir @path
|
712
|
+
else
|
713
|
+
File.unlink @path
|
714
|
+
end
|
715
|
+
@name = @path = nil
|
716
|
+
reset
|
717
|
+
end
|
697
718
|
|
698
719
|
|
699
720
|
def cname ; color name ; end
|
data/lib/rbfind/humansiz.rb
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
=begin rdoc
|
7
7
|
|
8
|
-
Human readable sizes
|
8
|
+
Human readable sizes and times.
|
9
9
|
|
10
10
|
Examples:
|
11
11
|
|
@@ -136,12 +136,23 @@ class Time
|
|
136
136
|
# file.stat.mtime.lsish #=> " 1. Apr 2008 "
|
137
137
|
#
|
138
138
|
def lsish
|
139
|
-
strftime "
|
140
|
-
(year == Time.now.year ? "%H:%M:%S" : "%Y ")
|
139
|
+
strftime "%e. %b " + (year == Time.start.year ? "%H:%M:%S" : "%Y ")
|
141
140
|
end
|
142
141
|
|
143
|
-
|
144
|
-
|
142
|
+
def long
|
143
|
+
s = Time.start
|
144
|
+
if year == s.year && month == s.month && day == s.day then
|
145
|
+
strftime "==%H:%M:%S"
|
146
|
+
else
|
147
|
+
strftime "%Y-%m-%d"
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
class <<self
|
152
|
+
def start
|
153
|
+
@start ||= Time.now
|
154
|
+
end
|
155
|
+
end
|
145
156
|
|
146
157
|
end
|
147
158
|
|
data/lib/rbfind/table.rb
CHANGED
@@ -9,18 +9,28 @@ module RbFind
|
|
9
9
|
|
10
10
|
def initialize *heads
|
11
11
|
heads.flatten!
|
12
|
-
@heads = heads
|
12
|
+
@heads = heads.map { |h|
|
13
|
+
a = case h
|
14
|
+
when />\z/ then +1
|
15
|
+
when /\^\z/ then 0
|
16
|
+
when /<?\z/ then -1
|
17
|
+
end
|
18
|
+
[ $`, a]
|
19
|
+
}
|
13
20
|
@rows = []
|
14
21
|
end
|
15
22
|
|
16
|
-
|
17
|
-
|
23
|
+
attr_reader :heads
|
24
|
+
protected :heads
|
25
|
+
def initialize_copy oth
|
26
|
+
@heads = oth.heads
|
27
|
+
@rows = []
|
18
28
|
end
|
19
29
|
|
20
30
|
def add *row
|
21
31
|
row.flatten!
|
22
32
|
n = @heads.size
|
23
|
-
row
|
33
|
+
row.map! { |r| break if n.zero? ; n -= 1 ; r.to_s }
|
24
34
|
@rows.push row
|
25
35
|
end
|
26
36
|
|
@@ -32,20 +42,24 @@ module RbFind
|
|
32
42
|
@rows.empty?
|
33
43
|
end
|
34
44
|
|
35
|
-
def output head: false
|
45
|
+
def output head: false, ifempty: nil
|
46
|
+
if empty? and ifempty then
|
47
|
+
puts ifempty
|
48
|
+
return
|
49
|
+
end
|
36
50
|
make_lines head: head do |l| puts l end
|
37
51
|
end
|
38
52
|
|
39
53
|
def make_lines head: false
|
40
54
|
rs = @rows
|
41
|
-
rs.unshift
|
55
|
+
rs.unshift @heads.map { |(h,a)| h } if head
|
42
56
|
w = calc_widths
|
43
57
|
rs.each { |r|
|
44
|
-
j = (w.zip @heads, r).map { |v,
|
45
|
-
case
|
46
|
-
when
|
47
|
-
when
|
48
|
-
when
|
58
|
+
j = (w.zip @heads, r).map { |v,(_,a),c|
|
59
|
+
case a
|
60
|
+
when -1 then c.ljust v
|
61
|
+
when 0 then c.center v
|
62
|
+
when +1 then c.rjust v
|
49
63
|
end
|
50
64
|
}
|
51
65
|
l = j.join " "
|
@@ -59,14 +73,14 @@ module RbFind
|
|
59
73
|
@html = ""
|
60
74
|
tag :table, table, nl: 2 do
|
61
75
|
tag :tr, row, nl: 1 do
|
62
|
-
|
63
|
-
tag :td,
|
76
|
+
@heads.each { |(h,a)|
|
77
|
+
tag :td, h.downcase, align: a do @html << h end
|
64
78
|
}
|
65
79
|
end
|
66
80
|
@rows.each { |r|
|
67
81
|
tag :tr, table, nl: 1 do
|
68
|
-
(@heads.zip
|
69
|
-
tag :td, g.downcase, align:
|
82
|
+
(@heads.zip r).each { |(g,a),c|
|
83
|
+
tag :td, g.downcase, align: a do @html << c end
|
70
84
|
}
|
71
85
|
end
|
72
86
|
}
|
@@ -86,13 +100,9 @@ module RbFind
|
|
86
100
|
w
|
87
101
|
end
|
88
102
|
|
89
|
-
def heads_plain
|
90
|
-
@heads.map { |h| h.sub /\W\z/, "" }
|
91
|
-
end
|
92
|
-
|
93
103
|
def tag name, cls, nl: 0, align: nil
|
94
104
|
@html << "<#{name}"
|
95
|
-
@html << " style=\"text-align: " << align << ";\"" if align
|
105
|
+
@html << " style=\"text-align: " << (html_align align) << ";\"" if align
|
96
106
|
@html << " class=\"" << cls << "\"" if cls
|
97
107
|
@html << ">"
|
98
108
|
@html << $/ if nl > 1
|
@@ -101,11 +111,11 @@ module RbFind
|
|
101
111
|
@html << $/ if nl > 0
|
102
112
|
end
|
103
113
|
|
104
|
-
def html_align
|
105
|
-
case
|
106
|
-
when
|
107
|
-
when
|
108
|
-
when
|
114
|
+
def html_align a
|
115
|
+
case a
|
116
|
+
when -1 then "left"
|
117
|
+
when 0 then "center"
|
118
|
+
when +1 then "right"
|
109
119
|
end
|
110
120
|
end
|
111
121
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbfind
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '2.
|
4
|
+
version: '2.6'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bertram Scharpf
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-03-04 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: |
|
14
14
|
A replacement for the standard UNIX command find.
|