class GH::Remote
Public: This class deals with HTTP requests to Github. It is the base Wrapper
you always want to use. Note that it is usually used implicitely by other wrapper classes if not specified.
Attributes
api_host[R]
connection[R]
headers[R]
prefix[R]
Public Instance Methods
delete(key, body = nil)
click to toggle source
Public: …
# File lib/gh/remote.rb, line 100 def delete(key, body = nil) frontend.request(:delete, key, body) end
fetch_resource(key)
click to toggle source
Internal: …
# File lib/gh/remote.rb, line 63 def fetch_resource(key) frontend.http(:get, frontend.path_for(key), headers) end
full_url(key)
click to toggle source
# File lib/gh/remote.rb, line 133 def full_url(key) uri = Addressable::URI.parse(key) uri.path = File.join(api_host.path, uri.path) unless uri.absolute? or uri.path.start_with?(api_host.path) uri = api_host + uri raise ArgumentError, "URI out of scope: #{key}" if uri.host != api_host.host uri end
generate_response(key, response)
click to toggle source
Internal: …
# File lib/gh/remote.rb, line 68 def generate_response(key, response) body, headers = response.body, response.headers url = response.env[:url] if response.respond_to? :env and response.env url = response.url if response.respond_to?(:url) url = frontend.full_url(key) if url.to_s.empty? modify(body, headers, url) end
head(key)
click to toggle source
Public: …
# File lib/gh/remote.rb, line 105 def head(key) frontend.request(:head, key) end
http(verb, url, headers = {}, &block)
click to toggle source
Internal: …
# File lib/gh/remote.rb, line 77 def http(verb, url, headers = {}, &block) connection.run_request(verb, url, nil, headers, &block) rescue Exception => error raise Error.new(error, nil, :verb => verb, :url => url, :headers => headers) end
in_parallel()
click to toggle source
Public: …
# File lib/gh/remote.rb, line 129 def in_parallel raise RuntimeError, "use GH::Parallel middleware for #in_parallel support" end
inspect()
click to toggle source
Public: …
# File lib/gh/remote.rb, line 58 def inspect "#<#{self.class}: #{api_host}>" end
load(data)
click to toggle source
Public: …
# File lib/gh/remote.rb, line 124 def load(data) modify(data) end
patch(key, body)
click to toggle source
Public: …
# File lib/gh/remote.rb, line 110 def patch(key, body) frontend.request(:patch, key, body) end
path_for(key)
click to toggle source
# File lib/gh/remote.rb, line 141 def path_for(key) frontend.full_url(key).request_uri end
post(key, body)
click to toggle source
Public: …
# File lib/gh/remote.rb, line 95 def post(key, body) frontend.request(:post, key, body) end
put(key, body)
click to toggle source
Public: …
# File lib/gh/remote.rb, line 115 def put(key, body) frontend.request(:put, key, body) end
request(verb, key, body = nil)
click to toggle source
Internal: …
# File lib/gh/remote.rb, line 84 def request(verb, key, body = nil) response = frontend.http(verb, path_for(key), headers) do |req| req.body = Response.new(body).to_s if body end frontend.generate_response(key, response) rescue GH::Error => error error.info[:payload] = Response.new(body).to_s if body raise error end
reset()
click to toggle source
Public: …
# File lib/gh/remote.rb, line 120 def reset end
setup(api_host, options)
click to toggle source
Public: Generates a new Remote
instance.
api_host
- HTTP host to send requests to, has to include schema (https or http) options - Hash with configuration options:
:token - OAuth token to use (optional). :username - Github user used for login (optional). :password - Github password used for login (optional). :origin - Value of the origin request header (optional). :headers - HTTP headers to be send on every request (optional).
It is highly recommended to set origin, but not to set headers. If you set the username, you should also set the password.
# File lib/gh/remote.rb, line 22 def setup(api_host, options) token, username, password = options.values_at :token, :username, :password api_host = api_host.api_host if api_host.respond_to? :api_host @api_host = Addressable::URI.parse(api_host) @headers = { "User-Agent" => options[:user_agent] || "GH/#{GH::VERSION}", "Accept" => options[:accept] || "application/vnd.github.v3+json", "Accept-Charset" => "utf-8", } @headers.merge! options[:headers] if options[:headers] @headers['Origin'] = options[:origin] if options[:origin] @prefix = "" @prefix << "#{token}@" if token @prefix << "#{username}:#{password}@" if username and password @prefix << @api_host.host faraday_options = {:url => api_host} faraday_options[:ssl] = options[:ssl] if options[:ssl] faraday_options.merge! options[:faraday_options] if options[:faraday_options] @connection = Faraday.new(faraday_options) do |builder| builder.request(:authorization, :token, token) if token builder.request(:basic_auth, username, password) if username and password builder.request(:retry) builder.response(:raise_error) if defined? FaradayMiddleware::Instrumentation builder.use :instrumentation end builder.adapter(:net_http) end end
Private Instance Methods
identifier(key)
click to toggle source
# File lib/gh/remote.rb, line 147 def identifier(key) path_for(key) end
modify(body, headers = {}, url = nil)
click to toggle source
# File lib/gh/remote.rb, line 151 def modify(body, headers = {}, url = nil) return body if body.is_a? Response Response.new(body, headers, url) end