Class: APIReaper::Requester

Inherits:
Object
  • Object
show all
Defined in:
lib/apireaper/requester.rb

Overview

This is a Net HTTP requester class.

Instance Method Summary collapse

Constructor Details

#initialize(method, url, opts) ⇒ Requester

Class constructor method



26
27
28
29
30
31
32
33
# File 'lib/apireaper/requester.rb', line 26

def initialize(method, url, opts)
  @method = method
  @uri = URI.parse(url)
  @opts = opts
  @http = Net::HTTP.new(@uri.host, @uri.port)
  @http.use_ssl = @uri.scheme.eql?('https')
  @http.verify_mode = OpenSSL::SSL::VERIFY_NONE if opts['insecure']
end

Instance Method Details

#basic_auth(request) ⇒ Object

Set the authentication data



42
43
44
45
46
47
# File 'lib/apireaper/requester.rb', line 42

def basic_auth(request)
  unless @opts['user'].nil? || @opts['password'].nil?
    request.basic_auth(@opts['user'], @opts['password'])
  end
  request
end

#exit_with_error(errno, message) ⇒ Object

Exit with the specified errno and message



36
37
38
39
# File 'lib/apireaper/requester.rb', line 36

def exit_with_error(errno, message)
  puts message unless @opts['quiet']
  exit errno
end

#format_data(request) ⇒ Object

Select the right data type



50
51
52
53
54
55
# File 'lib/apireaper/requester.rb', line 50

def format_data(request)
  return request if @opts['data'].nil?
  if json?(@opts['data']) then format_json_data(request)
  else format_www_form_data(request)
  end
end

#format_header(request) ⇒ Object

Set the headers given as argument



58
59
60
61
62
63
64
65
66
# File 'lib/apireaper/requester.rb', line 58

def format_header(request)
  unless @opts['header'].nil?
    @opts['header'].split(',').each do |h|
      (key, value) = h.split(':')
      request[key] = value
    end
  end
  request
end

#format_json_data(request) ⇒ Object

Set json data as request body



69
70
71
72
# File 'lib/apireaper/requester.rb', line 69

def format_json_data(request)
  request.body = @opts['data']
  request
end

#format_www_form_data(request) ⇒ Object

Split the data string into a hash



75
76
77
78
# File 'lib/apireaper/requester.rb', line 75

def format_www_form_data(request)
  request.set_form_data(CGI.parse(@opts['data']))
  request
end

#json?(str) ⇒ Boolean

Check if the data string is a well formated json

Returns:

  • (Boolean)


81
82
83
84
85
86
# File 'lib/apireaper/requester.rb', line 81

def json?(str)
  JSON.parse(str)
  true
rescue JSON::ParserError
  false
end

#requestObject

Select request method



118
119
120
121
122
123
124
125
126
# File 'lib/apireaper/requester.rb', line 118

def request
  case @method.upcase
  when 'DELETE' then rest_request_delete
  when 'GET' then rest_request_get
  when 'POST' then rest_request_post
  when 'PUT' then rest_request_put
  else raise "#{@method.upcase} is an unknown method"
  end
end

#rest_request_deleteObject

DELETE method



89
90
91
92
# File 'lib/apireaper/requester.rb', line 89

def rest_request_delete
  exit_with_error(3, 'DELETE is not yet implemented')
  # TODO
end

#rest_request_getObject

GET method



95
96
97
98
99
100
# File 'lib/apireaper/requester.rb', line 95

def rest_request_get
  req = Net::HTTP::Get.new(@uri.request_uri)
  req = format_header(req)
  req = basic_auth(req)
  @http.request(req)
end

#rest_request_postObject

POST method



103
104
105
106
107
108
109
# File 'lib/apireaper/requester.rb', line 103

def rest_request_post
  req = Net::HTTP::Post.new(@uri.request_uri)
  req = format_data(req)
  req = format_header(req)
  req = basic_auth(req)
  @http.request(req)
end

#rest_request_putObject

PUT method



112
113
114
115
# File 'lib/apireaper/requester.rb', line 112

def rest_request_put
  exit_with_error(3, 'PUT is not yet implemented')
  # TODO
end