whichr 0.2.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/bin/whichr +2 -2
  2. data/lib/whichr.rb +55 -55
  3. metadata +2 -2
data/bin/whichr CHANGED
@@ -20,7 +20,7 @@ if ARGV[0].in? ['--help', '-h']
20
20
  end
21
21
 
22
22
  if ARGV.include? '-a'
23
- RubyWhich.new.process(ARGV[0..-2], true)
23
+ RubyWhich.new.which(ARGV[0..-2], true, true)
24
24
  else
25
- RubyWhich.new.process(ARGV, false)
25
+ RubyWhich.new.which(ARGV, false, true)
26
26
  end
data/lib/whichr.rb CHANGED
@@ -1,5 +1,3 @@
1
- # stolen from the gnuplot gem
2
- # and then modified
3
1
  require 'rubygems'
4
2
  require 'sane'
5
3
 
@@ -7,12 +5,16 @@ class RubyWhich
7
5
  # search the path for the given names
8
6
  # like ['abc'] (in windows, also searches for abc.bat)
9
7
  # or ['ab*'] (a glob, in windows, also reveals ab*.bat)
10
- def which( names, return_non_executables_too = false )
11
- names = [names] unless names.is_a? Array
8
+ def which( names, return_non_executables_too = false, realtime_output = false )
9
+
10
+ puts "higher in the list is executed first" if realtime_output
11
+
12
+ names = Array(names)
12
13
 
13
14
  if OS.windows?
14
15
  for name in names.dup # avoid recursion
15
16
  # windows compat.
17
+ # add .bat, .exe, etc.
16
18
  for extension in ENV['PATHEXT'].split(';') do
17
19
  names << name + extension
18
20
  end
@@ -21,68 +23,66 @@ class RubyWhich
21
23
 
22
24
  all_found = []
23
25
  path = ENV['PATH']
24
- # on windows add . [the cwd]
26
+ # on windows add cwd
25
27
  path += (File::PATH_SEPARATOR + '.') if OS.windows?
28
+
26
29
  path.split(File::PATH_SEPARATOR).each do |dir|
30
+
27
31
  for name in names
28
32
  if OS.windows?
29
- names2 = Dir.glob(dir.gsub("\\", "/") + '/' + name.strip)
30
- unless return_non_executables_too
31
- names2 = names2.select{|name| File.executable?(name)} # only real execs
32
- end
33
- names2.collect!{|name| File.expand_path(name)} # get the right capitalization
33
+ names2 = Dir.glob(dir.gsub("\\", "/") + '/' + name.strip)
34
+ unless return_non_executables_too
35
+ names2 = names2.select{|name| File.executable?(name)} # only real execs
36
+ end
37
+ names2.collect!{|name| File.expand_path(name)} # get the right capitalization
34
38
  else
35
- names2 = Dir.glob(dir + '/' + name.strip)
39
+ names2 = Dir.glob(dir + '/' + name.strip)
36
40
  end
41
+
42
+ # expand paths
43
+ names2.collect!{|name| File.expand_path(name).gsub(File::SEPARATOR, File::ALT_SEPARATOR || File::SEPARATOR)}
44
+
45
+ # make sure we aren't repeating a previous
46
+ uniques = names2.select{|new|
47
+ new = new.downcase if OS.windows?
48
+ am_unique = true
49
+ all_found.each{|old|
50
+ old = old.downcase if OS.windows?
51
+ if old == new
52
+ am_unique = false
53
+ break
54
+ end
55
+ }
56
+ am_unique
57
+ }
58
+
59
+ if realtime_output
60
+ uniques.each{ |file|
61
+ print file
62
+
63
+ if !File.executable? file
64
+ print += ' (is not executable)'
65
+ end
66
+
67
+ if File.directory?(file)
68
+ print ' (is a directory)'
69
+ end
70
+ puts
71
+ }
72
+ end
73
+
74
+ all_found += uniques
37
75
 
38
- all_found += names2.collect{|name| File.expand_path(name)}
39
76
  end
40
77
  end
41
-
42
- # parse out same spelled fellas in doze
43
- if OS.windows?
44
- unique = []
45
- previous = {}
46
- all_found.each {|entry|
47
- if previous[entry.downcase]
48
- # do nothing
49
- else
50
- previous[entry.downcase] = 'ja'
51
- unique << entry
52
- end
53
- }
54
- all_found = unique
55
- else
56
- all_found.uniq!
57
- end
58
- all_found
59
- end
60
-
61
- def process(names, all = false)
62
- candidates = which(names, all)
63
- if candidates == []
64
- puts 'none found (' + names.inspect + ')'
65
- else
66
- print output(candidates)
67
- end
68
- end
69
-
70
- def output all
71
- output = "higher in the list is executed first\n"
72
- for candidate in all
73
- # might just match the name and not be executable
74
- candidate = Dir.glob(candidate + '*')[0] if OS.windows?
75
- output << candidate
76
- if !File.executable? candidate
77
- output += ' (is not executable)'
78
- if(File.directory?(candidate))
79
- output << ' (is a directory)'
80
- end
78
+
79
+ if realtime_output
80
+ if all_found == []
81
+ puts 'none found (' + names.inspect + ')'
81
82
  end
82
- output << "\n"
83
83
  end
84
- output
85
- end
86
84
 
85
+ all_found
86
+ end
87
87
 
88
88
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: whichr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roger Pack
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-11-03 00:00:00 -07:00
12
+ date: 2009-12-18 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency