Module: Arkenstone::Network

Defined in:
lib/arkenstone/network/network.rb

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Class Method Details

.build_request(url, verb) ⇒ Object

Builds a Net::HTTP request object for the appropriate verb.



54
55
56
57
# File 'lib/arkenstone/network/network.rb', line 54

def build_request(url, verb)
  klass = Kernel.const_get('Net::HTTP').const_get(verb.capitalize)
  klass.new URI(url)
end

.create_http(url) ⇒ Object

Creates the http object used for requests.



46
47
48
49
50
51
# File 'lib/arkenstone/network/network.rb', line 46

def create_http(url)
  uri = URI(url)
  http = Net::HTTP.new(uri.hostname, uri.port)
  http.use_ssl = true if uri.scheme == 'https'
  http
end

.included(base) ⇒ Object



25
26
27
# File 'lib/arkenstone/network/network.rb', line 25

def included(base)
  base.extend Arkenstone::Network::ClassMethods
end

.response_is_success(response) ⇒ Object

Determines if the response was successful. TODO: Refactor this to handle more status codes. TODO: How do we handle redirects (30x)?



41
42
43
# File 'lib/arkenstone/network/network.rb', line 41

def response_is_success(response)
  %w[200 204].include? response.code
end

.send_request(request_env) ⇒ Object

All http requests go through here.



30
31
32
33
34
35
36
# File 'lib/arkenstone/network/network.rb', line 30

def send_request(request_env)
  http = create_http request_env.url
  request = build_request request_env.url, request_env.verb
  set_request_data request, request_env.body
  set_request_headers request, request_env.headers unless request_env.headers.nil?
  http.request request
end

.set_request_data(request, data) ⇒ Object

Fills in the body of a request with the appropriate serialized data.



60
61
62
63
64
# File 'lib/arkenstone/network/network.rb', line 60

def set_request_data(request, data)
  data = data.to_json unless data.instance_of?(String)
  request.body = data
  request.content_type = 'application/json'
end

.set_request_headers(request, headers) ⇒ Object

Sets HTTP headers on the request.



67
68
69
# File 'lib/arkenstone/network/network.rb', line 67

def set_request_headers(request, headers)
  headers.each { |key, val| request.add_field key, val }
end