Class | Gem::Dependency |
In: |
lib/rubygems/dependency.rb
|
Parent: | Object |
The Dependency class holds a Gem name and a Gem::Requirement.
TYPES | = | [ :development, :runtime, ] | Valid dependency types. |
name | [RW] | Dependency name or regular expression. |
prerelease | [W] | Allows you to force this dependency to be a prerelease. |
Constructs a dependency with name and requirements. The last argument can optionally be the dependency type, which defaults to :runtime.
# File lib/rubygems/dependency.rb, line 34 34: def initialize name, *requirements 35: type = Symbol === requirements.last ? requirements.pop : :runtime 36: requirements = requirements.first if 1 == requirements.length # unpack 37: 38: unless TYPES.include? type 39: raise ArgumentError, "Valid types are #{TYPES.inspect}, " 40: + "not #{type.inspect}" 41: end 42: 43: @name = name 44: @requirement = Gem::Requirement.create requirements 45: @type = type 46: @prerelease = false 47: 48: # This is for Marshal backwards compatibility. See the comments in 49: # +requirement+ for the dirty details. 50: 51: @version_requirements = @requirement 52: end
Dependencies are ordered by name.
# File lib/rubygems/dependency.rb, line 148 148: def <=> other 149: self.name <=> other.name 150: end
Uses this dependency as a pattern to compare to other. This dependency will match if the name matches the other‘s name, and other has only an equal version requirement that satisfies this dependency.
# File lib/rubygems/dependency.rb, line 158 158: def =~ other 159: unless Gem::Dependency === other 160: return unless other.respond_to?(:name) && other.respond_to?(:version) 161: other = Gem::Dependency.new other.name, other.version 162: end 163: 164: return false unless name === other.name 165: 166: reqs = other.requirement.requirements 167: 168: return false unless reqs.length == 1 169: return false unless reqs.first.first == '=' 170: 171: version = reqs.first.last 172: 173: requirement.satisfied_by? version 174: end
# File lib/rubygems/dependency.rb, line 176 176: def match? name, version 177: return false unless self.name === name 178: return true if requirement.none? 179: 180: requirement.satisfied_by? Gem::Version.new(version) 181: end
# File lib/rubygems/dependency.rb, line 183 183: def matches_spec? spec 184: return false unless name === spec.name 185: return true if requirement.none? 186: 187: requirement.satisfied_by?(spec.version) 188: end
Merges the requirements of other into this dependency
# File lib/rubygems/dependency.rb, line 193 193: def merge other 194: unless name == other.name then 195: raise ArgumentError, 196: "#{self} and #{other} have different names" 197: end 198: 199: default = Gem::Requirement.default 200: self_req = self.requirement 201: other_req = other.requirement 202: 203: return self.class.new name, self_req if other_req == default 204: return self.class.new name, other_req if self_req == default 205: 206: self.class.new name, self_req.as_list.concat(other_req.as_list) 207: end
Does this dependency require a prerelease?
# File lib/rubygems/dependency.rb, line 70 70: def prerelease? 71: @prerelease || requirement.prerelease? 72: end
What does this dependency require?
# File lib/rubygems/dependency.rb, line 92 92: def requirement 93: return @requirement if defined?(@requirement) and @requirement 94: 95: # @version_requirements and @version_requirement are legacy ivar 96: # names, and supported here because older gems need to keep 97: # working and Dependency doesn't implement marshal_dump and 98: # marshal_load. In a happier world, this would be an 99: # attr_accessor. The horrifying instance_variable_get you see 100: # below is also the legacy of some old restructurings. 101: # 102: # Note also that because of backwards compatibility (loading new 103: # gems in an old RubyGems installation), we can't add explicit 104: # marshaling to this class until we want to make a big 105: # break. Maybe 2.0. 106: # 107: # Children, define explicit marshal and unmarshal behavior for 108: # public classes. Marshal formats are part of your public API. 109: 110: if defined?(@version_requirement) && @version_requirement 111: version = @version_requirement.instance_variable_get :@version 112: @version_requirement = nil 113: @version_requirements = Gem::Requirement.new version 114: end 115: 116: @requirement = @version_requirements if defined?(@version_requirements) 117: end
# File lib/rubygems/dependency.rb, line 119 119: def requirements_list 120: requirement.as_list 121: end