lib/geminabox/server.rb in geminabox-1.1.1 vs lib/geminabox/server.rb in geminabox-1.2.0

- old
+ new

@@ -1,6 +1,7 @@ require 'reentrant_flock' +require 'rubygems/util' module Geminabox class Server < Sinatra::Base enable :static, :methodoverride @@ -144,9 +145,30 @@ File.delete file_path if File.exist? file_path self.class.reindex(:force_rebuild) redirect url("/") end + end + + delete '/api/v1/gems/yank' do + unless self.class.allow_delete? + error_response(403, 'Gem deletion is disabled') + end + + halt 400 unless request.form_data? + + serialize_update do + gems = load_gems.select { |gem| request['gem_name'] == gem.name and + request['version'] == gem.number.version } + halt 404, 'Gem not found' if gems.size == 0 + gems.each do |gem| + gem_path = File.expand_path(File.join(Geminabox.data, 'gems', + "#{gem.gemfile_name}.gem")) + File.delete gem_path if File.exists? gem_path + end + self.class.reindex(:force_rebuild) + return 200, 'Yanked gem and reindexed' + end end post '/upload' do unless self.class.allow_upload? error_response(403, 'Gem uploading is disabled')