Class: Visupedia::HttpClient::HttpClient

Inherits:
Object
  • Object
show all
Defined in:
lib/visupedia/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
# File 'lib/visupedia/http_client.rb', line 16

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

  @options = {
    :base => "https://dev.visupedia.net",
    :user_agent => "alpaca/0.2.1 (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(Visupedia::HttpClient::AuthHandler, auth)
    conn.use(Visupedia::HttpClient::ErrorHandler)

    conn.adapter(Faraday.default_adapter)
  end
end

Instance Attribute Details

#headersObject

Returns the value of attribute headers.



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

def headers
  @headers
end

#optionsObject

Returns the value of attribute options.



14
15
16
# File 'lib/visupedia/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



90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/visupedia/http_client.rb', line 90

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



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

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

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



42
43
44
# File 'lib/visupedia/http_client.rb', line 42

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

#get_body(response) ⇒ Object

Get response body in correct format



105
106
107
# File 'lib/visupedia/http_client.rb', line 105

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

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



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

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

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



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

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

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



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

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



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/visupedia/http_client.rb', line 67

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)

  Visupedia::HttpClient::Response.new(body, response.status, response.headers)
end

#set_body(options) ⇒ Object

Set request body in correct format



110
111
112
# File 'lib/visupedia/http_client.rb', line 110

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