Class: ElectionBuddy::Resource

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

Overview

Base class for API resources

Examples:

class VoterListResource < Resource
  def validate(vote_id)
    post_request("/api/v2/votes/voters/validations", vote_id: vote_id)
  end
end

Direct Known Subclasses

VoterListResource

Instance Method Summary collapse

Constructor Details

#initialize(connection) ⇒ Resource

Returns a new instance of Resource.

Parameters:

  • connection (Object)

    The HTTP client connection



15
16
17
# File 'lib/election_buddy/resource.rb', line 15

def initialize(connection)
  @connection = connection
end

Instance Method Details

#error_messages(status) ⇒ Object (private)



58
59
60
61
62
63
64
65
66
67
68
# File 'lib/election_buddy/resource.rb', line 58

def error_messages(status)
  messages = {
    400 => "Malformed request",
    401 => "Invalid authentication credentials",
    403 => "Unauthorized",
    404 => "Resource not found",
    429 => "Your request exceeded the API rate limit",
    500 => "We were unable to perform the request due to server-side problems"
  }
  messages.fetch(status, "Unexpected status code.")
end

#get_request(url, params = {}, headers = {}, &block) ⇒ Hash

Makes a GET request to the API

Parameters:

  • url (String)

    The API endpoint URL

  • params (Hash) (defaults to: {})

    Query parameters

  • headers (Hash) (defaults to: {})

    Request headers

Returns:

  • (Hash)

    The API response



25
26
27
# File 'lib/election_buddy/resource.rb', line 25

def get_request(url, params = {}, headers = {}, &block)
  handle_response(@connection.get(url, params, headers, &block))
end

#handle_response(response) ⇒ Object (private)



41
42
43
44
45
# File 'lib/election_buddy/resource.rb', line 41

def handle_response(response)
  return response.body if response.success? || [422, 423].include?(response.status)

  raise_error(response.status, ErrorFormatter.format(response.body))
end

#post_request(url, body = {}, headers = {}, &block) ⇒ Hash

Makes a POST request to the API

Parameters:

  • url (String)

    The API endpoint URL

  • body (Hash) (defaults to: {})

    Request body parameters

  • headers (Hash) (defaults to: {})

    Request headers

Returns:

  • (Hash)

    The API response



35
36
37
# File 'lib/election_buddy/resource.rb', line 35

def post_request(url, body = {}, headers = {}, &block)
  handle_response(@connection.post(url, body, headers, &block))
end

#raise_error(status, formatted_error) ⇒ Object (private)

Raises:



47
48
49
50
51
52
53
54
55
56
# File 'lib/election_buddy/resource.rb', line 47

def raise_error(status, formatted_error)
  base_message = error_messages(status)
  message = if formatted_error
              "Error #{status}: #{base_message} - #{formatted_error}."
            else
              "Error #{status}: #{base_message}."
            end

  raise Error, message
end