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`:

Constant Summary collapse

FARADAY_OPTIONS =

Constants

[:request, :proxy, :ssl, :builder, :url, :parallel_manager, :params, :headers, :builder_class].freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*args, &blk) ⇒ API

Create a new API object. This is useful to create multiple APIs and use them with the ‘uses_api` method. If your application uses only one API, you should use Her::API.setup to configure the default API

Examples:

Setting up a new API

api = Her::API.new :url => "https://api.example" do |connection|
  connection.use Faraday::Request::UrlEncoded
  connection.use Her::Middleware::DefaultParseJSON
end

class User
  uses_api api
end


29
30
31
# File 'lib/her/api.rb', line 29

def initialize(*args, &blk)
  setup(*args, &blk)
end

Class Method Details

.setup(opts = {}, &block) ⇒ Object

Setup a default API connection. Accepted arguments and options are the same as #setup.



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

def self.setup(opts = {}, &block)
  @default_api = new(opts, &block)
end

Instance Method Details

#setup(opts = {}, &blk) ⇒ Object

Setup the API connection.

Examples:

Setting up the default API connection

Her::API.setup :url => "https://api.example"

A custom middleware added to the default list

class MyAuthentication < Faraday::Middleware
  def call(env)
    env[:request_headers]["X-API-Token"] = "bb2b2dd75413d32c1ac421d39e95b978d1819ff611f68fc2fdd5c8b9c7331192"
    @app.call(env)
  end
end
Her::API.setup :url => "https://api.example.com" do |connection|
  connection.use Faraday::Request::UrlEncoded
  connection.use Her::Middleware::DefaultParseJSON
  connection.use MyAuthentication
  connection.use Faraday::Adapter::NetHttp
end

A custom parse middleware

class MyCustomParser < Faraday::Response::Middleware
  def on_complete(env)
    json = JSON.parse(env[:body], :symbolize_names => true)
    errors = json.delete(:errors) || {}
     = json.delete(:metadata) || []
    env[:body] = { :data => json, :errors => errors, :metadata =>  }
  end
end
Her::API.setup :url => "https://api.example.com" do |connection|
  connection.use Faraday::Request::UrlEncoded
  connection.use MyCustomParser
  connection.use Faraday::Adapter::NetHttp
end

Parameters:

  • opts (Hash) (defaults to: {})

    the Faraday options

Options Hash (opts):

Returns:

  • Faraday::Connection



72
73
74
75
76
77
78
79
80
81
# File 'lib/her/api.rb', line 72

def setup(opts = {}, &blk)
  opts[:url] = opts.delete(:base_uri) if opts.include?(:base_uri) # Support legacy :base_uri option
  @options = opts

  faraday_options = @options.select { |key, _| FARADAY_OPTIONS.include?(key.to_sym) }
  @connection = Faraday.new(faraday_options) do |connection|
    yield connection if block_given?
  end
  self
end