Sha256: 3d292f33f67cf40eb678ad6ada9461c8decc471b11dbdc6ca712c2f239033ee5

Contents?: true

Size: 1.7 KB

Versions: 11

Compression:

Stored size: 1.7 KB

Contents

module Vim
  module Flavor
    class VersionConstraint
      attr_reader :base_version

      # Specifies how to choose a suitable version according to base_version.
      attr_reader :qualifier

      def initialize(s)
        @base_version, @qualifier = self.class.parse(s)
      end

      def to_s()
        case
        when PlainVersion === base_version
          "#{qualifier} #{base_version}"
        when BranchVersion === base_version
          "#{qualifier} #{base_version.branch}"
        else
          throw "Unexpected base_version: #{base_version}"
        end
      end

      def ==(other)
        self.base_version == other.base_version &&
          self.qualifier == other.qualifier
      end

      def self.parse(s)
        m = /^\s*(>=|~>|branch:)\s+(\S+)\s*$/.match(s)
        if m
          if m[1] == 'branch:'
            [Version.create(branch: m[2]), m[1]]
          else
            [Version.create(m[2]), m[1]]
          end
        else
          raise "Invalid version constraint: #{s.inspect}"
        end
      end

      def compatible?(version)
        if qualifier == '~>'
          PlainVersion === version and
            self.base_version.bump() > version and
            version >= self.base_version
        elsif qualifier == '>='
          PlainVersion === version and
            version >= self.base_version
        elsif qualifier == 'branch:'
          BranchVersion === version and
            version.branch == self.base_version.branch
        else
          raise NotImplementedError
        end
      end

      def find_the_best_version(versions)
        versions.
          select {|v| compatible?(v)}.
          max() or raise 'There is no valid version'
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
vim-flavor-4.0.3 lib/vim-flavor/versionconstraint.rb
vim-flavor-4.0.2 lib/vim-flavor/versionconstraint.rb
vim-flavor-4.0.1 lib/vim-flavor/versionconstraint.rb
vim-flavor-4.0.0 lib/vim-flavor/versionconstraint.rb
vim-flavor-3.0.0 lib/vim-flavor/versionconstraint.rb
vim-flavor-2.2.2 lib/vim-flavor/versionconstraint.rb
vim-flavor-2.2.1 lib/vim-flavor/versionconstraint.rb
vim-flavor-2.2.0 lib/vim-flavor/versionconstraint.rb
vim-flavor-2.1.1 lib/vim-flavor/versionconstraint.rb
vim-flavor-2.1.0 lib/vim-flavor/versionconstraint.rb
vim-flavor-2.0.0 lib/vim-flavor/versionconstraint.rb