rbfind 2.8.6 → 2.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 45064c66f0f1b078369e892f4619edb0a6ee35fb039bffd5dfee1c430516bf2c
4
- data.tar.gz: 9b2a8aa0630d6edb1ab3e5e4ea8b8c5ba163b9596d8181aa6acd1af0d0372f05
3
+ metadata.gz: aa9bf2ca868c2a2d061907c5fd2aff5e7fc0b16efca5a2cfce29ab760839444b
4
+ data.tar.gz: a739af2888f22b85c1780166dbf029273b7e76581d11fe0969bcdec8229ee66e
5
5
  SHA512:
6
- metadata.gz: bab1b1a56377b5d7327986b5af068ccb1468b8f669c51e8153d66cbf9ec79be5bb68941fb54b0cbf855c43c7dec1084b4e9cd75b5c523a9be733e66f146bca67
7
- data.tar.gz: 91ba9211832a27516bb2809f9173c579cba85131266eb5b23b5eb7b9c25290feb3d82aaee57506c7db592c48289658c807e0bd4e02c9ff9d530685718a375806
6
+ metadata.gz: 4687e55164883d414875e4bc2a9ee6dcc7e9ee06d17b9db0ef26411f68e4492fc21e29675ee28636d95e5bd088feacfe729fe4fa3eeb618a2d63f06349c46d55
7
+ data.tar.gz: 0d4a00f2d0ab6cae193cfa05d473127613e97560b65824bc80f449b5f955d6ddce4609b159dad1dba5c0504a1c91a603e98407c725c1ae1ac71d557c5684e119
data/bin/rbfind CHANGED
@@ -44,6 +44,7 @@ module RbFind
44
44
  [ %w(--puts-path -p), nil, "do 'puts path/cpath' on true block"],
45
45
  [ %w(--ls-l -P), nil, "do 'ls -l' style output on true block"],
46
46
  [ %w(--long -Q), nil, "alternate long format on true block"],
47
+ [ %w(--humanage -H), nil, "long format with human readable ages"],
47
48
  [ %w(--ino -J), nil, "show inodes and number of hard links"],
48
49
  [ %w(--wider -+), nil, "widen fields in long output format"],
49
50
  [ %w(--slash -/), nil, "append a slash to directory names"],
@@ -59,6 +60,7 @@ module RbFind
59
60
  [ %w(--ext -e), :lst, "skip all filename extensions but these"],
60
61
  [ %w(--visible -I), nil, "skip all hidden (starting with .dot)"],
61
62
  [ %w(--all -a), nil, "all, including hidden (starting with .dot)"],
63
+ [ %w(--icase -i), nil, "ignore case in file and path matches"],
62
64
  [ %w(--nodirs -N), nil, "skip directories"],
63
65
  [ %w(--begin -B), :blk, "eval block before begin"],
64
66
  [ %w(--end -E), :blk, "eval block after end"],
@@ -77,47 +79,49 @@ module RbFind
77
79
  opts.quiet = true
78
80
  opts.each do |opt,arg|
79
81
  case opt
