Class: Dependabot::Conda::Requirement
- Inherits:
-
Requirement
- Object
- Requirement
- Dependabot::Conda::Requirement
- Extended by:
- T::Sig
- Defined in:
- lib/dependabot/conda/requirement.rb
Constant Summary collapse
- OPS =
Support both conda and pip operators
T.let( OPS.merge( "=" => ->(v, r) { v == r }, # conda equality "==" => ->(v, r) { v == r }, # pip equality "~=" => ->(v, r) { v >= r && v.release < r.bump } # pip compatible release ), T::Hash[String, T.proc.params(arg0: T.untyped, arg1: T.untyped).returns(T.untyped)] )
- PATTERN_RAW =
T.let("\\s*(?<op>#{quoted})?\\s*(?<version>#{version_pattern})\\s*".freeze, String)
- PATTERN =
T.let(/\A#{PATTERN_RAW}\z/, Regexp)
Class Method Summary collapse
Instance Method Summary collapse
- #exact? ⇒ Boolean
-
#initialize(*requirements) ⇒ Requirement
constructor
A new instance of Requirement.
- #satisfied_by?(version) ⇒ Boolean
- #to_s ⇒ Object
Constructor Details
#initialize(*requirements) ⇒ Requirement
Returns a new instance of Requirement.
61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/dependabot/conda/requirement.rb', line 61 def initialize(*requirements) @original_string = T.let(requirements.first&.to_s, T.nilable(String)) requirements = requirements.flatten.flat_map do |req_string| next if req_string.nil? # Handle complex requirements and convert to Ruby-compatible format req_string.split(",").map(&:strip).map do |r| convert_conda_constraint_to_ruby_constraint(r) end end.compact super(requirements) end |
Class Method Details
.parse(obj) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/dependabot/conda/requirement.rb', line 37 def self.parse(obj) return ["=", obj] if obj.is_a?(Gem::Version) unless (matches = PATTERN.match(obj.to_s)) msg = "Illformed requirement [#{obj.inspect}]" raise BadRequirementError, msg end return DefaultRequirement if matches[:op] == ">=" && matches[:version] == "0" [matches[:op] || "=", Dependabot::Conda::Version.new(T.must(matches[:version]))] end |
.requirements_array(requirement_string) ⇒ Object
51 52 53 54 55 56 57 58 |
# File 'lib/dependabot/conda/requirement.rb', line 51 def self.requirements_array(requirement_string) return [new(nil)] if requirement_string.nil? # Handle complex requirements like ">=1.0.0,<2.0.0" requirement_string.strip.split(",").map do |req_string| new(req_string.strip) end end |
Instance Method Details
#exact? ⇒ Boolean
84 85 86 87 88 |
# File 'lib/dependabot/conda/requirement.rb', line 84 def exact? return false unless requirements.size == 1 %w(= == ===).include?(requirements[0][0]) end |
#satisfied_by?(version) ⇒ Boolean
77 78 79 80 81 |
# File 'lib/dependabot/conda/requirement.rb', line 77 def satisfied_by?(version) version = Dependabot::Conda::Version.new(version.to_s) requirements.all? { |op, rv| T.must(OPS[op] || OPS["="]).call(version, rv) } end |
#to_s ⇒ Object
91 92 93 |
# File 'lib/dependabot/conda/requirement.rb', line 91 def to_s @original_string || super end |