Class: Paquette::NpmServer
- Inherits:
-
Object
- Object
- Paquette::NpmServer
- Defined in:
- lib/paquette/npm_server.rb,
lib/paquette/npm_server/npm_repository.rb,
lib/paquette/npm_server/gated_npm_repository.rb,
lib/paquette/npm_server/directory_npm_repository.rb
Defined Under Namespace
Classes: DirectoryNpmRepository, GatedNpmRepository, NpmRepository
Constant Summary collapse
- @@routes =
Routes.draw do |r| # Root endpoint r.get "/" do text_ok("Paquette NPM Repository") end # NPM API endpoints r.get "/-/ping" do json_ok({}) end r.get "/-/whoami" do json_ok({username: "paquette"}) end # Dynamic endpoints with parameters r.get "/-/package/:package_name/dist-tags" do |package_name:| = @repository.(package_name) if && [:"dist-tags"] json_ok([:"dist-tags"]) else not_found("Package not found") end end r.get "/:package_name" do |package_name:| = @repository.(package_name) if json_ok() else not_found("Package not found") end end r.get "/:package_name/:tarball_name" do |package_name:, tarball_name:| # Extract version from tarball name (e.g., "package-1.0.0.tgz") if (match = tarball_name.match(/^#{Regexp.escape(package_name)}-(\d+\.\d+\.\d+.*)\.tgz$/)) version = match[1] package_path = @repository.package_file_path(package_name, version) if @repository.package_exists?(package_name, version) [200, {"Content-Type" => "application/octet-stream"}, [File.read(package_path)]] else not_found("Package not found") end else not_found("Invalid package filename") end end end
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#initialize(packages_dir) ⇒ NpmServer
constructor
A new instance of NpmServer.
Constructor Details
#initialize(packages_dir) ⇒ NpmServer
Returns a new instance of NpmServer.
60 61 62 |
# File 'lib/paquette/npm_server.rb', line 60 def initialize(packages_dir) @dir_repository = DirectoryNpmRepository.new(packages_dir) end |
Instance Method Details
#call(env) ⇒ Object
64 65 66 67 68 69 70 71 72 73 |
# File 'lib/paquette/npm_server.rb', line 64 def call(env) request = Rack::Request.new(env) @repository = GatedNpmRepository.new(@dir_repository) { |name:, version: nil| true } if (route = @@routes.match(request)) @@routes.perform_action(route, self, request) else not_found("Not Found") end end |