Sha256: 8726ca2739f24f4a36609046b6de28494e5c2611e0a3cc755735f4daddbbb72e

Contents?: true

Size: 1.71 KB

Versions: 5

Compression:

Stored size: 1.71 KB

Contents

module Serverspec
  module Type
    class Package < Base
      def installed?(provider, version)
        if provider.nil?
          @runner.check_package_is_installed(@name, version)
        else
          check_method = "check_package_is_installed_by_#{provider}".to_sym
          @runner.send(check_method, @name, version)
        end
      end

      def version
        ret = @runner.run_command(commands.get_package_version(@name)).stdout.strip
        if ret.empty?
          nil
        else
          Version.new(ret)
        end
      end

      class Version
        include Comparable

        attr_reader :epoch, :version

        def initialize(val)
          matches = val.match(/^(?:(\d+):)?(\d[0-9a-zA-Z.+:~-]*)$/)
          if matches.nil?
            raise ArgumentError, "Malformed version number string #{val}"
          end
          @epoch   = matches[1].to_i
          @version = matches[2].to_s
        end

        def <=>(other)
          other = Version.new(other) if other.is_a?(String)
          rv    = @epoch <=> other.epoch
          return rv if rv != 0

          self.ver_array <=> other.ver_array
        end

        def ver_array
          val = @version
          re  = /^(?:(\d+)|(\D+))(.*)$/
          res = []
          until val.empty?
            matches = val.match(re)
            if matches[1].nil?
              # String
              matches[2].to_s.each_byte do |b|
                code_point = defined?("~".ord) ? "~".ord : ?~
                res << ((b == code_point) ? -2 : b)
              end
            else
              # Digits
              res << matches[1].to_i
            end
            val = matches[3].to_s
          end
          res << -1
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
serverspec-2.0.0.beta13 lib/serverspec/type/package.rb
serverspec-2.0.0.beta12 lib/serverspec/type/package.rb
serverspec-2.0.0.beta11 lib/serverspec/type/package.rb
serverspec-2.0.0.beta10 lib/serverspec/type/package.rb
serverspec-2.0.0.beta9 lib/serverspec/type/package.rb