80
- when '--help' then usage ; exit
81
- when '--version' then puts PROGRAM ; exit
82
- when '--examples' then usage_examples ; exit
83
- when '--verbose' then @verbose = true
84
- when '--show' then @show = true
85
- when '--bw' then @color = false
86
- when '--colored' then @color = true
87
- when '--depth' then @params[ :depth_first] = true
88
- when '--maxdepth' then @params[ :max_depth] = arg.to_i.nonzero?
89
- when '--argsdepth' then @params[ :args_depth] = true
90
- when '--follow' then @params[ :follow] = true
91
- when '--nosort' then @params[ :sort] = false
92
- when '--sort-by' then @params[ :sort] = instance_eval "proc { #{arg} }"
93
- when '--time' then @params[ :sort] = proc { mtime } ; @params[ :reverse] = true
94
- when '--size' then @params[ :sort] = proc { size } ; @params[ :reverse] = true
95
- when '--dirs' then @params[ :dirs] = true
96
- when '--reverse' then @params[ :reverse] = !@params[ :reverse]
97
- when '--require' then require arg
98
- when '--puts-path' then @puts = true
99
- when '--ls-l' then @puts = :ls ; @wds = 6 ; @wd = 6
100
- when '--long' then @puts = :alt ; @wds = 7 ; @wd = 4
101
- when '--ino' then @puts = :ino ; @wds = 8 ; @wd = 2
102
- when '--wider' then @wd and @wd += 2.succ ; @wds and @wds += @puts != :ls ? 4 : 3
103
- when '--slash' then @slash = true
104
- when '--lines' then @lines = :plain ; @block = arg
105
- when '--reallines' then @lines = :plain ; @real = true ; @block = arg
106
- when '--grep' then @lines = :grep ; @block = arg
107
- when '--igrep' then @lines = :grep ; @icase = true ; @block = arg
108
- when '--binary' then @binary = true
109
- when '--no-vcs' then @vcs = true
110
- when '--no-swap' then @vim = true
111
- when '--skip' then @skip = arg
112
- when '--demand' then @demand = arg
113
- when '--ext' then @ext = arg
114
- when '--visible' then @visible = true
115
- when '--all' then @visible = false
116
- when '--nodirs' then @nodirs = true
117
- when '--begin' then @blkbegin = arg
118
- when '--end' then @blkend = arg
119
- when '--file' then @block = File.read arg
120
- when '--encoding' then e, i = arg.split ":" ; set_encoding e, i
82
+ when '--help' then usage ; exit
83
+ when '--version' then puts PROGRAM ; exit
84
+ when '--examples' then usage_examples ; exit
85
+ when '--verbose' then @verbose = true
86
+ when '--show' then @show = true
87
+ when '--bw' then @color = false
88
+ when '--colored' then @color = true
89
+ when '--depth' then @params[ :depth_first] = true
90
+ when '--maxdepth' then @params[ :max_depth] = arg.to_i.nonzero?
91
+ when '--argsdepth' then @params[ :args_depth] = true
92
+ when '--follow' then @params[ :follow] = true
93
+ when '--nosort' then @params[ :sort] = false
94
+ when '--sort-by' then @params[ :sort] = instance_eval "proc { #{arg} }"
95
+ when '--time' then @params[ :sort] = proc { mtime } ; @params[ :reverse] = true
96
+ when '--size' then @params[ :sort] = proc { size } ; @params[ :reverse] = true
97
+ when '--dirs' then @params[ :dirs] = true
98
+ when '--reverse' then @params[ :reverse] = !@params[ :reverse]
99
+ when '--require' then require arg
100
+ when '--puts-path' then @puts = true
101
+ when '--ls-l' then @puts = :ls ; @wds = 6 ; @wd = 6
102
+ when '--long' then @puts = :alt ; @wds = 7 ; @wd = 4
103
+ when '--humanage' then @puts = :hum ; @wds = 7 ; @wd = 4
104
+ when '--ino' then @puts = :ino ; @wds = 8 ; @wd = 2
105
+ when '--wider' then @wd and @wd += 2 ; @wds and @wds += @puts != :ls ? 4 : 3
106
+ when '--slash' then @slash = true
107
+ when '--lines' then @lines = :plain ; @block = arg
108
+ when '--reallines' then @lines = :plain ; @real = true ; @block = arg
109
+ when '--grep' then @lines = :grep ; @block = arg
110
+ when '--igrep' then @lines = :grep ; @icase = true ; @block = arg
111
+ when '--binary' then @binary = true
112
+ when '--no-vcs' then @vcs = true
113
+ when '--no-swap' then @vim = true
114
+ when '--skip' then @skip = arg
115
+ when '--demand' then @demand = arg
116
+ when '--ext' then @ext = arg
117
+ when '--visible' then @visible = true
118
+ when '--all' then @visible = false
119
+ when '--icase' then @icase = true
120
+ when '--nodirs' then @nodirs = true
121
+ when '--begin' then @blkbegin = arg
122
+ when '--end' then @blkend = arg
123
+ when '--file' then @block = File.open arg do |f| f.each { |l| l.chomp! } end
124
+ when '--encoding' then e, i = arg.split ":" ; set_encoding e, i
121
125
  end
122
126
  end
123
127
  @args = $*.dup
@@ -138,91 +142,126 @@ module RbFind
138
142
  exit 8
139
143
  end
140
144
 
