whichr 0.2.0 → 0.3.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.
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