Class: Her::API

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

Overview

This class is where all HTTP requests are made. Before using Her, you must configure it so it knows where to make those requests. In Rails, this is usually done in ‘config/initializers/her.rb`:

Examples:

$my_api = Her::API.new
$my_api.setup :base_uri => "https://api.example.com"

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#base_uriObject (readonly)



10
11
12
# File 'lib/her/api.rb', line 10

def base_uri
  @base_uri
end

#middlewareObject (readonly)



10
11
12
# File 'lib/her/api.rb', line 10

def middleware
  @middleware
end

Class Method Details

.default_api(attrs = {}) ⇒ Object



19
20
21
# File 'lib/her/api.rb', line 19

def self.default_api(attrs={}) # {{{
  defined?(@@default_api) ? @@default_api : nil
end

.default_middlewareObject



24
25
26
# File 'lib/her/api.rb', line 24

def self.default_middleware # {{{
  [Faraday::Request::UrlEncoded, Faraday::Adapter::NetHttp]
end

.setup(attrs = {}) ⇒ Object

Setup a default API connection



13
14
15
16
# File 'lib/her/api.rb', line 13

def self.setup(attrs={}) # {{{
  @@default_api = new
  @@default_api.setup(attrs)
end

Instance Method Details

#request(attrs = {}) ⇒ Object

Make an HTTP request to the API



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/her/api.rb', line 59

def request(attrs={}) # {{{
  method = attrs.delete(:_method)
  path = attrs.delete(:_path)
  response = @connection.send method do |request|
    if method == :get
      # For GET requests, treat additional parameters as querystring data
      request.url path, attrs
    else
      # For POST, PUT and DELETE requests, treat additional parameters as request body
      request.url path
      request.body = attrs
    end
  end
  response.env[:body]
end

#setup(attrs = {}) ⇒ Object

Setup the API connection

Examples:

module MyAPI
  class ParseResponse
    def on_complete(env)
      json = JSON.parse(env[:body], :symbolize_names => true)
      {
        :data => json,
        :errors => json[:errors] || [],
        :metadata => json[:metadata] || {},
      }
    end
  end
end
Her::API.setup :base_url => "https://api.example.com", :middleware => [MyAPI::ParseResponse, Faraday::Request::UrlEncoded, Faraday::Adapter::NetHttp]


44
45
46
47
48
49
50
# File 'lib/her/api.rb', line 44

def setup(attrs={}) # {{{
  @base_uri = attrs[:base_uri]
  middleware = @middleware = attrs[:middleware] || [Her::Middleware::DefaultParseJSON] + Her::API.default_middleware
  @connection = Faraday.new(:url => @base_uri) do |builder|
    middleware.each { |m| builder.use(m) }
  end
end