class Gem::Requirement
一个 Requirement 是一个或多个版本限制的集合。它支持一些(=, !=, >, <, >=, <=, ~>)不同的限制运算符。
有关 RubyGems 中版本和要求如何协同工作的描述,请参阅 Gem::Version。
Constants
- DefaultPrereleaseRequirement
-
默认要求匹配任何版本
- DefaultRequirement
-
默认要求匹配任何非预发布版本
- PATTERN
-
一个匹配要求的正则表达式
Public Class Methods
Source
# File lib/rubygems/requirement.rb, line 55 def self.create(*inputs) return new inputs if inputs.length > 1 input = inputs.shift case input when Gem::Requirement then input when Gem::Version, Array then new input when "!" then source_set else if input.respond_to? :to_str new [input.to_str] else default end end end
创建 Gem::Requirement 对象的工厂方法。输入可以是 Version、String 或 nil。旨在简化客户端代码。
如果输入“奇怪”,则返回默认版本要求。
Source
# File lib/rubygems/requirement.rb, line 80 def self.default_prerelease new ">= 0.a" end
Source
# File lib/rubygems/requirement.rb, line 133 def initialize(*requirements) requirements = requirements.flatten requirements.compact! requirements.uniq! if requirements.empty? @requirements = [DefaultRequirement] else @requirements = requirements.map! {|r| self.class.parse r } end end
从 requirements 构建一个要求。要求可以是字符串、Gem::Versions 或它们的数组。nil 和重复的要求将被忽略。一组空的 requirements 与 ">= 0" 相同。
Source
# File lib/rubygems/requirement.rb, line 103 def self.parse(obj) return ["=", obj] if Gem::Version === obj unless PATTERN =~ obj.to_s raise BadRequirementError, "Illformed requirement [#{obj.inspect}]" end op = -($1 || "=") version = -$2 if op == ">=" && version == "0" DefaultRequirement elsif op == ">=" && version == "0.a" DefaultPrereleaseRequirement else [op, Gem::Version.new(version)] end end
解析 obj,返回一个 [op, version] 对。obj 可以是 String 或 Gem::Version。
如果 obj 是 String,它可以是完整的要求规范,如 ">= 1.2",或简单的版本号,如 "1.2"。
parse("> 1.0") # => [">", Gem::Version.new("1.0")] parse("1.0") # => ["=", Gem::Version.new("1.0")] parse(Gem::Version.new("1.0")) # => ["=, Gem::Version.new("1.0")]
Public Instance Methods
Source
# File lib/rubygems/requirement.rb, line 148 def concat(new) new = new.flatten new.compact! new.uniq! new = new.map {|r| self.class.parse r } @requirements.concat new end
将 new 要求连接到此要求。
Source
# File lib/rubygems/requirement.rb, line 186 def exact? return false unless @requirements.size == 1 @requirements[0][0] == "=" end
如果要求仅用于精确版本,则为 true
Source
# File lib/rubygems/requirement.rb, line 175 def none? if @requirements.size == 1 @requirements[0] == DefaultRequirement else false end end
如果此 gem 没有要求,则为 true。
Source
# File lib/rubygems/requirement.rb, line 228 def prerelease? requirements.any? {|r| r.last.prerelease? } end
如果要求中的任何版本是预发布版本,则该要求是预发布的
Source
# File lib/rubygems/requirement.rb, line 241 def satisfied_by?(version) raise ArgumentError, "Need a Gem::Version: #{version.inspect}" unless Gem::Version === version requirements.all? {|op, rv| OPS.fetch(op).call version, rv } end
如果 version 满足此 Requirement,则为 true。
Source
# File lib/rubygems/requirement.rb, line 253 def specific? return true if @requirements.length > 1 # GIGO, > 1, > 2 is silly !%w[> >=].include? @requirements.first.first # grab the operator end
如果要求不总是匹配最新版本,则为 true。
Protected Instance Methods
Source
# File lib/rubygems/requirement.rb, line 279 def _sorted_requirements @_sorted_requirements ||= requirements.sort_by(&:to_s) end
Source
# File lib/rubygems/requirement.rb, line 283 def _tilde_requirements @_tilde_requirements ||= _sorted_requirements.select {|r| r.first == "~>" } end