class Gemstash::GemSource::PrivateSource

GemSource for privately stored gems.

Attributes

auth[RW]

Public Class Methods

matches?(env) click to toggle source
# File lib/gemstash/gem_source/private_source.rb, line 17
def self.matches?(env)
  rewriter = rack_env_rewriter.for(env)
  return false unless rewriter.matches?

  rewriter.rewrite
  true
end
rack_env_rewriter() click to toggle source
# File lib/gemstash/gem_source/private_source.rb, line 13
def self.rack_env_rewriter
  @rack_env_rewriter ||= Gemstash::RackEnvRewriter.new(%r{\A/private})
end

Public Instance Methods

serve_actual_gem(id) click to toggle source
# File lib/gemstash/gem_source/private_source.rb, line 68
def serve_actual_gem(id)
  halt 403, "Not yet supported"
end
serve_add_gem() click to toggle source
# File lib/gemstash/gem_source/private_source.rb, line 29
def serve_add_gem
  protected(Gemstash::GemPusher)
end
serve_add_spec_json() click to toggle source
# File lib/gemstash/gem_source/private_source.rb, line 37
def serve_add_spec_json
  halt 403, "Not yet supported"
end
serve_gem(id) click to toggle source
# File lib/gemstash/gem_source/private_source.rb, line 72
def serve_gem(id)
  authorization.protect(self) do
    auth.check("fetch") if gemstash_env.config[:protected_fetch]
    gem_full_name = id.delete_suffix(".gem")
    gem = fetch_gem(gem_full_name)
    content_type "application/octet-stream"
    gem.content(:gem)
  end
end
serve_info(name) click to toggle source
# File lib/gemstash/gem_source/private_source.rb, line 53
def serve_info(name)
  halt 403, "Not yet supported"
end
serve_latest_specs() click to toggle source
# File lib/gemstash/gem_source/private_source.rb, line 87
def serve_latest_specs
  params[:latest] = true
  protected(Gemstash::SpecsBuilder)
end
serve_marshal(id) click to toggle source
# File lib/gemstash/gem_source/private_source.rb, line 57
def serve_marshal(id)
  authorization.protect(self) do
    auth.check("fetch") if gemstash_env.config[:protected_fetch]
    gem_full_name = id.delete_suffix(".gemspec.rz")
    gem = fetch_gem(gem_full_name)
    halt 404 unless gem.exist?(:spec)
    content_type "application/octet-stream"
    gem.content(:spec)
  end
end
serve_names() click to toggle source
# File lib/gemstash/gem_source/private_source.rb, line 45
def serve_names
  halt 403, "Not yet supported"
end
serve_prerelease_specs() click to toggle source
# File lib/gemstash/gem_source/private_source.rb, line 92
def serve_prerelease_specs
  params[:prerelease] = true
  protected(Gemstash::SpecsBuilder)
end
serve_remove_spec_json() click to toggle source
# File lib/gemstash/gem_source/private_source.rb, line 41
def serve_remove_spec_json
  halt 403, "Not yet supported"
end
serve_root() click to toggle source
# File lib/gemstash/gem_source/private_source.rb, line 25
def serve_root
  halt 403, "Not yet supported"
end
serve_specs() click to toggle source
# File lib/gemstash/gem_source/private_source.rb, line 82
def serve_specs
  params[:prerelease] = false
  protected(Gemstash::SpecsBuilder)
end
serve_versions() click to toggle source
# File lib/gemstash/gem_source/private_source.rb, line 49
def serve_versions
  halt 404, "Not yet supported"
end
serve_yank() click to toggle source
# File lib/gemstash/gem_source/private_source.rb, line 33
def serve_yank
  protected(Gemstash::GemYanker)
end

Private Instance Methods

authorization() click to toggle source
# File lib/gemstash/gem_source/private_source.rb, line 103
def authorization
  Gemstash::ApiKeyAuthorization
end
dependencies() click to toggle source
# File lib/gemstash/gem_source/private_source.rb, line 107
def dependencies
  @dependencies ||= Gemstash::Dependencies.for_private
end
fetch_gem(gem_full_name) click to toggle source
# File lib/gemstash/gem_source/private_source.rb, line 115
def fetch_gem(gem_full_name)
  gem = storage.resource(gem_full_name)
  halt 404 unless gem.exist?(:gem)
  halt 403, "That gem has been yanked" unless gem.properties[:indexed]
  gem
end
protected(servable) click to toggle source
# File lib/gemstash/gem_source/private_source.rb, line 99
def protected(servable)
  authorization.protect(self) { servable.serve(self) }
end
storage() click to toggle source
# File lib/gemstash/gem_source/private_source.rb, line 111
def storage
  @storage ||= Gemstash::Storage.for("private").for("gems")
end