Sha256: d64575cb7b69f45b3e20f90414df3d73f2f4d53a809e1b97f73e1b3ce599bd9d

Contents?: true

Size: 1.77 KB

Versions: 27

Compression:

Stored size: 1.77 KB

Contents

# frozen_string_literal: true

require "dependabot/utils/elixir/version"

module Dependabot
  module Utils
    module Elixir
      class Requirement < Gem::Requirement
        AND_SEPARATOR = /\s+and\s+/.freeze
        OR_SEPARATOR = /\s+or\s+/.freeze

        # Add the double-equality matcher to the list of allowed operations
        OPS = OPS.merge("==" => ->(v, r) { v == r })

        # Override the version pattern to allow local versions
        quoted = OPS.keys.map { |k| Regexp.quote k }.join "|"
        PATTERN_RAW =
          "\\s*(#{quoted})?\\s*(#{Utils::Elixir::Version::VERSION_PATTERN})\\s*"
        PATTERN = /\A#{PATTERN_RAW}\z/.freeze

        # Returns an array of requirements. At least one requirement from the
        # returned array must be satisfied for a version to be valid.
        def self.requirements_array(requirement_string)
          requirement_string.strip.split(OR_SEPARATOR).map do |req_string|
            requirements = req_string.strip.split(AND_SEPARATOR)
            new(requirements)
          end
        end

        # Override the parser to create Utils::Elixir::Versions
        def self.parse(obj)
          if obj.is_a?(Gem::Version)
            return ["=", Utils::Elixir::Version.new(obj.to_s)]
          end

          unless (matches = PATTERN.match(obj.to_s))
            msg = "Illformed requirement [#{obj.inspect}]"
            raise BadRequirementError, msg
          end

          return DefaultRequirement if matches[1] == ">=" && matches[2] == "0"

          [matches[1] || "=", Utils::Elixir::Version.new(matches[2])]
        end

        def satisfied_by?(version)
          version = Utils::Elixir::Version.new(version.to_s)

          requirements.all? { |op, rv| (OPS[op] || OPS["="]).call(version, rv) }
        end
      end
    end
  end
end

Version data entries

27 entries across 27 versions & 1 rubygems

Version Path
dependabot-core-0.87.15 lib/dependabot/utils/elixir/requirement.rb
dependabot-core-0.87.14 lib/dependabot/utils/elixir/requirement.rb
dependabot-core-0.87.13 lib/dependabot/utils/elixir/requirement.rb
dependabot-core-0.87.12 lib/dependabot/utils/elixir/requirement.rb
dependabot-core-0.87.11 lib/dependabot/utils/elixir/requirement.rb
dependabot-core-0.87.10 lib/dependabot/utils/elixir/requirement.rb
dependabot-core-0.87.9 lib/dependabot/utils/elixir/requirement.rb
dependabot-core-0.87.8 lib/dependabot/utils/elixir/requirement.rb
dependabot-core-0.87.7 lib/dependabot/utils/elixir/requirement.rb
dependabot-core-0.87.6 lib/dependabot/utils/elixir/requirement.rb
dependabot-core-0.87.5 lib/dependabot/utils/elixir/requirement.rb
dependabot-core-0.87.4 lib/dependabot/utils/elixir/requirement.rb
dependabot-core-0.87.3 lib/dependabot/utils/elixir/requirement.rb
dependabot-core-0.87.2 lib/dependabot/utils/elixir/requirement.rb
dependabot-core-0.87.1 lib/dependabot/utils/elixir/requirement.rb
dependabot-core-0.87.0 lib/dependabot/utils/elixir/requirement.rb
dependabot-core-0.86.25 lib/dependabot/utils/elixir/requirement.rb
dependabot-core-0.86.24 lib/dependabot/utils/elixir/requirement.rb
dependabot-core-0.86.23 lib/dependabot/utils/elixir/requirement.rb
dependabot-core-0.86.22 lib/dependabot/utils/elixir/requirement.rb