class Gem::Dependency
Die Klasse Dependency enthält einen Gem-Namen und eine Gem::Requirement.
Constants
- TYPES
-
Gültige Abhängigkeitstypen.
Attribute
Name oder regulärer Ausdruck der Dependency.
Ermöglicht es Ihnen, diese Abhängigkeit als Vorabversion zu erzwingen.
Öffentliche Klassenmethoden
Source
# File lib/rubygems/dependency.rb, line 36 def initialize(name, *requirements) case name when String then # ok when Regexp then msg = ["NOTE: Dependency.new w/ a regexp is deprecated.", "Dependency.new called from #{Gem.location_of_caller.join(":")}"] warn msg.join("\n") unless Gem::Deprecate.skip else raise ArgumentError, "dependency name must be a String, was #{name.inspect}" end type = Symbol === requirements.last ? requirements.pop : :runtime requirements = requirements.first if requirements.length == 1 # unpack unless TYPES.include? type raise ArgumentError, "Valid types are #{TYPES.inspect}, " \ "not #{type.inspect}" end @name = name @requirement = Gem::Requirement.create requirements @type = type @prerelease = false # This is for Marshal backwards compatibility. See the comments in # +requirement+ for the dirty details. @version_requirements = @requirement end
Konstruiert eine Abhängigkeit mit name und requirements. Das letzte Argument kann optional der Abhängigkeitstyp sein, der standardmäßig auf :runtime gesetzt ist.
Öffentliche Instanzmethoden
Source
# File lib/rubygems/dependency.rb, line 178 def <=>(other) name <=> other.name end
Abhängigkeiten werden nach Namen sortiert.
Source
# File lib/rubygems/dependency.rb, line 188 def =~(other) unless Gem::Dependency === other return unless other.respond_to?(:name) && other.respond_to?(:version) other = Gem::Dependency.new other.name, other.version end return false unless name === other.name reqs = other.requirement.requirements return false unless reqs.length == 1 return false unless reqs.first.first == "=" version = reqs.first.last requirement.satisfied_by? version end
Verwendet diese Abhängigkeit als Muster, um sie mit other zu vergleichen. Diese Abhängigkeit stimmt überein, wenn der Name mit dem Namen von other übereinstimmt und other nur eine exakte Versionsanforderung hat, die diese Abhängigkeit erfüllt.
Source
# File lib/rubygems/dependency.rb, line 327 def identity if prerelease? if specific? :complete else :abs_latest end elsif latest_version? :latest else :released end end
Source
# File lib/rubygems/dependency.rb, line 94 def latest_version? @requirement.none? end
Fragt diese Abhängigkeit einfach nach der neuesten Version eines Gems?
Source
# File lib/rubygems/dependency.rb, line 220 def match?(obj, version = nil, allow_prerelease = false) if !version name = obj.name version = obj.version else name = obj end return false unless self.name === name version = Gem::Version.new version return true if requirement.none? && !version.prerelease? return false if version.prerelease? && !allow_prerelease && !prerelease? requirement.satisfied_by? version end
Stimmt diese Abhängigkeit mit der von name und version beschriebenen Spezifikation überein oder stimmt sie mit spec überein?
HINWEIS: Im Gegensatz zu matches_spec? gibt diese Methode true zurück, wenn die Version eine Vorabversion ist, es sei denn, dies ist eine Vorabversionsabhängigkeit.
Source
# File lib/rubygems/dependency.rb, line 247 def matches_spec?(spec) return false unless name === spec.name return true if requirement.none? requirement.satisfied_by?(spec.version) end
Stimmt diese Abhängigkeit mit spec überein?
HINWEIS: Dies ist keine Komfortmethode. Im Gegensatz zu match? gibt diese Methode true zurück, wenn spec eine Vorabversion ist, auch wenn diese Abhängigkeit keine Vorabversion ist.
Source
# File lib/rubygems/dependency.rb, line 273 def matching_specs(platform_only = false) matches = Gem::Specification.find_all_by_name(name, requirement) if platform_only matches.reject! do |spec| spec.nil? || !Gem::Platform.match_spec?(spec) end end matches.reject(&:ignored?) end
Source
# File lib/rubygems/dependency.rb, line 257 def merge(other) unless name == other.name raise ArgumentError, "#{self} and #{other} have different names" end default = Gem::Requirement.default self_req = requirement other_req = other.requirement return self.class.new name, self_req if other_req == default return self.class.new name, other_req if self_req == default self.class.new name, self_req.as_list.concat(other_req.as_list) end
Führt die Anforderungen von other in diese Abhängigkeit zusammen
Source
# File lib/rubygems/dependency.rb, line 86 def prerelease? @prerelease || requirement.prerelease? end
Erfordert diese Abhängigkeit eine Vorabversion?
Source
# File lib/rubygems/dependency.rb, line 116 def requirement return @requirement if defined?(@requirement) && @requirement # @version_requirements and @version_requirement are legacy ivar # names, and supported here because older gems need to keep # working and Dependency doesn't implement marshal_dump and # marshal_load. In a happier world, this would be an # attr_accessor. The horrifying instance_variable_get you see # below is also the legacy of some old restructurings. # # Note also that because of backwards compatibility (loading new # gems in an old RubyGems installation), we can't add explicit # marshaling to this class until we want to make a big # break. Maybe 2.0. # # Children, define explicit marshal and unmarshal behavior for # public classes. Marshal formats are part of your public API. # REFACTOR: See above if defined?(@version_requirement) && @version_requirement version = @version_requirement.instance_variable_get :@version @version_requirement = nil @version_requirements = Gem::Requirement.new version end @requirement = @version_requirements if defined?(@version_requirements) end
Was erfordert diese Abhängigkeit?
Source
# File lib/rubygems/dependency.rb, line 145 def requirements_list requirement.as_list end
Source
# File lib/rubygems/dependency.rb, line 164 def runtime? @type == :runtime || !@type end
Source
# File lib/rubygems/dependency.rb, line 288 def specific? @requirement.specific? end
True, wenn die Abhängigkeit nicht immer mit der neuesten Version übereinstimmt.
Source
# File lib/rubygems/dependency.rb, line 312 def to_spec matches = to_specs.compact active = matches.find(&:activated?) return active if active unless prerelease? # Consider prereleases only as a fallback pre, matches = matches.partition {|spec| spec.version.prerelease? } matches = pre if matches.empty? end matches.first end
Source
# File lib/rubygems/dependency.rb, line 292 def to_specs matches = matching_specs true # TODO: check Gem.activated_spec[self.name] in case matches falls outside if matches.empty? specs = Gem::Specification.stubs_for name if specs.empty? raise Gem::MissingSpecError.new name, requirement else raise Gem::MissingSpecVersionError.new name, requirement, specs end end # TODO: any other resolver validations should go here matches end
Source
# File lib/rubygems/dependency.rb, line 160 def type @type ||= :runtime end
Typ der Dependency.