Sha256: d0e0640bff61672b7d09a1cb820fb5c6304fb06842a7d2eef180e552beaefe01

Contents?: true

Size: 1.87 KB

Versions: 8

Compression:

Stored size: 1.87 KB

Contents

require 'sinatra/base'
require 'stickler/middleware'
require 'stickler/middleware/local'
require 'stickler/repository/local'

module Stickler::Middleware
  #
  # A rack middleware for implementing the gemcutter api
  #
  # == Options
  #
  # <b>:serve_indexes</b>::   the same as the Index middleware
  #
  # <b>:repo_root</b>::       the same as the Local middleware
  #
  # The <b>:repo_root</b> option is required.
  #
  # == Usage
  #
  #   use Stickler::Middleware::Gemcutter, :repo_root => '/path/to/repository'
  #
  #   use Stickler::Middleware::Gemcutter, :repo_root => '/path/to/repository',
  #                                        :serve_indexes => true
  #
  #
  class Gemcutter < ::Stickler::Middleware::Local

    def initialize( app = nil, options = {}  )
      super( app, options )
    end

    # gemcutter push
    post '/api/v1/gems' do
      begin
        spec = @repo.add( request.body )
        logger.info( "Pushed #{spec.full_name}" )
        return spec.to_s
      rescue Stickler::Repository::Error => e
        logger.error( "Error adding #{spec.full_name} to repo : #{e}" )
        error( 500, "Error adding gem to repo: #{e}" )
      end
    end

    # gemcutter yank
    delete '/api/v1/gems/yank' do
      spec = Stickler::SpecLite.new( params[:gem_name], params[:version] )
      if s = @repo.yank( spec ) then
        logger.info( "Yanked #{spec.full_name}" )
        return "Yanked #{spec.full_name}"
      else
        logger.warn( "Did not Yank #{spec.full_name}" )
        error( 503, "Did not Yank #{spec.to_s}" )
      end
    end

    # direct delete
    delete %r{\A/gems/((.*?)-([0-9.]+)(-.*?)?)\.gem\Z} do
      full_name, name, version, platform = *params[:captures]
      spec = Stickler::SpecLite.new( name, version, platform )
      @repo.delete( spec )
      logger.info( "Deleted #{spec.full_name}" )
      return "deleted gem #{spec.full_name}"
    end
  end
end


Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
stickler-2.2.4 lib/stickler/middleware/gemcutter.rb
stickler-2.2.3 lib/stickler/middleware/gemcutter.rb
stickler-2.2.2 lib/stickler/middleware/gemcutter.rb
stickler-2.1.4 lib/stickler/middleware/gemcutter.rb
stickler-2.1.3 lib/stickler/middleware/gemcutter.rb
stickler-2.1.2 lib/stickler/middleware/gemcutter.rb
stickler-2.1.1 lib/stickler/middleware/gemcutter.rb
stickler-2.1.0 lib/stickler/middleware/gemcutter.rb