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: []
         |