class Gem::TestCase::SpecFetcherSetup
def self.declare(test, repository)
def self.declare(test, repository) setup = new test, repository yield setup setup.execute end
def created_specs
def created_specs created = {} @gems.keys.each do |spec| created[spec.full_name] = spec end created end
def download(name, version, dependencies = nil, &block)
def download(name, version, dependencies = nil, &block) @operations << [:download, name, version, dependencies, block] end
def execute # :nodoc:
def execute # :nodoc: execute_operations setup_fetcher created_specs end
def execute_operations # :nodoc:
def execute_operations # :nodoc: @operations.each do |operation, *arguments| block = arguments.pop case operation when :gem then spec, gem = @test.util_gem(*arguments, &block) write_spec spec @gems[spec] = gem @installed << spec when :download then spec, gem = @test.util_gem(*arguments, &block) @gems[spec] = gem @downloaded << spec when :spec then spec = @test.util_spec(*arguments, &block) write_spec spec @gems[spec] = nil @installed << spec end end end
def gem(name, version, dependencies = nil, &block)
def gem(name, version, dependencies = nil, &block) @operations << [:gem, name, version, dependencies, block] end
def initialize(test, repository) # :nodoc:
def initialize(test, repository) # :nodoc: @test = test @repository = repository @gems = {} @downloaded = [] @installed = [] @operations = [] end
def legacy_platform
def legacy_platform spec 'pl', 1 do |s| s.platform = Gem::Platform.new 'i386-linux' s.instance_variable_set :@original_platform, 'i386-linux' end end
def setup_fetcher # :nodoc:
def setup_fetcher # :nodoc: require 'zlib' require 'socket' require 'rubygems/remote_fetcher' unless @test.fetcher @test.fetcher = Gem::FakeFetcher.new Gem::RemoteFetcher.fetcher = @test.fetcher end Gem::Specification.reset begin gem_repo, @test.gem_repo = @test.gem_repo, @repository @test.uri = URI @repository @test.util_setup_spec_fetcher(*@downloaded) ensure @test.gem_repo = gem_repo @test.uri = URI gem_repo end @gems.each do |spec, gem| next unless gem @test.fetcher.data["#{@repository}gems/#{spec.file_name}"] = Gem.read_binary(gem) FileUtils.cp gem, spec.cache_file end end
def spec(name, version, dependencies = nil, &block)
def spec(name, version, dependencies = nil, &block) @operations << [:spec, name, version, dependencies, block] end
def write_spec(spec) # :nodoc:
def write_spec(spec) # :nodoc: File.open spec.spec_file, 'w' do |io| io.write spec.to_ruby_for_cache end end