module Github::Connection

def caching?

def caching?
  !@connection.nil?
end

def clear_cache

def clear_cache
  @connection = nil
end

def connection(api, options = {})

Returns a Fraday::Connection object

Creates http connection
def connection(api, options = {})
  connection_options = default_options(options)
  clear_cache unless options.empty?
  connection_options.merge!(builder: stack(options.merge!(api: api)))
  connection_options.deep_merge!(options[:connection_options]) if options[:connection_options]
  if ENV['DEBUG']
    p "Connection options : \n"
    pp connection_options
  end
  @connection ||= Faraday.new(connection_options)
end

def default_options(options = {})

def default_options(options = {})
  accept = options[:headers] && options[:headers][:accept]
  {
    headers: {
      ACCEPT         =>  accept || 'application/vnd.github.v3+json,' \
                        'application/vnd.github.beta+json;q=0.5,' \
                        'application/json;q=0.1',
      ACCEPT_CHARSET => 'utf-8',
      USER_AGENT     => options[:user_agent]
    },
    ssl: options[:ssl],
    url: options[:endpoint]
  }.tap do |h|
    if type = options[:headers] && options[:headers][CONTENT_TYPE]
      h[:headers][CONTENT_TYPE] = type
    end
    h
  end
end

def stack(options = {})

Other tags:
    Api: - public
def stack(options = {})
  @stack ||= begin
    builder_class = defined?(Faraday::RackBuilder) ? Faraday::RackBuilder : Faraday::Builder
    builder_class.new(&Github.default_middleware(options))
  end
end