Sha256: 7c97cfb68f44b7dca77dc9a13c83ab8cc5daff5c2e968d3879a33d386ae7d6f6

Contents?: true

Size: 1.77 KB

Versions: 4

Compression:

Stored size: 1.77 KB

Contents

module Stickler::Middleware
  #
  # A Mirror server keeps gems from one or more upstream gem servers in local
  # repositories.
  #
  # == Options
  #
  # <b>:serve_indexes</b>::   the same as the Index middleware
  #
  # <b>:repo_root</b>::       The path that is to be the root of the
  #                           Repository instance managed by this server.
  #
  # The <b>:repo_root</b> option is required.
  #
  # == Usage
  #
  #   use Stickler::Middleware::Mirror, :repo_root => '/path/to/repository'
  #
  #   use Stickler::Middleware::Mirror, :repo_root => '/path/to/repository',
  #                                     :serve_indexes => true
  #
  class Mirror < ::Stickler::Middleware::Index

    def initialize( app, options = {} )
      super( app )
      @repo = ::Stickler::Repository::Mirror.new( options[:repo_root] )
    end

    def manage( params )
      host = params[:source]
      spec = Stickler::SpecLite.new( params[:name], params[:version], params[:platform] )

      begin
        if spec = @repo.mirror( host , spec ) then
          logger.info("Mirrored #{spec.file_name}")
          status 201
          response["Location"] = "/gems/#{spec.file_name}"
          nil
        else
          logger.info( "Unable to find #{spec.full_name} at #{host}" )
          not_found "Unable to find gem [#{spec.full_name}] at source #{host}"
        end
      rescue ::Stickler::Repository::Mirror::ConflictError => ce
        logger.error( ce.message )
        error( 409, ce.message )
      rescue ::Stickler::Repository::Mirror::NotFoundError => nfe
        logger.error( nfe.message )
        not_found nfe.message
      end
    end

    post '/:source/:name/:version/:platform' do
      manage( params )
    end

    post '/:source/:name/:version' do
      manage( params )
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
stickler-2.4.2 lib/stickler/middleware/mirror.rb
stickler-2.4.1 lib/stickler/middleware/mirror.rb
stickler-2.4.0 lib/stickler/middleware/mirror.rb
stickler-2.3.0 lib/stickler/middleware/mirror.rb