which_works 0.2.0 → 1.0.0

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/README.md CHANGED
@@ -15,8 +15,8 @@ Which.which('unknown') #=> nil
15
15
  Which.which('/usr/bin/svn') #=> "/usr/bin/svn"
16
16
  Which.which('/usr/bin/foo') #=> nil
17
17
 
18
- # the :all option finds all executable files,
19
- # not just the first one found
18
+ # the :all option returns all executable files,
19
+ # not just the first one found in the path
20
20
  Which.which('svn', :all => true) #=> [ "/opt/local/bin/svn", "/usr/bin/svn" ]
21
21
 
22
22
  # the :array option always returns an array
@@ -27,6 +27,18 @@ Which.which('ls', 'screen', :array => true) #=> [ "/bin/ls", "/usr/bin/screen"
27
27
  # combined options
28
28
  Which.which('ls', 'svn', :all => true, :array => true)
29
29
  #=> [ "/bin/ls", "/opt/local/bin/svn", "/usr/bin/svn" ]
30
+
31
+ # you can change the default options
32
+ Which.options = { :all => true }
33
+ Which.options[:array] = true
34
+ Which.which('ls') #=> [ "/bin/ls" ]
35
+ Which.which('svn') #=> [ "/opt/local/bin/svn", "/usr/bin/svn" ]
36
+
37
+ # default options can be overridden as usual
38
+ Which.which('ls', :array => false) #=> "/bin/ls"
39
+
40
+ # see the current default options
41
+ Which.options #=> { :all => true, :array => true }
30
42
  ```
31
43
 
32
44
  Tested with <a href="https://www.relishapp.com/rspec">RSpec</a>, <a href="https://github.com/thoughtbot/shoulda">shoulda</a> and <a href="http://travis-ci.org/#!/AlphaHydrae/which_works">Travis CI</a>.
data/Rakefile CHANGED
@@ -18,7 +18,7 @@ Jeweler::Tasks.new do |gem|
18
18
  gem.homepage = "http://github.com/AlphaHydrae/which_works"
19
19
  gem.license = "MIT"
20
20
  gem.summary = %Q{Ruby UNIX-like which.}
21
- gem.description = %Q{Ruby UNIX-like which.}
21
+ gem.description = %Q{Locates a program file in the user's path. The which method takes a list of command names and searches the path for each executable file that would be run had these commands actually been invoked.}
22
22
  gem.email = "hydrae.alpha@gmail.com"
23
23
  gem.authors = ["AlphaHydrae"]
24
24
  # dependencies defined in Gemfile
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 1.0.0
data/lib/which_works.rb CHANGED
@@ -30,6 +30,7 @@ module Which
30
30
 
31
31
  found = []
32
32
  options = programs.last.kind_of?(Hash) ? programs.pop : {}
33
+ options = @@options.merge options
33
34
 
34
35
  programs.each do |program|
35
36
 
@@ -44,6 +45,7 @@ module Which
44
45
 
45
46
  # using expand_path makes it work with absolute program paths
46
47
  absolute_path = File.expand_path "#{program}#{ext}", path
48
+ next if found.include? absolute_path
47
49
 
48
50
  if File.executable? absolute_path
49
51
  program_found = true
@@ -62,4 +64,32 @@ module Which
62
64
  found
63
65
  end
64
66
  end
67
+
68
+ # Returns the default options for {#which}. The returned
69
+ # hash can be modified directly.
70
+ #
71
+ # == Examples
72
+ # Which.options #=> {}
73
+ # Which.options = { :all => true }
74
+ # Which.options #=> { :all => true }
75
+ # Which.options[:array] = true #=> { :all => true, :array => true }
76
+ def self.options
77
+ @@options
78
+ end
79
+
80
+ # Sets the default options for {#which}.
81
+ #
82
+ # == Examples
83
+ # Which.options = { :all => true, :array => true }
84
+ # Which.which('ls') #=> [ "/bin/ls" ]
85
+ # Which.which('svn') #=> [ "/opt/local/bin/svn", "/usr/bin/svn" ]
86
+ def self.options= options
87
+ raise ArgumentError, "Default options must be a hash, #{options.class.name} given." unless options.kind_of?(Hash)
88
+ @@options = options.dup
89
+ end
90
+
91
+ private
92
+
93
+ # Default options for {#which}.
94
+ @@options = Hash.new
65
95
  end
data/spec/all_spec.rb CHANGED
@@ -17,4 +17,8 @@ describe ':all option' do
17
17
  it "should not find anything when given no command to find" do
18
18
  Which.which({ :all => true }).should be_nil
19
19
  end
20
+
21
+ it "should only find one executable file when given an absolute path" do
22
+ Which.which('/opt/local/bin/svn', :all => true).should == '/opt/local/bin/svn'
23
+ end
20
24
  end
@@ -0,0 +1,77 @@
1
+ require 'helper'
2
+
3
+ describe 'Default Options' do
4
+
5
+ before :each do
6
+ WhichSpecHelper.stub_unix!
7
+ Which.options.clear
8
+ end
9
+
10
+ it "should have no options by default" do
11
+ Which.options.should == {}
12
+ end
13
+
14
+ it "should allow to set the :all option to true by default" do
15
+ Which.options = { :all => true }
16
+ Which.which('svn').should == [ '/opt/local/bin/svn', '/usr/bin/svn' ]
17
+ end
18
+
19
+ it "should allow to set the :array option to true by default" do
20
+ Which.options = { :array => true }
21
+ Which.which('ls').should == [ '/bin/ls' ]
22
+ end
23
+
24
+ it "should allow to set all options to true by default" do
25
+ Which.options = { :all => true, :array => true }
26
+ Which.which('ls').should == [ '/bin/ls' ]
27
+ Which.which('svn').should == [ '/opt/local/bin/svn', '/usr/bin/svn' ]
28
+ end
29
+
30
+ it "should allow to clear default options" do
31
+ Which.options = { :all => true, :array => true }
32
+ Which.options = {}
33
+ Which.options.should == {}
34
+ Which.which('ls').should == '/bin/ls'
35
+ end
36
+
37
+ it "should return the default options" do
38
+ Which.options = { :all => true, :array => false }
39
+ Which.options.should == { :all => true, :array => false }
40
+ end
41
+
42
+ it "should copy the given options" do
43
+ options = { :all => true, :array => true }
44
+ Which.options = options
45
+ Which.options.should == options
46
+ Which.options.should_not equal(options)
47
+ end
48
+
49
+ it "should return its internal default options hash" do
50
+ Which.options[:array] = true
51
+ Which.options[:all] = 42
52
+ Which.options[:array].should be_true
53
+ Which.options[:all].should == 42
54
+ end
55
+
56
+ it "should allow to override the :all option" do
57
+ Which.options = { :all => true, :array => true }
58
+ Which.which('svn', :all => false).should == [ '/opt/local/bin/svn' ]
59
+ end
60
+
61
+ it "should allow to override the :array option" do
62
+ Which.options = { :all => true, :array => true }
63
+ Which.which('ls', :array => false).should == '/bin/ls'
64
+ end
65
+
66
+ it "should allow to override all options" do
67
+ Which.options = { :all => true, :array => true }
68
+ Which.which('ls', :all => false, :array => false).should == '/bin/ls'
69
+ Which.which('svn', :all => false, :array => false).should == '/opt/local/bin/svn'
70
+ end
71
+
72
+ it "should only accept a hash as default options" do
73
+ [ nil, false, true, String.new, Array.new, 2, 4.5 ].each do |invalid|
74
+ lambda{ Which.options = invalid }.should raise_error(ArgumentError)
75
+ end
76
+ end
77
+ end
data/which_works.gemspec CHANGED
@@ -5,12 +5,12 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "which_works"
8
- s.version = "0.2.0"
8
+ s.version = "1.0.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["AlphaHydrae"]
12
- s.date = "2012-03-10"
13
- s.description = "Ruby UNIX-like which."
12
+ s.date = "2012-03-11"
13
+ s.description = "Locates a program file in the user's path. The which method takes a list of command names and searches the path for each executable file that would be run had these commands actually been invoked."
14
14
  s.email = "hydrae.alpha@gmail.com"
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE.txt",
@@ -32,6 +32,7 @@ Gem::Specification.new do |s|
32
32
  "spec/array_spec.rb",
33
33
  "spec/basic_spec.rb",
34
34
  "spec/helper.rb",
35
+ "spec/options_spec.rb",
35
36
  "which_works.gemspec"
36
37
  ]
37
38
  s.homepage = "http://github.com/AlphaHydrae/which_works"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: which_works
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 1.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-10 00:00:00.000000000Z
12
+ date: 2012-03-11 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &70349900379000 !ruby/object:Gem::Requirement
16
+ requirement: &70324806494120 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 0.9.2
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70349900379000
24
+ version_requirements: *70324806494120
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &70349900378040 !ruby/object:Gem::Requirement
27
+ requirement: &70324806493580 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 2.8.0
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70349900378040
35
+ version_requirements: *70324806493580
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: shoulda
38
- requirement: &70349900375720 !ruby/object:Gem::Requirement
38
+ requirement: &70324806493040 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 2.11.3
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70349900375720
46
+ version_requirements: *70324806493040
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: bundler
49
- requirement: &70349900374340 !ruby/object:Gem::Requirement
49
+ requirement: &70324806492460 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70349900374340
57
+ version_requirements: *70324806492460
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: jeweler
60
- requirement: &70349900372640 !ruby/object:Gem::Requirement
60
+ requirement: &70324806491920 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 1.8.3
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70349900372640
68
+ version_requirements: *70324806491920
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: simplecov
71
- requirement: &70349900370600 !ruby/object:Gem::Requirement
71
+ requirement: &70324806491400 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 0.5.4
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70349900370600
79
+ version_requirements: *70324806491400
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: yard
82
- requirement: &70349900367500 !ruby/object:Gem::Requirement
82
+ requirement: &70324806490800 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ~>
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: 0.7.5
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70349900367500
90
+ version_requirements: *70324806490800
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: rdiscount
93
- requirement: &70349900364380 !ruby/object:Gem::Requirement
93
+ requirement: &70324806490220 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ~>
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: 1.6.8
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *70349900364380
101
+ version_requirements: *70324806490220
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: travis-lint
104
- requirement: &70349900362880 !ruby/object:Gem::Requirement
104
+ requirement: &70324806489620 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ~>
@@ -109,8 +109,10 @@ dependencies:
109
109
  version: 1.3.0
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *70349900362880
113
- description: Ruby UNIX-like which.
112
+ version_requirements: *70324806489620
113
+ description: Locates a program file in the user's path. The which method takes a list
114
+ of command names and searches the path for each executable file that would be run
115
+ had these commands actually been invoked.
114
116
  email: hydrae.alpha@gmail.com
115
117
  executables: []
116
118
  extensions: []
@@ -133,6 +135,7 @@ files:
133
135
  - spec/array_spec.rb
134
136
  - spec/basic_spec.rb
135
137
  - spec/helper.rb
138
+ - spec/options_spec.rb
136
139
  - which_works.gemspec
137
140
  homepage: http://github.com/AlphaHydrae/which_works
138
141
  licenses:
@@ -149,7 +152,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
149
152
  version: '0'
150
153
  segments:
151
154
  - 0
152
- hash: 4071309635441737713
155
+ hash: 1669874747922136134
153
156
  required_rubygems_version: !ruby/object:Gem::Requirement
154
157
  none: false
155
158
  requirements: