Class: GeminaboxClient

Inherits:
Object
  • Object
show all
Defined in:
lib/geminabox_client.rb

Defined Under Namespace

Modules: GemLocator Classes: Error

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(url) ⇒ GeminaboxClient

Returns a new instance of GeminaboxClient.



7
8
9
10
11
12
13
14
15
# File 'lib/geminabox_client.rb', line 7

def initialize(url)
  extract_username_and_password_from_url!(url)
  @http_client = HTTPClient.new
  @http_client.set_auth(url_for(:upload), @username, @password) if @username or @password
  @http_client.www_auth.basic_auth.challenge(url_for(:upload)) # Workaround: https://github.com/nahi/httpclient/issues/63
  @http_client.ssl_config.set_default_paths
  @http_client.send_timeout = 0
  @http_client.receive_timeout = 0
end

Instance Attribute Details

#http_clientObject (readonly)

Returns the value of attribute http_client.



5
6
7
# File 'lib/geminabox_client.rb', line 5

def http_client
  @http_client
end

#urlObject (readonly)

Returns the value of attribute url.



5
6
7
# File 'lib/geminabox_client.rb', line 5

def url
  @url
end

Instance Method Details

#extract_username_and_password_from_url!(url) ⇒ Object



17
18
19
20
21
22
23
# File 'lib/geminabox_client.rb', line 17

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

#push(gemfile, options = {}) ⇒ Object



29
30
31
32
33
34
35
36
37
# File 'lib/geminabox_client.rb', line 29

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.code} received)\n\n#{response.body}"
  end
end

#url_for(path) ⇒ Object



25
26
27
# File 'lib/geminabox_client.rb', line 25

def url_for(path)
  url + path.to_s
end