getversion 0.0.2 → 0.0.3

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/bin/getversion.rb CHANGED
@@ -1,2 +1,7 @@
1
1
  require_relative '../lib/getversion'
2
- puts GetVersion[ARGV[0]]
2
+
3
+ name = ARGV[0]
4
+ should_guess = ARGV[1] && ARGV[1] == '--guess'
5
+
6
+ version = should_guess ? GetVersion.guess(name) : GetVersion[name]
7
+ puts version
@@ -7,7 +7,7 @@ module GetVersion
7
7
  end
8
8
 
9
9
  executable 'xcodebuild' do
10
- find_version_in_output path, '-version'
10
+ find_version_in_output '-version'
11
11
  end
12
12
 
13
13
  end
@@ -15,15 +15,18 @@ module GetVersion
15
15
 
16
16
  def version
17
17
  c = ExecutionContext.new path
18
- c.execute &@block
18
+ c.execute &@block if @block
19
19
  end
20
20
 
21
21
  def path
22
22
  dir = PathFinder.find_path @name
23
- exclusions = %w(.)
24
- exclusions.include?(dir) ? nil : dir
23
+ dir = nil if dir == '.'
25
24
  dir ? Path.new(dir, name).evaluated_path : @name
26
25
  end
27
26
 
27
+ def self.version(name, &block)
28
+ Executable.new(name, nil, &block).version
29
+ end
30
+
28
31
  end
29
32
  end
@@ -0,0 +1,43 @@
1
+ require_relative 'executable'
2
+
3
+ module GetVersion
4
+ class ExecutableStore
5
+
6
+ def initialize
7
+ @executables = []
8
+ end
9
+
10
+ def get_version(name)
11
+ executable = find_executable(name) || null_executable(name)
12
+ executable.version
13
+ end
14
+
15
+ def guess_version(name)
16
+ executable = find_executable(name) || executable_for_guessing(name)
17
+ executable.version
18
+ end
19
+
20
+ def add_executable(name, namespace, &block)
21
+ @executables << Executable.new(name, namespace, &block)
22
+ end
23
+
24
+ private
25
+
26
+ def find_executable(name)
27
+ @executables.find { |e| e.name == name }
28
+ end
29
+
30
+ def null_executable(name)
31
+ Executable.new name, nil
32
+ end
33
+
34
+ def executable_for_guessing(name)
35
+ Executable.new name, nil do
36
+ args = %w(--version -version /version version --help -help /help help) << nil
37
+ versions = args.map { |arg| find_version_in_output arg }.compact.uniq
38
+ versions[0] if versions.length == 1
39
+ end
40
+ end
41
+
42
+ end
43
+ end
@@ -1,3 +1,5 @@
1
+ require 'yaml'
2
+ require_relative 'executable'
1
3
  require_relative 'version'
2
4
 
3
5
  module GetVersion
@@ -11,32 +13,24 @@ module GetVersion
11
13
  instance_eval &block
12
14
  end
13
15
 
14
- def path
15
- @path
16
- end
17
-
18
16
  def find_version_in_output(arg=nil)
19
- ExecutionContext.find_version_in_output @path, arg
20
- end
21
-
22
- def self.find_version_in_output(path, arg=nil)
23
- output = `"#{path}" #{arg} 2>&1`
17
+ output = `"#{@path}" #{arg} 2>&1`
24
18
  v = Version.match output
25
19
  v ? v.version : nil
26
20
  end
27
21
 
28
- def google_appengine_version(path=@path)
29
- path = File.dirname path
22
+ def google_appengine_version
23
+ path = File.dirname @path
30
24
  version_file = File.join path, 'VERSION'
31
25
  YAML::load_file(version_file)['release']
32
26
  end
33
27
 
34
28
  def osx_version
35
- ExecutionContext.find_version_in_output 'sw_vers', '-productVersion'
29
+ Executable.version('sw_vers') { find_version_in_output '-productVersion' }
36
30
  end
37
31
 
38
32
  def windows_version
39
- find_version_in_output 'ver'
33
+ Executable.version('ver') { find_version_in_output }
40
34
  end
41
35
 
42
36
  end
@@ -1,11 +1,10 @@
1
1
  class UnixPathFinder
2
2
 
3
3
  def find_path(executable_name)
4
- executable = `which #{executable_name}`
5
- real_executable = `readlink #{executable}`.strip
6
- result = real_executable == '' ? executable : real_executable
7
- return if result.to_s == ''
8
- File.dirname result
4
+ path = `which #{executable_name}`
5
+ real_path = `readlink #{path}`.strip
6
+ result = real_path.empty? ? path : real_path
7
+ result.empty? ? nil : File.dirname(result)
9
8
  end
10
9
 
11
10
  end
@@ -5,8 +5,7 @@ class WindowsPathFinder
5
5
  extensions = ENV['PATHEXT'].split ';'
6
6
  possibilities = paths.map { |path| extensions.map { |ext| File.join(path, executable_name + ext.downcase).gsub('/', '\\') } }.flatten
7
7
  executable = possibilities.select { |exe| File.exist? exe }.first
8
- return unless executable
9
- File.dirname executable
8
+ executable ? File.dirname(executable) : nil
10
9
  end
11
10
 
12
11
  end
data/lib/getversion.rb CHANGED
@@ -1,38 +1,26 @@
1
- require_relative 'getversion/executable'
1
+ require_relative 'getversion/executable_store'
2
2
 
3
3
  module GetVersion
4
4
 
5
- @executables = []
5
+ @executable_store = ExecutableStore.new
6
6
 
7
7
  def self.[](name)
8
- executable = find_executable(name) || executable_for_guessing(name)
9
- executable.version
8
+ @executable_store.get_version name
10
9
  end
11
10
 
12
- private
13
-
14
- def self.executable_for_guessing(name)
15
- Executable.new name, nil do
16
- args = %w(--version -version /version version --help -help /help help) << nil
17
- versions = args.map { |arg| find_version_in_output arg }.compact.uniq
18
- versions[0] if versions.length == 1
19
- end
11
+ def self.guess(name)
12
+ @executable_store.guess_version name
20
13
  end
21
14
 
22
- def self.find_executable(name)
23
- @executables.find { |e| e.name == name }
24
- end
15
+ private
25
16
 
26
17
  def self.namespace(namespace)
27
18
  @namespace = namespace
28
- yield if block_given?
29
19
  end
30
20
 
31
21
  def self.executable(name, &block)
32
- executable = Executable.new name, @namespace, &block
33
- @executables << executable
22
+ @executable_store.add_executable name, @namespace, &block
34
23
  end
35
24
 
36
- end
37
-
38
- require_relative 'getversion/detectors'
25
+ require_relative 'getversion/detectors'
26
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: getversion
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
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-07-20 00:00:00.000000000 Z
12
+ date: 2013-07-21 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Provides a standard interface for obtaining CLI application version numbers.
15
15
  email: matthew@matthewriley.name
@@ -26,6 +26,7 @@ files:
26
26
  - lib/getversion/detectors/uncategorised.rb
27
27
  - lib/getversion/detectors.rb
28
28
  - lib/getversion/executable.rb
29
+ - lib/getversion/executable_store.rb
29
30
  - lib/getversion/execution_context.rb
30
31
  - lib/getversion/path.rb
31
32
  - lib/getversion/path_finder.rb