72 lines
2.3 KiB
Ruby
72 lines
2.3 KiB
Ruby
|
require File.expand_path("../../path.rb", __FILE__)
|
||
|
require File.expand_path("../../../../lib/bundler/deprecate", __FILE__)
|
||
|
include Spec::Path
|
||
|
|
||
|
# Set up pretend http gem server with FakeWeb
|
||
|
$LOAD_PATH.unshift "#{Dir[base_system_gems.join("gems/artifice*/lib")].first}"
|
||
|
$LOAD_PATH.unshift "#{Dir[base_system_gems.join("gems/rack-*/lib")].first}"
|
||
|
$LOAD_PATH.unshift "#{Dir[base_system_gems.join("gems/rack-*/lib")].last}"
|
||
|
$LOAD_PATH.unshift "#{Dir[base_system_gems.join("gems/tilt*/lib")].first}"
|
||
|
$LOAD_PATH.unshift "#{Dir[base_system_gems.join("gems/sinatra*/lib")].first}"
|
||
|
require 'artifice'
|
||
|
require 'sinatra/base'
|
||
|
|
||
|
class Endpoint < Sinatra::Base
|
||
|
|
||
|
helpers do
|
||
|
def dependencies_for(gem_names, marshal = gem_repo1("specs.4.8"))
|
||
|
return [] if gem_names.nil? || gem_names.empty?
|
||
|
|
||
|
require 'rubygems'
|
||
|
require 'bundler'
|
||
|
Bundler::Deprecate.skip_during do
|
||
|
Marshal.load(File.open(marshal).read).map do |name, version, platform|
|
||
|
spec = load_spec(name, version, platform)
|
||
|
if gem_names.include?(spec.name)
|
||
|
{
|
||
|
:name => spec.name,
|
||
|
:number => spec.version.version,
|
||
|
:platform => spec.platform.to_s,
|
||
|
:dependencies => spec.dependencies.select {|dep| dep.type == :runtime }.map do |dep|
|
||
|
[dep.name, dep.requirement.requirements.map {|a| a.join(" ") }.join(", ")]
|
||
|
end
|
||
|
}
|
||
|
end
|
||
|
end.compact
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def load_spec(name, version, platform)
|
||
|
full_name = "#{name}-#{version}"
|
||
|
full_name += "-#{platform}" if platform != "ruby"
|
||
|
Marshal.load(Gem.inflate(File.open(gem_repo1("quick/Marshal.4.8/#{full_name}.gemspec.rz")).read))
|
||
|
end
|
||
|
end
|
||
|
|
||
|
get "/quick/Marshal.4.8/:id" do
|
||
|
redirect "/fetch/actual/gem/#{params[:id]}"
|
||
|
end
|
||
|
|
||
|
get "/fetch/actual/gem/:id" do
|
||
|
File.read("#{gem_repo1}/quick/Marshal.4.8/#{params[:id]}")
|
||
|
end
|
||
|
|
||
|
get "/gems/:id" do
|
||
|
File.read("#{gem_repo1}/gems/#{params[:id]}")
|
||
|
end
|
||
|
|
||
|
get "/api/v1/dependencies" do
|
||
|
Marshal.dump(dependencies_for(params[:gems]))
|
||
|
end
|
||
|
|
||
|
get "/specs.4.8.gz" do
|
||
|
File.read("#{gem_repo1}/specs.4.8.gz")
|
||
|
end
|
||
|
|
||
|
get "/prerelease_specs.4.8.gz" do
|
||
|
File.read("#{gem_repo1}/prerelease_specs.4.8.gz")
|
||
|
end
|
||
|
end
|
||
|
|
||
|
Artifice.activate_with(Endpoint)
|