mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	This version contains the some style changes by RuboCop.
    * 9d810be0ed
    * 61ea98a727
    * 795893dce3
    * 9be7858f7f
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67074 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
	
			
		
			
				
	
	
		
			151 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			151 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# frozen_string_literal: true
 | 
						|
require 'rubygems/source'
 | 
						|
 | 
						|
##
 | 
						|
# The SourceList represents the sources rubygems has been configured to use.
 | 
						|
# A source may be created from an array of sources:
 | 
						|
#
 | 
						|
#   Gem::SourceList.from %w[https://rubygems.example https://internal.example]
 | 
						|
#
 | 
						|
# Or by adding them:
 | 
						|
#
 | 
						|
#   sources = Gem::SourceList.new
 | 
						|
#   sources << 'https://rubygems.example'
 | 
						|
#
 | 
						|
# The most common way to get a SourceList is Gem.sources.
 | 
						|
 | 
						|
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
 | 
						|
 | 
						|
    list.replace ary
 | 
						|
 | 
						|
    return list
 | 
						|
  end
 | 
						|
 | 
						|
  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
 | 
						|
            Gem::Source.new(obj)
 | 
						|
          when Gem::Source
 | 
						|
            obj
 | 
						|
          else
 | 
						|
            Gem::Source.new(URI.parse(obj))
 | 
						|
          end
 | 
						|
 | 
						|
    @sources << src unless @sources.include?(src)
 | 
						|
    src
 | 
						|
  end
 | 
						|
 | 
						|
  ##
 | 
						|
  # Replaces this SourceList with the sources in +other+  See #<< for
 | 
						|
  # acceptable items in +other+.
 | 
						|
 | 
						|
  def replace(other)
 | 
						|
    clear
 | 
						|
 | 
						|
    other.each do |x|
 | 
						|
      self << x
 | 
						|
    end
 | 
						|
 | 
						|
    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) # :nodoc:
 | 
						|
    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
 | 
						|
    else
 | 
						|
      @sources.find { |x| x.uri.to_s == other.to_s }
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  ##
 | 
						|
  # 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 == source.to_s }
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
end
 |