class GeminaboxClient
def extract_username_and_password_from_url!(url)
def extract_username_and_password_from_url!(url) uri = URI.parse(url.to_s) @username, @password = uri.user, uri.password uri.user = uri.password = nil uri.path = uri.path + "/" unless uri.path.end_with?("/") @url = uri.to_s end
def initialize(url)
def initialize(url) extract_username_and_password_from_url!(url) @http_client = Geminabox.http_adapter @http_client.set_auth(url_for(:upload), @username, @password) end
def push(gemfile, options = {})
def push(gemfile, options = {}) response = http_client.post(url_for(:upload), { 'file' => File.open(gemfile, "rb"), 'overwrite' => !!options[:overwrite] }, { 'Accept' => 'text/plain' }) if response.status < 300 response.body else raise GeminaboxClient::Error, "Error (#{response.status} received)\n\n#{response.body}" end end
def url_for(path)
def url_for(path) url + path.to_s end