cliver 0.1.0 → 0.1.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.
data/README.md CHANGED
@@ -56,8 +56,10 @@ the same rules including pre-release semantics.
56
56
 
57
57
  ## See Also:
58
58
 
59
+ - [YARD Documentation][yard-docs]
59
60
  - [Contributing](CONTRIBUTING.md)
60
61
  - [License](LICENSE.txt)
61
62
 
62
63
 
63
64
  [rubygems/requirements]: https://github.com/rubygems/rubygems/blob/master/lib/rubygems/requirement.rb
65
+ [yard-docs]: http://yaauie.github.io/cliver/
@@ -23,4 +23,5 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency 'rspec'
24
24
  spec.add_development_dependency 'ruby-appraiser-reek'
25
25
  spec.add_development_dependency 'ruby-appraiser-rubocop'
26
+ spec.add_development_dependency 'yard'
26
27
  end
@@ -1,5 +1,6 @@
1
1
  # encoding: utf-8
2
2
  require 'cliver/version'
3
+ require 'cliver/which'
3
4
  require 'cliver/assertion'
4
5
  require 'cliver/detector'
5
6
  require 'cliver/detector/default'
@@ -6,6 +6,9 @@ module Cliver
6
6
  # The core of Cliver, Assertion is responsible for detecting the
7
7
  # installed version of a binary and determining if it meets the requirements
8
8
  class Assertion
9
+
10
+ include Which # platform-specific implementation of `which`
11
+
9
12
  DependencyNotMet = Class.new(ArgumentError)
10
13
  DependencyVersionMismatch = Class.new(DependencyNotMet)
11
14
  DependencyNotFound = Class.new(DependencyNotMet)
@@ -59,9 +62,8 @@ module Cliver
59
62
  # @return [String] Gem::Version-parsable string version
60
63
  # @return [true] if present and no requirements (optimization)
61
64
  def installed_version
62
- which, _ = Open3.capture2e("which #{@executable}")
63
- executable_path = which.chomp
64
- return nil if executable_path.empty?
65
+ executable_path = which(@executable)
66
+ return nil unless executable_path
65
67
  return true unless @requirement
66
68
 
67
69
  @detector.to_proc.call(executable_path).tap do |version|
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module Cliver
4
- VERSION = '0.1.0'
4
+ VERSION = '0.1.1'
5
5
  end
@@ -0,0 +1,17 @@
1
+ # encoding: utf-8
2
+
3
+ module Cliver
4
+ # The `which` command we love on many posix-systems needs analogues on other
5
+ # systems. The Which module congitionally includes the correct implementation
6
+ # into itself, so you can include it into something else.
7
+ module Which
8
+ case RbConfig::CONFIG['host_os']
9
+ when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
10
+ require_relative 'which/windows'
11
+ include Cliver::Which::Windows
12
+ else
13
+ require_relative 'which/posix'
14
+ include Cliver::Which::Posix
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+
3
+ require 'open3'
4
+
5
+ module Cliver
6
+ module Which
7
+ # Posix implementation of Which
8
+ # Required and mixed into Cliver::Which in posix environments
9
+ module Posix
10
+ # @param executable [String]
11
+ # @return [nil,String] - path to found executable
12
+ def which(executable)
13
+ # command -v is the POSIX-specified implementation behind which.
14
+ # http://pubs.opengroup.org/onlinepubs/009695299/utilities/command.html
15
+ which, status = Open3.capture2e('command', '-v', executable)
16
+ return nil unless status.success?
17
+ which.chomp
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,23 @@
1
+ # encoding: utf-8
2
+
3
+ require 'open3'
4
+
5
+ module Cliver
6
+ module Which
7
+ # Windows-specific implementation of Which
8
+ # Required and mixed into Cliver::Which in windows environments
9
+ module Windows
10
+ # @param executable [String]
11
+ # @return [nil,String] - path to found executable
12
+ def which(executable)
13
+ # `where` returns newline-separated files found on path, but doesn't
14
+ # ensure that they are executable as commands.
15
+ where, _ = Open3.capture2e('where', executable)
16
+ where.split("\n").find do |found|
17
+ next if found.empty?
18
+ File.executable?(found)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
- require 'cliver/assertion'
2
+ require 'cliver'
3
3
 
4
4
  describe Cliver::Assertion do
5
5
  let(:mismatch_exception) { Cliver::Assertion::DependencyVersionMismatch }
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
- require 'cliver/detector'
2
+ require 'cliver'
3
3
 
4
4
  describe Cliver::Detector do
5
5
  let(:detector) { Cliver::Detector::Default.new(*args) }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cliver
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-06-18 00:00:00.000000000 Z
12
+ date: 2013-06-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -91,6 +91,22 @@ dependencies:
91
91
  - - ! '>='
92
92
  - !ruby/object:Gem::Version
93
93
  version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: yard
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
94
110
  description: Assertions for command-line dependencies
95
111
  email:
96
112
  - ryan@yaauie.com
@@ -111,6 +127,9 @@ files:
111
127
  - lib/cliver/detector.rb
112
128
  - lib/cliver/detector/default.rb
113
129
  - lib/cliver/version.rb
130
+ - lib/cliver/which.rb
131
+ - lib/cliver/which/posix.rb
132
+ - lib/cliver/which/windows.rb
114
133
  - spec/cliver/assertion_spec.rb
115
134
  - spec/cliver/detector_spec.rb
116
135
  - spec/cliver_spec.rb