diff options
Diffstat (limited to 'lib/rubygems/source_list.rb')
-rw-r--r-- | lib/rubygems/source_list.rb | 71 |
1 files changed, 60 insertions, 11 deletions
diff --git a/lib/rubygems/source_list.rb b/lib/rubygems/source_list.rb index 7bd8ef0b78..e6da50c2e5 100644 --- a/lib/rubygems/source_list.rb +++ b/lib/rubygems/source_list.rb @@ -1,28 +1,40 @@ require 'rubygems/source' class Gem::SourceList + + include Enumerable + + ## + # Creates a new SourceList + def initialize @sources = [] end + ## + # The sources in this list + attr_reader :sources + ## + # Creates a new SourceList from an array of sources. + def self.from(ary) list = new - if ary - ary.each do |x| - list << x - end - end + list.replace ary return list end - def initialize_copy(other) + def initialize_copy(other) # :nodoc: @sources = @sources.dup end + ## + # Appends +obj+ to the source list which may be a Gem::Source, URI or URI + # String. + def <<(obj) src = case obj when URI @@ -37,8 +49,12 @@ class Gem::SourceList src end + ## + # Replaces this SourceList with the sources in +other+ See #<< for + # acceptable items in +other+. + def replace(other) - @sources.clear + clear other.each do |x| self << x @@ -47,28 +63,58 @@ class Gem::SourceList self end + ## + # Removes all sources from the SourceList. + + def clear + @sources.clear + end + + ## + # Yields each source URI in the list. + def each @sources.each { |s| yield s.uri.to_s } end + ## + # Yields each source in the list. + def each_source(&b) @sources.each(&b) end + ## + # Returns true if there are no sources in this SourceList. + + def empty? + @sources.empty? + end + def ==(other) to_a == other end + ## + # Returns an Array of source URI Strings. + def to_a @sources.map { |x| x.uri.to_s } end alias_method :to_ary, :to_a + ## + # Returns the first source in the list. + def first @sources.first end + ## + # Returns true if this source list includes +other+ which may be a + # Gem::Source or a source URI. + def include?(other) if other.kind_of? Gem::Source @sources.include? other @@ -77,11 +123,14 @@ class Gem::SourceList end end - def delete(uri) - if uri.kind_of? Gem::Source - @sources.delete uri + ## + # Deletes +source+ from the source list which may be a Gem::Source or a URI. + + def delete source + if source.kind_of? Gem::Source + @sources.delete source else - @sources.delete_if { |x| x.uri.to_s == uri.to_s } + @sources.delete_if { |x| x.uri.to_s == source.to_s } end end end |