Class: Gemkeeper::CompactIndexServer
- Inherits:
-
Object
- Object
- Gemkeeper::CompactIndexServer
- Defined in:
- lib/gemkeeper/compact_index_server.rb,
lib/gemkeeper/compact_index_server/response.rb,
lib/gemkeeper/compact_index_server/gem_cache.rb,
lib/gemkeeper/compact_index_server/gem_index.rb,
lib/gemkeeper/compact_index_server/cache_meta.rb,
lib/gemkeeper/compact_index_server/cache_store.rb,
lib/gemkeeper/compact_index_server/spec_mapper.rb,
lib/gemkeeper/compact_index_server/index_merger.rb,
lib/gemkeeper/compact_index_server/upload_handler.rb,
lib/gemkeeper/compact_index_server/upstream_cache.rb,
lib/gemkeeper/compact_index_server/rubygems_client.rb,
lib/gemkeeper/compact_index_server/response_builder.rb
Overview
Rack application implementing the Bundler compact index protocol. Delegates private gem state to GemIndex and upstream caching to UpstreamCache.
Defined Under Namespace
Modules: SpecMapper Classes: CacheMeta, CacheStore, GemCache, GemIndex, IndexMerger, Response, ResponseBuilder, RubygemsClient, UploadHandler, UpstreamCache
Constant Summary collapse
- VALID_NAME =
/\A[a-zA-Z0-9._-]+\z/- RESOURCE_ROUTES =
{ info: %r{\A/info/([^/]+)\z}, gem: %r{\A/gems/([^/]+\.gem)\z} }.freeze
- PRESENCE_ROUTE =
Private-store presence check for ‘gemkeeper sync`; reads the index only, never the upstream proxy (unlike /info), so it can’t be fooled by a public gem.
%r{\A/gemkeeper/has/([^/]+)/([^/]+)\z}
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#initialize(gems_path:, cache_dir:) ⇒ CompactIndexServer
constructor
A new instance of CompactIndexServer.
Constructor Details
#initialize(gems_path:, cache_dir:) ⇒ CompactIndexServer
Returns a new instance of CompactIndexServer.
26 27 28 29 30 |
# File 'lib/gemkeeper/compact_index_server.rb', line 26 def initialize(gems_path:, cache_dir:) @index = GemIndex.new(File.join(gems_path, "gems")) @cache = UpstreamCache.new(cache_dir) @upload = UploadHandler.new(@index) end |
Instance Method Details
#call(env) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/gemkeeper/compact_index_server.rb', line 32 def call(env) req = Rack::Request.new(env) path = req.path_info case [req.request_method, path] in ["GET", "/"] then health in ["GET", "/names"] then serve_names(req) in ["GET", "/versions"] then serve_versions(req) in ["POST", "/upload"] then @upload.call(req) in ["GET", String => p] if p.start_with?("/gemkeeper/") then serve_presence(p) in ["GET", _] then serve_resource(path, req) else not_found end end |