getversion 0.0.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/bin/getversion.rb +2 -0
- data/lib/getversion/detectors/apple.rb +13 -0
- data/lib/getversion/detectors/google.rb +15 -0
- data/lib/getversion/detectors/jetbrains.rb +9 -0
- data/lib/getversion/detectors/microsoft.rb +37 -0
- data/lib/getversion/detectors/rubygems.rb +17 -0
- data/lib/getversion/detectors/uncategorised.rb +19 -0
- data/lib/getversion/detectors.rb +1 -0
- data/lib/getversion/helpers.rb +25 -0
- data/lib/getversion/path.rb +25 -0
- data/lib/getversion/path_finder.rb +17 -0
- data/lib/getversion/path_finders/unix_path_finder.rb +11 -0
- data/lib/getversion/path_finders/windows_path_finder.rb +12 -0
- data/lib/getversion/version.rb +43 -0
- data/lib/getversion.rb +30 -0
- metadata +61 -0
data/bin/getversion.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
module GetVersion
|
2
|
+
|
3
|
+
namespace :microsoft
|
4
|
+
|
5
|
+
executable 'aspnet_compiler' do
|
6
|
+
GetVersion['msbuild']
|
7
|
+
end
|
8
|
+
|
9
|
+
executable 'installutil' do
|
10
|
+
find_version_in_output @exe
|
11
|
+
end
|
12
|
+
|
13
|
+
executable 'msbuild' do
|
14
|
+
find_version_in_output @exe, '/version'
|
15
|
+
end
|
16
|
+
|
17
|
+
executable 'msdeploy' do
|
18
|
+
find_version_in_output @exe
|
19
|
+
end
|
20
|
+
|
21
|
+
executable 'mstest' do
|
22
|
+
find_version_in_output @exe, '/help'
|
23
|
+
end
|
24
|
+
|
25
|
+
executable 'netsh' do
|
26
|
+
windows_version
|
27
|
+
end
|
28
|
+
|
29
|
+
executable 'nuget' do
|
30
|
+
find_version_in_output @exe
|
31
|
+
end
|
32
|
+
|
33
|
+
executable 'tf' do
|
34
|
+
find_version_in_output @exe
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module GetVersion
|
2
|
+
|
3
|
+
namespace :rubygems
|
4
|
+
|
5
|
+
executable 'bundle' do
|
6
|
+
find_version_in_output @exe, '--version'
|
7
|
+
end
|
8
|
+
|
9
|
+
executable 'cucumber' do
|
10
|
+
find_version_in_output @exe, '--version'
|
11
|
+
end
|
12
|
+
|
13
|
+
executable 'rake' do
|
14
|
+
find_version_in_output @exe, '--version'
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module GetVersion
|
2
|
+
|
3
|
+
executable 'conlinkchecker' do
|
4
|
+
find_version_in_output @exe
|
5
|
+
end
|
6
|
+
|
7
|
+
executable 'nunit' do
|
8
|
+
find_version_in_output @exe, '/help'
|
9
|
+
end
|
10
|
+
|
11
|
+
executable '7z' do
|
12
|
+
find_version_in_output @exe
|
13
|
+
end
|
14
|
+
|
15
|
+
executable '7za' do
|
16
|
+
find_version_in_output @exe
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
Dir[File.dirname(__FILE__) + '/detectors/*.rb'].each { |f| require f }
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require_relative 'version'
|
2
|
+
|
3
|
+
module GetVersion
|
4
|
+
|
5
|
+
def self.find_version_in_output(executable, args=nil)
|
6
|
+
output = `"#{executable}" #{args} 2>&1`
|
7
|
+
v = Version.match output
|
8
|
+
v ? v.version : nil
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.google_appengine_version(executable)
|
12
|
+
path = File.dirname executable
|
13
|
+
version_file = File.join path, 'VERSION'
|
14
|
+
YAML::load_file(version_file)['release']
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.osx_version
|
18
|
+
find_version_in_output 'sw_vers', '-productVersion'
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.windows_version
|
22
|
+
find_version_in_output 'ver'
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class Path
|
2
|
+
|
3
|
+
attr_accessor :path, :is_windows
|
4
|
+
|
5
|
+
def initialize(*path)
|
6
|
+
path.select! { |p| p unless p == '' }
|
7
|
+
@path = File.join path
|
8
|
+
@is_windows = !ENV['WINDIR'].nil?
|
9
|
+
end
|
10
|
+
|
11
|
+
def evaluated_path
|
12
|
+
return unless @path
|
13
|
+
`echo #{normalised_path}`.strip
|
14
|
+
end
|
15
|
+
|
16
|
+
def normalised_path
|
17
|
+
return unless @path
|
18
|
+
@is_windows ? @path.gsub('/', '\\') : @path.gsub('\\', '/')
|
19
|
+
end
|
20
|
+
|
21
|
+
def to_s
|
22
|
+
evaluated_path
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require_relative 'path_finders/unix_path_finder'
|
2
|
+
require_relative 'path_finders/windows_path_finder'
|
3
|
+
|
4
|
+
class PathFinder
|
5
|
+
|
6
|
+
def self.find_path(executable_name)
|
7
|
+
path_finder = is_windows? ? WindowsPathFinder.new : UnixPathFinder.new
|
8
|
+
path_finder.find_path executable_name
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def self.is_windows?
|
14
|
+
!ENV['WINDIR'].nil?
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class UnixPathFinder
|
2
|
+
|
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
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class WindowsPathFinder
|
2
|
+
|
3
|
+
def find_path(executable_name)
|
4
|
+
paths = ENV['PATH'].split ';'
|
5
|
+
extensions = ENV['PATHEXT'].split ';'
|
6
|
+
possibilities = paths.map { |path| extensions.map { |ext| File.join(path, executable_name + ext.downcase).gsub('/', '\\') } }.flatten
|
7
|
+
executable = possibilities.select { |exe| File.exist? exe }.first
|
8
|
+
return unless executable
|
9
|
+
File.dirname executable
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
class Version
|
2
|
+
|
3
|
+
VERSION_REGEX = '(?:\d+\.)+(?:\d+)'
|
4
|
+
DELIMITER = '.'
|
5
|
+
|
6
|
+
attr_accessor :version
|
7
|
+
|
8
|
+
def initialize(version)
|
9
|
+
raise "#{version} is not a valid version." unless Version.is_valid? version
|
10
|
+
@version = version
|
11
|
+
end
|
12
|
+
|
13
|
+
def compact
|
14
|
+
first 2, ''
|
15
|
+
end
|
16
|
+
|
17
|
+
def first(count, delimiter=DELIMITER)
|
18
|
+
to_a.first(count).join(delimiter)
|
19
|
+
end
|
20
|
+
|
21
|
+
def to_s
|
22
|
+
@version
|
23
|
+
end
|
24
|
+
|
25
|
+
def to_a
|
26
|
+
@version.split DELIMITER
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.match(value)
|
30
|
+
exp = Regexp.new VERSION_REGEX
|
31
|
+
version = value.scan(exp)[0]
|
32
|
+
return unless version
|
33
|
+
Version.new(version)
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def self.is_valid?(version)
|
39
|
+
exp = Regexp.new "^#{VERSION_REGEX}$"
|
40
|
+
version.scan(exp)[0] != nil
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
data/lib/getversion.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
require_relative 'getversion/path_finder'
|
2
|
+
require_relative 'getversion/path'
|
3
|
+
require_relative 'getversion/helpers'
|
4
|
+
|
5
|
+
module GetVersion
|
6
|
+
|
7
|
+
@executables = []
|
8
|
+
|
9
|
+
def self.[](name)
|
10
|
+
executable = @executables.find { |e| e[:name] == name }
|
11
|
+
path = PathFinder.find_path name
|
12
|
+
path = nil if path == '.'
|
13
|
+
@exe = path ? Path.new(path, name).evaluated_path : name
|
14
|
+
instance_eval &executable[:block]
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def self.namespace(namespace)
|
20
|
+
@namespace = namespace
|
21
|
+
yield if block_given?
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.executable(name, &block)
|
25
|
+
@executables << {name: name, namespace: @namespace, block: block}
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
require_relative 'getversion/detectors'
|
metadata
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: getversion
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Matthew Riley
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-07-20 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: Provides a standard interface for obtaining CLI application version numbers.
|
15
|
+
email: matthew@matthewriley.name
|
16
|
+
executables:
|
17
|
+
- getversion.rb
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- lib/getversion/detectors/apple.rb
|
22
|
+
- lib/getversion/detectors/google.rb
|
23
|
+
- lib/getversion/detectors/jetbrains.rb
|
24
|
+
- lib/getversion/detectors/microsoft.rb
|
25
|
+
- lib/getversion/detectors/rubygems.rb
|
26
|
+
- lib/getversion/detectors/uncategorised.rb
|
27
|
+
- lib/getversion/detectors.rb
|
28
|
+
- lib/getversion/helpers.rb
|
29
|
+
- lib/getversion/path.rb
|
30
|
+
- lib/getversion/path_finder.rb
|
31
|
+
- lib/getversion/path_finders/unix_path_finder.rb
|
32
|
+
- lib/getversion/path_finders/windows_path_finder.rb
|
33
|
+
- lib/getversion/version.rb
|
34
|
+
- lib/getversion.rb
|
35
|
+
- !binary |-
|
36
|
+
YmluL2dldHZlcnNpb24ucmI=
|
37
|
+
homepage: http://rubygems.org/gems/getversion
|
38
|
+
licenses: []
|
39
|
+
post_install_message:
|
40
|
+
rdoc_options: []
|
41
|
+
require_paths:
|
42
|
+
- lib
|
43
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
44
|
+
none: false
|
45
|
+
requirements:
|
46
|
+
- - ! '>='
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
requirements: []
|
56
|
+
rubyforge_project:
|
57
|
+
rubygems_version: 1.8.15
|
58
|
+
signing_key:
|
59
|
+
specification_version: 3
|
60
|
+
summary: Provides a standard interface for obtaining CLI application version numbers.
|
61
|
+
test_files: []
|