Class: Forward::Api::Resource

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

Direct Known Subclasses

ClientLog, Tunnel, TunnelKey, User

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(action = nil) ⇒ Resource

Returns a new instance of Resource.



14
15
16
17
18
19
20
# File 'lib/forward/api/resource.rb', line 14

def initialize(action = nil)
  @action           = action
  @http             = Net::HTTP.new(Forward::Api.uri.host, Forward::Api.uri.port)
  @http.use_ssl     = Forward::Api.ssl?
  @http.verify_mode = OpenSSL::SSL::VERIFY_PEER
  @http.ca_file     = File.expand_path('../../../../forwardhq.crt', __FILE__)
end

Instance Attribute Details

#httpObject

Returns the value of attribute http.



11
12
13
# File 'lib/forward/api/resource.rb', line 11

def http
  @http
end

#uriObject

Returns the value of attribute uri.



12
13
14
# File 'lib/forward/api/resource.rb', line 12

def uri
  @uri
end

Instance Method Details

#add_headers!Object



51
52
53
54
55
56
57
58
# File 'lib/forward/api/resource.rb', line 51

def add_headers!
  if Forward::Api.token
    @request['Authorization'] = "Token token=#{Forward::Api.token}"
  end

  @request['Content-Type'] = 'application/json'
  @request['Accept']       = 'application/json'
end

#build_request(method, params = {}) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/forward/api/resource.rb', line 33

def build_request(method, params = {})
  @method = method

  case @method
  when :get
    @request = Net::HTTP::Get.new(uri)
  when :post
    @request = Net::HTTP::Post.new(uri)
    @request.body = params.to_json unless params.empty?
  when :put
    @request = Net::HTTP::Put.new(uri)
    @request.body = params.to_json unless params.empty?
  when :delete
    @request = Net::HTTP::Delete.new(uri)
    @request.body = params.to_json unless params.empty?
  end
end

#delete(params = {}) ⇒ Object



72
73
74
# File 'lib/forward/api/resource.rb', line 72

def delete(params = {})
  @response = request(:delete, params)
end

#get(params = {}) ⇒ Object



60
61
62
# File 'lib/forward/api/resource.rb', line 60

def get(params = {})
  @response = request(:get, params)
end

#parse_response(response) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/forward/api/resource.rb', line 76

def parse_response(response)
  log(:debug, "Response: [#{response.code}] `#{response.body}'")
  code = response.code.to_i

  if code == 404
    raise ResourceNotFound
  elsif ![ 200, 422, 401 ].include? code
    raise BadResponse, "response code was: #{response.code}"
  elsif response['content-type'] !~ /^application\/json/
    raise BadResponse, "response was not JSON, unable to parse"
  end

  json = JSON.parse(response.body)

  if json.is_a? Hash
    json.symbolize_keys!
    raise ResourceError.new(code, @action, json) if code != 200 
  end

  json
end

#post(params = {}) ⇒ Object



64
65
66
# File 'lib/forward/api/resource.rb', line 64

def post(params = {})
  @response = request(:post, params)
end

#put(params = {}) ⇒ Object



68
69
70
# File 'lib/forward/api/resource.rb', line 68

def put(params = {})
  @response = request(:put, params)
end

#request(method = :get, params = {}) ⇒ Object



22
23
24
25
26
27
28
29
30
31
# File 'lib/forward/api/resource.rb', line 22

def request(method = :get, params = {})
  log(:debug, "Request: [#{method.to_s.upcase}] for `#{http.address}:#{http.port}#{uri}'")
  log(:debug, "Request: params `#{params.reject { |k,v| k == :password }.inspect }'")
  build_request(method, params)
  add_headers!

  response = @http.request(@request)

  parse_response(response)
end