class Gemstash::GemSource::RedirectSource

GemSource that purely redirects to the upstream server.

Public Class Methods

capture_user_agent(env) click to toggle source
# File lib/gemstash/gem_source/upstream_source.rb, line 24
def self.capture_user_agent(env)
  env["gemstash.user-agent"] = env["HTTP_USER_AGENT"]
end
matches?(env) click to toggle source
# File lib/gemstash/gem_source/upstream_source.rb, line 14
def self.matches?(env)
  rewriter = rack_env_rewriter.for(env)
  return false unless rewriter.matches?

  rewriter.rewrite
  env["gemstash.upstream"] = rewriter.captures["upstream_url"]
  capture_user_agent(env)
  true
end
rack_env_rewriter() click to toggle source
# File lib/gemstash/gem_source/upstream_source.rb, line 10
def self.rack_env_rewriter
  @rack_env_rewriter ||= Gemstash::RackEnvRewriter.new(%r{\A/redirect/(?<upstream_url>[^/]+)})
end

Public Instance Methods

serve_actual_gem(id) click to toggle source
# File lib/gemstash/gem_source/upstream_source.rb, line 73
def serve_actual_gem(id)
  redirect upstream.url("fetch/actual/gem/#{id}", request.query_string)
end
serve_add_gem() click to toggle source
# File lib/gemstash/gem_source/upstream_source.rb, line 33
def serve_add_gem
  halt 403, "Cannot add gem to an upstream server!"
end
serve_add_spec_json() click to toggle source
# File lib/gemstash/gem_source/upstream_source.rb, line 41
def serve_add_spec_json
  halt 403, "Cannot add spec to an upstream server!"
end
serve_dependencies() click to toggle source
# File lib/gemstash/gem_source/upstream_source.rb, line 49
def serve_dependencies
  redirect upstream.url("api/v1/dependencies", request.query_string)
end
serve_dependencies_json() click to toggle source
# File lib/gemstash/gem_source/upstream_source.rb, line 53
def serve_dependencies_json
  redirect upstream.url("api/v1/dependencies.json", request.query_string)
end
serve_gem(id) click to toggle source
# File lib/gemstash/gem_source/upstream_source.rb, line 77
def serve_gem(id)
  redirect upstream.url("gems/#{id}", request.query_string)
end
serve_info(name) click to toggle source
# File lib/gemstash/gem_source/upstream_source.rb, line 65
def serve_info(name)
  redirect index_upstream.url("info/#{name}", request.query_string)
end
serve_latest_specs() click to toggle source
# File lib/gemstash/gem_source/upstream_source.rb, line 81
def serve_latest_specs
  redirect upstream.url("latest_specs.4.8.gz", request.query_string)
end
serve_marshal(id) click to toggle source
# File lib/gemstash/gem_source/upstream_source.rb, line 69
def serve_marshal(id)
  redirect upstream.url("quick/Marshal.4.8/#{id}", request.query_string)
end
serve_names() click to toggle source
# File lib/gemstash/gem_source/upstream_source.rb, line 57
def serve_names
  redirect upstream.url("names", request.query_string)
end
serve_prerelease_specs() click to toggle source
# File lib/gemstash/gem_source/upstream_source.rb, line 89
def serve_prerelease_specs
  redirect upstream.url("prerelease_specs.4.8.gz", request.query_string)
end
serve_remove_spec_json() click to toggle source
# File lib/gemstash/gem_source/upstream_source.rb, line 45
def serve_remove_spec_json
  halt 403, "Cannot remove spec from an upstream server!"
end
serve_root() click to toggle source
# File lib/gemstash/gem_source/upstream_source.rb, line 28
def serve_root
  cache_control :public, :max_age => 31_536_000
  redirect upstream.url(nil, request.query_string)
end
serve_specs() click to toggle source
# File lib/gemstash/gem_source/upstream_source.rb, line 85
def serve_specs
  redirect upstream.url("specs.4.8.gz", request.query_string)
end
serve_versions() click to toggle source
# File lib/gemstash/gem_source/upstream_source.rb, line 61
def serve_versions
  redirect index_upstream.url("versions", request.query_string)
end
serve_yank() click to toggle source
# File lib/gemstash/gem_source/upstream_source.rb, line 37
def serve_yank
  halt 403, "Cannot yank from an upstream server!"
end

Private Instance Methods

index_upstream() click to toggle source
# File lib/gemstash/gem_source/upstream_source.rb, line 102
def index_upstream
  @index_upstream ||=
    if upstream.uri.host == "rubygems.org"
      uri = upstream.uri.dup
      uri.host = "index.rubygems.org"
      Gemstash::Upstream.new(uri, user_agent: upstream.user_agent)
    else
      upstream
    end
end
upstream() click to toggle source
# File lib/gemstash/gem_source/upstream_source.rb, line 95
def upstream
  @upstream ||= Gemstash::Upstream.new(
    env["gemstash.upstream"],
    user_agent: env["gemstash.user-agent"]
  )
end