Class: Sensit::HttpClient::HttpClient

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

Overview

Main HttpClient which is used by Api classes

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(auth = {}, options = {}) ⇒ HttpClient

Returns a new instance of HttpClient.



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/sensit/http_client.rb', line 16

def initialize(auth = {}, options = {})

  if auth.is_a? String
    auth = { :http_header => auth }
  end

  @options = {
    :base => "http://sensit.herokuapp.com/api",
    :user_agent => "alpaca/0.2.0 (https://github.com/pksunkara/alpaca)"
  }

  @options.update options

  @headers = {
    "user-agent" => @options[:user_agent]
  }

  if @options.has_key? :headers
    @headers.update Hash[@options[:headers].map { |k, v| [k.downcase, v] }]
    @options.delete :headers
  end

  @client = Faraday.new @options[:base] do |conn|
    conn.use Sensit::HttpClient::AuthHandler, auth
    conn.use Sensit::HttpClient::ErrorHandler

    conn.adapter Faraday.default_adapter
  end
end

Instance Attribute Details

#headersObject

Returns the value of attribute headers.



14
15
16
# File 'lib/sensit/http_client.rb', line 14

def headers
  @headers
end

#optionsObject

Returns the value of attribute options.



14
15
16
# File 'lib/sensit/http_client.rb', line 14

def options
  @options
end

Instance Method Details

#create_request(method, path, options) ⇒ Object

Creating a request with the given arguments

If api_version is set, appends it immediately after host



94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/sensit/http_client.rb', line 94

def create_request(method, path, options)
  version = options.has_key?(:api_version) ? "/#{options[:api_version]}" : ""

  path = "#{version}#{path}"

  instance_eval <<-RUBY, __FILE__, __LINE__ + 1
    @client.#{method} path do |req|
      req.body = options[:body]
      req.headers.update(options[:headers])
      req.params.update(options[:query]) if options[:query]
    end
  RUBY
end

#delete(path, body = {}, options = {}) ⇒ Object



58
59
60
# File 'lib/sensit/http_client.rb', line 58

def delete(path, body = {}, options = {})
  request path, body, "delete", options
end

#get(path, params = {}, options = {}) ⇒ Object



46
47
48
# File 'lib/sensit/http_client.rb', line 46

def get(path, params = {}, options = {})
  request path, nil, "get", options.merge({ :query => params })
end

#get_body(response) ⇒ Object

Get response body in correct format



109
110
111
# File 'lib/sensit/http_client.rb', line 109

def get_body(response)
  Sensit::HttpClient::ResponseHandler.get_body response
end

#patch(path, body = {}, options = {}) ⇒ Object



54
55
56
# File 'lib/sensit/http_client.rb', line 54

def patch(path, body = {}, options = {})
  request path, body, "patch", options
end

#post(path, body = {}, options = {}) ⇒ Object



50
51
52
# File 'lib/sensit/http_client.rb', line 50

def post(path, body = {}, options = {})
  request path, body, "post", options
end

#put(path, body = {}, options = {}) ⇒ Object



62
63
64
# File 'lib/sensit/http_client.rb', line 62

def put(path, body = {}, options = {})
  request path, body, "put", options
end

#request(path, body, method, options) ⇒ Object

Intermediate function which does three main things

  • Transforms the body of request into correct format

  • Creates the requests with give parameters

  • Returns response body after parsing it into correct format



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/sensit/http_client.rb', line 71

def request(path, body, method, options)
  options = @options.merge options

  options[:headers] = options[:headers] || {}
  options[:headers] = @headers.merge Hash[options[:headers].map { |k, v| [k.downcase, v] }]

  options[:body] = body

  if method != "get"
    options[:body] = options[:body] || {}
    options = set_body options
  end

  response = create_request method, path, options

  body = get_body response

  Sensit::HttpClient::Response.new body, response.status, response.headers
end

#set_body(options) ⇒ Object

Set request body in correct format



114
115
116
# File 'lib/sensit/http_client.rb', line 114

def set_body(options)
  Sensit::HttpClient::RequestHandler.set_body options
end