145
+ def run
146
+ if @show then
147
+ show
148
+ else
149
+ execute
150
+ end
151
+ end
152
+
153
+ private
154
+
155
+ INDENT = " "*2
156
+
157
+ def long_fmt ug_bang, grp, time, opath, co
158
+ b = "!" if ug_bang
159
+ g = "_" if grp
160
+ [
161
+ "spcsep stype+modes,",
162
+ [
163
+ "user#{b}.w#@wd, group#{b}.w#@wd,",
164
+ "size.w#{g}#@wds, #{time},",
165
+ "#{opath} + #{co ? 'carrow' : 'arrow'}.to_s",
166
+ ]
167
+ ]
168
+ end
169
+
170
+ def build_re str, flags
171
+ (Regexp.new str, flags).inspect
172
+ end
173
+
174
+ def build_re_ext flags
175
+ exts = @ext.split(/ +|,/).map { |e| e.delete_prefix! "." ; e }
176
+ ej = exts.join '|'
177
+ str = '\A\.(' + ej + ')\z'
178
+ (Regexp.new str, flags).inspect
179
+ end
180
+
181
+ def last_arg_not_a_file
182
+ l = @args.last
183
+ return unless l
184
+ return if (File.lstat l rescue false)
185
+ unless l =~ /[;<>{}\[\]()*?'"!&|]/ then
186
+ return if l =~ %r(\A[^ /]+/)
187
+ return if l =~ %r(\A\S*/\w*[^imoxuesn]\w*\b(?!:/))
188
+ end
189
+ true
190
+ end
191
+
192
+ def join_code a, ind = 0
193
+ case a
194
+ when Array then
195
+ a.map { |e| join_code e, ind + 1 }.join "\n"
196
+ else
197
+ INDENT * ind + a
198
+ end
199
+ end
200
+
201
+ def pre_block str
202
+ @block = [ str, *@block]
203
+ end
204
+
141
205
  def build_block
142
206
  co = color_on $stdout
143
207
  opath = co ? "cpath" : "path"
144
208
  @slash and opath << "!"
145
209
  case @lines
146
- when :plain then
147
- @puts and @block = "( #@block ) and colsep #{opath}, num, line"
148
- @real and @block = "break if ~/\0/o ; #@block"
149
- @block = "lines { |line,num| #@block }"
150
-
151
- when :grep then
152
- re = Regexp.new @block, @icase && Regexp::IGNORECASE
153
- @block = "grep %r#{re.inspect}"
154
- @block << ", true" if co
155
- @block << " ; $stdout.flush" unless $stdout.tty?
156
- @binary or @block = "not binary? and (#@block)"
157
-
158
- else
159
- @block ||= if @args.last and not (File.lstat @args.last rescue false) then
160
- @args.pop.dup
210
+ when :plain then
211
+ @block = [ @block]
212
+ @puts and @block = [ "if (", @block, ") then", [ "colsep #{opath}, num, line"], "end" ]
213
+ @real and pre_block "break if ~/\\0/o"
214
+ @block = [ "lines { |line,num|", [ "$_, $. = line, num"], @block, "}"]
215
+
216
+ when :grep then
217
+ ic = Regexp::IGNORECASE if @icase
218
+ color = ", true" if co
219
+ @block = [ "grep %r#{build_re @block, ic}#{color}"]
220
+ @block.push "$stdout.flush" unless $stdout.tty?
221
+ @binary or @block = [ "unless binary? then", @block, "end"]
222
+
223
+ else
224
+ unless @block then
225
+ if last_arg_not_a_file then
226
+ @block = @args.pop
161
227
  else
162
228
  @puts ||= true
163
- "true"
164
229
  end
165
- if @puts then
166
- @block = "( #@block ) and "
167
- @block << case @puts
168
- when :ls then
169
- "spcsep stype+modes, user.w#@wd, group.w#@wd, size.w#@wds, " +
170
- "mtime.lsish, #{opath} + #{co ? 'carrow' : 'arrow'}.to_s"
171
- when :alt then
172
- "spcsep stype+modes, user!.w#@wd, group!.w#@wd, size.w_#@wds, " +
173
- "mtime.long, #{opath} + #{co ? 'carrow' : 'arrow'}.to_s"
174
- when :ino then
175
- "spcsep ino.w#@wds, nlink.w#@wd, #{opath}"
176
- else
177
- "puts #{opath}"
230
+ end
231
+ if @puts then
232
+ cond = @block
233
+ @block = case @puts
234
+ when :ls then long_fmt false, false, "mtime.lsish", opath, co
235
+ when :alt then long_fmt true, true, "mtime.long", opath, co
236
+ when :hum then long_fmt true, true, "mage.t.r4", opath, co
237
+ when :ino then [ "spcsep ino.w#@wds, nlink.w#@wd, #{opath}"]
238
+ else [ "puts #{opath}"]
178
239
  end
179
- end
180
-
181
- end
182
-
183
- osic = File::ALT_SEPARATOR&&Regexp::IGNORECASE
184
- if @skip then
185
- re = Regexp.new @skip, osic
186
- @block.insert 0, "done if name =~ #{re.inspect} ; "
187
- end
188
-
189
- if @demand then
190
- re = Regexp.new @demand, osic
191
- @block.insert 0, "done unless name =~ #{re.inspect} ; "
192
- end
240
+ @block = [ "if (", [ cond], ") then", @block, "end"] if cond
241
+ end
193
242
 
194
- if @ext then
195
- re = Regexp.new '\A\.(' +
196
- @ext.split(/ +|,/).map { |e| e[ /\A\.?(.*)\z/, 1] }.join('|') +
197
- ')\z', osic
198
- @block.insert 0, "ext =~ #{re.inspect} or done ; "
199
243
  end
200
244
 
201
- @visible and @block.insert 0, "visible? or done ; "
202
-
203
- @nodirs and @block.insert 0, "done if dir? ; "
245
+ osic = Regexp::IGNORECASE if File::ALT_SEPARATOR || @icase
246
+ @skip and pre_block "done if name =~ #{build_re @skip, osic}"
247
+ @demand and pre_block "done unless name =~ #{build_re @demand, osic}"
248
+ @ext and pre_block "done unless ext =~ #{build_re_ext osic}"
204
249
 
205
- @vcs and @block.insert 0, "no_vcs ; "
206
- @vim and @block.insert 0, "vimswap? and done ; "
250
+ @visible and pre_block "done unless visible?"
251
+ @nodirs and pre_block "done if dir?"
252
+ @vcs and pre_block "no_vcs"
253
+ @vim and pre_block "done if vimswap?"
207
254
 
208
255
  @params[ :error] = proc do
209
256
  case $!
210
- when Errno::EPIPE then raise
211
- when NameError, TypeError then raise
212
- when ArgumentError then raise
213
- else show_error $!
257
+ when Errno::EPIPE then raise
258
+ when NameError, TypeError then raise
259
+ when ArgumentError then raise
260
+ else show_error $!
214
261
  end
215
262
  end
216
263
  end
217
264
 
218
- def run
219
- if @show then
220
- show
221
- else
222
- execute
223
- end
224
- end
225
-
226
265
  private
227
266
 
228
267
  def usage
@@ -250,56 +289,56 @@ module RbFind
250
289
  def usage_examples
251
290
  usage
252
291
  puts <<~'EOT'
253
- Examples:
254
- $ rbfind -p 'file and age < 5.m'
255
- $ rbfind -p 'file and age > 1.d'
256
- $ rbfind -p '(90.d .. 183.d) === age'
257
-
258
- $ rbfind -Cg require
259
- $ rbfind -Cp
260
- $ rbfind 'filesize < 100.kB and grep /require/'
261
- $ rbfind -g 'define\s*ALLOC_N'
262
- $ rbfind myproject -e rb -l '~/require/ and puts $_'
263
-
264
- $ rbfind -pe '.rb c h'
265
- $ rbfind /usr/include -e .h -g EACCES
266
- $ rbfind -d -m3 -- /mnt/data
267
- $ rbfind 'filesize > 10.MiB and colsep size.to_hib, path'
268
-
269
- $ rbfind -U "name =~ /^\.*/ ; $'.downcase"
270
- $ rbfind -B '$s=0' -E 'puts $s.to_h' 'filesize {|s|$s+=s}'
271
- $ rbfind 'puts path if ext == ".rb"'
272
- $ rbfind -p 'ext == ".rb"'
273
- $ rbfind /usr/include -p -D '\.h$' -l '~/EACCES/'
274
- $ rbfind /usr/include -pD 'pg|pq|postgres' dir
275
- $ rbfind 'no_svn ; puts path'
276
- $ rbfind 'prune if name == ".svn" ; puts path'
277
- $ rbfind -p 'prune if name == ".svn"'
278
- $ rbfind myproject 'name[/\.rb$/] and lines { |l,i| l=~/require/ and puts l }'
279
- # rbfind /etc 'lines { |l,| l["192.168."] and (puts path ; break) }'
280
- $ rbfind /etc 'readable? or raise "Access denied: #{path}" ;
281
- > lines { |l,| l["192.168."] and (puts path ; break) }'
282
-
283
- $ rbfind 'col_sep stype+modes, size.w10, path'
284
- $ rbfind 'tab_sep stype+modes, size.w10, path'
285
- $ rbfind 'spc_sep stype+modes, size.to_h, user, group, mtime.lsish, path'
286
- $ rbfind 'p stype+modes, size.to_h, user, group, mtime.lsish, path'
287
- $ rbfind 'p stype+modes, size.to_h, user, group, mtime!, path'
288
- $ rbfind 'p stype+modes, size.to_h, user, group, mtime.i, path'
289
- $ rbfind 'p mtime.u, path'
290
- $ rbfind 'p modes, user.w8, group.w8, size.w8, cpath + carrow.to_s'
291
-
292
- $ rbfind 'p digest_md5, size.w8, path'
293
- $ rbfind 'p digest_sha256, size.w8, path'
294
-
295
- $ rbfind 'rename name.downcase'
296
- $ rbfind 'ext == ".tgz" and rename without_ext+".tar.gz"'
297
-
298
- See the RbFind documentation or the "rbfind.rb" source file for more
299
- sophisticated examples and for a full list of file examination methods.
300
-
301
- Valid units are 1.s, 1.m, 1.h, 1.d, 1.w for time values and
302
- 1.kB == 1000, 1.kiB == 1024, 1.MB, 1.MiB for file sizes.
292
+ Examples:
293
+ $ rbfind -p 'file and age < 5.m'
294
+ $ rbfind -p 'file and age > 1.d'
295
+ $ rbfind -p '(90.d .. 183.d) === age'
296
+
297
+ $ rbfind -Cg require
298
+ $ rbfind -Cp
299
+ $ rbfind 'filesize < 100.kB and grep /require/'
300
+ $ rbfind -g 'define\s*ALLOC_N'
301
+ $ rbfind myproject -e rb -l '~/require/ and puts $_'
302
+
303
+ $ rbfind -pe '.rb c h'
304
+ $ rbfind /usr/include -e .h -g EACCES
305
+ $ rbfind -d -m3 -- /mnt/data
306
+ $ rbfind 'filesize > 10.MiB and colsep size.to_hib, path'
307
+
308
+ $ rbfind -U "name =~ /^\.*/ ; $'.downcase"
309
+ $ rbfind -B '$s=0' -E 'puts $s.to_h' 'filesize {|s|$s+=s}'
310
+ $ rbfind 'puts path if ext == ".rb"'
311
+ $ rbfind -p 'ext == ".rb"'
312
+ $ rbfind /usr/include -p -D '\.h$' -l '~/EACCES/'
313
+ $ rbfind /usr/include -pD 'pg|pq|postgres' dir
314
+ $ rbfind 'no_svn ; puts path'
315
+ $ rbfind 'prune if name == ".svn" ; puts path'
316
+ $ rbfind -p 'prune if name == ".svn"'
317
+ $ rbfind myproject 'name[/\.rb$/] and lines { |l,i| l=~/require/ and puts l }'
318
+ # rbfind /etc 'lines { |l,| l["192.168."] and (puts path ; break) }'
319
+ $ rbfind /etc 'readable? or raise "Access denied: #{path}" ;
320
+ > lines { |l,| l["192.168."] and (puts path ; break) }'
321
+
322
+ $ rbfind 'col_sep stype+modes, size.w10, path'
323
+ $ rbfind 'tab_sep stype+modes, size.w10, path'
324
+ $ rbfind 'spc_sep stype+modes, size.to_h, user, group, mtime.lsish, path'
325
+ $ rbfind 'p stype+modes, size.to_h, user, group, mtime.lsish, path'
326
+ $ rbfind 'p stype+modes, size.to_h, user, group, mtime!, path'
327
+ $ rbfind 'p stype+modes, size.to_h, user, group, mtime.i, path'
328
+ $ rbfind 'p mtime.u, path'
329
+ $ rbfind 'p modes, user.w8, group.w8, size.w8, cpath + carrow.to_s'
330
+
331
+ $ rbfind 'p digest_md5, size.w8, path'
332
+ $ rbfind 'p digest_sha256, size.w8, path'
333
+
334
+ $ rbfind 'rename name.downcase'
335
+ $ rbfind 'ext == ".tgz" and rename without_ext+".tar.gz"'
336
+
337
+ See the RbFind documentation or the "rbfind.rb" source file for more
338
+ sophisticated examples and for a full list of file examination methods.
339
+
340
+ Valid units are 1.s, 1.m, 1.h, 1.d, 1.w for time values and
341
+ 1.kB == 1000, 1.kiB == 1024, 1.MB, 1.MiB for file sizes.
303
342
  EOT
304
343
  end
305
344
 
@@ -357,7 +396,7 @@ module RbFind
357
396
  def execute
358
397
  error_handle do
359
398
  eval @blkbegin if @blkbegin
360
- b = @block
399
+ b = join_code @block
361
400
  Walk.run *@args, **@params do instance_eval b end
362
401
  eval @blkend if @blkend
363
402
  end
@@ -369,11 +408,10 @@ module RbFind
369
408
  puts "parameters:"
370
409
  @params.each { |k,v| puts_val k, "=", v }.any? or puts_val "(none)"
371
410
  puts "block:"
372
- @block.each_line { |l| puts_val l }
411
+ c = join_code @block, 1
412
+ puts c
373
413
  end
374
414
 
375
- INDENT = " "*2
376
-
377
415
  def puts_val *args
378
416
  l = [ INDENT, *args].join ""
379
417
  puts l
@@ -419,22 +457,22 @@ module RbFind
419
457
  alias method_missing_orig method_missing
420
458
  def method_missing sym, *args, &block
421
459
  case sym.to_s
422
- when /\Adigest_(.*)/, /\A([a-z]+[0-9]+)\z/ then
423
- m = $1
424
- d = begin
425
- Digest.const_get m.upcase
426
- rescue NameError
427
- if m =~ /sha\d\d\d/ then m = "sha2" end
428
- require "digest/#{m}" and retry
429
- raise
430
- end
431
- e = d.new
432
- read 0x1000_0000 do |b| e.update b end
433
- e.hexdigest
434
- when /\A([amc]time)!\z/ then
435
- (send $1).strftime "%Y-%m-%d %H:%M:%S %z"
436
- else
437
- method_missing_orig sym, *args, &block
460
+ when /\Adigest_(.*)/, /\A([a-z]+[0-9]+)\z/ then
461
+ m = $1
462
+ d = begin
463
+ Digest.const_get m.upcase
464
+ rescue NameError
465
+ if m =~ /sha\d\d\d/ then m = "sha2" end
466
+ require "digest/#{m}" and retry
467
+ raise
468
+ end
469
+ e = d.new
470
+ read 0x1000_0000 do |b| e.update b end
471
+ e.hexdigest
472
+ when /\A([amc]time)!\z/ then
473
+ (send $1).strftime "%Y-%m-%d %H:%M:%S %z"
474
+ else
475
+ method_missing_orig sym, *args, &block
438
476
  end
439
477
  end
440
478
 
@@ -447,11 +485,9 @@ class Time
447
485
 
448
486
  # autoload several formating methods
449
487
  def method_missing sym, *args, &block
450
- if require "time" then
451
- send sym, *args, &block
452
- else
453
- super
454
- end
488
+ super
489
+ rescue NoMethodError
490
+ send sym, *args, &block if require "time"
455
491
  end
456
492
 
457
493
  # several common schemes
@@ -466,20 +502,21 @@ end
466
502
  class Integer
467
503
  # convenient formatting, right justification
468
504
  def method_missing sym, *args
469
- case sym.to_s # .to_s for Ruby 1.8
470
- when /\Aw(\d+)/ then "%#{$1}d" % self
471
- when /\Aw_(\d+)/ then to_g.rjust $1.to_i
472
- else super
505
+ case sym
506
+ when /\Aw(\d+)/ then "%#{$1}d" % self
507
+ when /\Aw_(\d+)/ then to_g.rjust $1.to_i
508
+ else super
473
509
  end
474
510
  end
475
511
  end
476
512
 
477
513
  class String
478
- # convenient formatting, left justification
514
+ # convenient formatting, left and right justification
479
515
  def method_missing sym, *args
480
- case sym.to_s # .to_s for Ruby 1.8
481
- when /\Aw_?(\d+)/ then ljust $1.to_i
482
- else super
516
+ case sym
517
+ when /\Aw_?(\d+)/ then ljust $1.to_i
518
+ when /\Ar_?(\d+)/ then rjust $1.to_i
519
+ else super
483
520
  end
484
521
  end
485
522
  # conventient date/time construction
@@ -497,9 +534,9 @@ class NilClass
497
534
  def between? min, max ; false ; end
498
535
 
499
536
  def method_missing sym, *args
500
- case sym.to_s # .to_s for Ruby 1.8
501
- when /\Aw_?(\d+)/ then " "*$1.to_i
502
- else super
537
+ case sym
538
+ when /\A[wr]_?(\d+)/ then " "*$1.to_i
539
+ else super
503
540
  end
504
541
  end
505
542
  end
data/lib/rbfind/core.rb CHANGED
@@ -34,29 +34,29 @@ class File
34
34
 
35
35
  def stype
36
36
  case mode >> 12
37
- when 001 then "p"
38
- when 002 then "c"
39
- when 004 then "d"
40
- when 006 then "b"
41
- when 010 then "-"
42
- when 012 then "l"
43
- when 014 then "s"
44
- when 016 then "w"
45
- else "?"
37
+ when 001 then "p"
38
+ when 002 then "c"
39
+ when 004 then "d"
40
+ when 006 then "b"
41
+ when 010 then "-"
42
+ when 012 then "l"
43
+ when 014 then "s"
44
+ when 016 then "w"
45
+ else "?"
46
46
  end
47
47
  end
48
48
 
49
49
  def suffix
50
50
  case mode >> 12
51
- when 001 then "|"
52
- when 002 then " "
53
- when 004 then "/"
54
- when 006 then " "
55
- when 010 then executable? ? "*" : " "
56
- when 012 then "@"
57
- when 014 then "="
58
- when 016 then "%"
59
- else "?"
51
+ when 001 then "|"
52
+ when 002 then " "
53
+ when 004 then "/"
54
+ when 006 then " "
55
+ when 010 then executable? ? "*" : " "
56
+ when 012 then "@"
57
+ when 014 then "="
58
+ when 016 then "%"
59
+ else "?"
60
60
  end
61
61
  end
62
62
 
@@ -103,19 +103,20 @@ end
103
103
 
104
104
  class Time
105
105
 
106
- TIME_UNITS = [ "seconds", 60, "minutes", 60, "hours", 24, "days", 7, "weeks", ]
106
+ TIME_UNITS = { seconds: 60, minutes: 60, hours: 24, days: 7, weeks: nil }
107
107
  class <<self
108
108
  def to_unit n
109
- u = TIME_UNITS.each_slice 2 do |nam,val|
109
+ u = TIME_UNITS.each_pair do |nam,val|
110
110
  break nam if not val or n < val
111
111
  n /= val
112
112
  end
113
113
  "#{n}#{u[0]}"
114
114
  end
115
115
  def to_sec num, unit
116
- TIME_UNITS.each_slice 2 do |nam,val|
116
+ TIME_UNITS.each_pair do |nam,val|
117
117
  return num if nam.start_with? unit
118
- num *= val
118
+ num *= val.to_i
119
+ num.nonzero? or break
119
120
  end
120
121
  raise "No time unit: #{unit}."
121
122
  end
data/lib/rbfind/table.rb CHANGED
@@ -14,7 +14,7 @@ module RbFind
14
14
  when />\z/ then +1
15
15
  when /\^\z/ then 0
16
16
  when /<?\z/ then -1
17
- end
17
+ end
18
18
  [ $`, a]
19
19
  }
20
20
  @rows = []
@@ -58,9 +58,9 @@ module RbFind
58
58
  j = (w.zip @heads, r).map { |v,(_,a),c|
59
59
  c ||= ""
60
60
  case a
61
- when -1 then c.ljust v
62
- when 0 then c.center v
63
- when +1 then c.rjust v
61
+ when -1 then c.ljust v
62
+ when 0 then c.center v
63
+ when +1 then c.rjust v
64
64
  end
65
65
  }
66
66
  l = j.join " "
@@ -120,9 +120,9 @@ module RbFind
120
120
 
121
121
  def html_align a
122
122
  case a
123
- when -1 then "left"
124
- when 0 then "center"
125
- when +1 then "right"
123
+ when -1 then "left"
124
+ when 0 then "center"
125
+ when +1 then "right"
126
126
  end
127
127
  end
128
128
 
data/lib/rbfind.rb CHANGED
@@ -8,7 +8,7 @@ require "rbfind/csv"
8
8
 
9
9
  module RbFind
10
10
 
11
- VERSION = "2.8.6".freeze
11
+ VERSION = "2.9".freeze
12
12
 
13
13
  =begin rdoc
14
14
 
@@ -284,10 +284,10 @@ Sort without case sensitivity and preceding dot:
284
284
 
285
285
  def sort_parser st
286
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 } }
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 } }
291
291
  end
292
292
  end
293
293
 
@@ -386,7 +386,6 @@ Sort without case sensitivity and preceding dot:
386
386
  def call_block
387
387
  handle_error do
388
388
  begin
389
- $_, $. = @current.name, @count
390
389
  @current.instance_eval &@params.block
391
390
  rescue Done
392
391
  end
@@ -397,9 +396,9 @@ Sort without case sensitivity and preceding dot:
397
396
  yield
398
397
  rescue
399
398
  case @params.error
400
- when Proc then @params.error.call
401
- when String then instance_eval @params.error
402
- else raise
399
+ when Proc then @params.error.call
400
+ when String then instance_eval @params.error
401
+ else raise
403
402
  end
404
403
  nil
405
404
  end
@@ -651,7 +650,6 @@ Sort without case sensitivity and preceding dot:
651
650
  file.each_line { |l|
652
651
  l.chomp!
653
652
  n += 1
654
- $_, $. = l, n
655
653
  r ||= true if yield l, n
656
654
  }
657
655
  r
@@ -660,9 +658,9 @@ Sort without case sensitivity and preceding dot:
660
658
 
661
659
  def grep re, color = nil
662
660
  case color
663
- when /\A\d+(?:;\d+)*\z/, nil, false then
664
- when true then color = "31;1" # red
665
- else raise "Illegal color spec: #{color}"
661
+ when /\A\d+(?:;\d+)*\z/, nil, false then
662
+ when true then color = "31;1" # red
663
+ else raise "Illegal color spec: #{color}"
666
664
  end
667
665
  lines { |l,i|
668
666
  l.scrub!
@@ -795,7 +793,7 @@ Sort without case sensitivity and preceding dot:
795
793
  when 016 then 13
796
794
  when nil then 1
797
795
  else 14
798
- end
796
+ end
799
797
  self.class.colored arg, code
800
798
  end
801
799
 
@@ -803,8 +801,8 @@ Sort without case sensitivity and preceding dot:
803
801
  # Overwrite this to define custom colors
804
802
  # Example:
805
803
  # case ext
806
- # when ".png", /\.jpe?g$/, /\.tiff?$/ then 15
807
- # when /\.tar\.(gz|bz2)$/ then 16
804
+ # when ".png", /\.jpe?g$/, /\.tiff?$/ then 15
805
+ # when /\.tar\.(gz|bz2)$/ then 16
808
806
  # end
809
807
  end
810
808
 
@@ -832,11 +830,11 @@ Sort without case sensitivity and preceding dot:
832
830
  fg, bg = $~.captures.map { |x| x.downcase.ord - ?a.ord }
833
831
  a = []
834
832
  case fg
835
- when 0..7 then a.push 30 + fg
833
+ when 0..7 then a.push 30 + fg
836
834
  end
837
835
  a.push 1 if $1 == $1.upcase
838
836
  case bg
839
- when 0..7 then a.push 40 + bg
837
+ when 0..7 then a.push 40 + bg
840
838
  end
841
839
  e = a.join ";"
842
840
  cols.push e
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.8.6
4
+ version: '2.9'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bertram Scharpf
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-25 00:00:00.000000000 Z
11
+ date: 2023-10-04 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |
14
14
  A replacement for the standard UNIX command find.
@@ -54,7 +54,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
54
54
  version: '0'
55
55
  requirements:
56
56
  - just Ruby
57
- rubygems_version: 3.0.8
57
+ rubygems_version: 3.4.20
58
58
  signing_key:
59
59
  specification_version: 4
60
60
  summary: Ruby replacement for the standard Unix find tool