class HookTheory::Client

Constants

BASE_URI
InvalidRequest
InvalidUsernameOrPassword

Public Class Methods

new(username:, password:) click to toggle source
# File lib/hooktheory/client.rb, line 10
def initialize(username:, password:)
  @username = username
  @password = password
  @headers = { "Accept" => "application/json", "Content-Type" => "application/json" }
  grab_auth
end

Public Instance Methods

nodes(progression: []) click to toggle source
# File lib/hooktheory/client.rb, line 28
def nodes(progression: [])
  response = http_get(
    endpoint: "trends/nodes",
    request_params: {
      cp: progression.join(","),
    })

  response.map { |node| HookTheory::Node.new(node) }
end
songs(progression: [], page: 1) click to toggle source
# File lib/hooktheory/client.rb, line 17
def songs(progression: [], page: 1)
  response = http_get(
    endpoint: "trends/songs",
    request_params: {
      cp: progression.join(","),
      page: page
    })

  response.map { |song| HookTheory::Song.new(song) }
end

Private Instance Methods

grab_auth() click to toggle source
# File lib/hooktheory/client.rb, line 40
def grab_auth
  auth = http_post(endpoint: "users/auth", body: {
    username: @username,
    password: @password
  })

  raise InvalidUsernameOrPassword.new("Must provide valid credentials") if auth["activkey"].nil?
  @headers.merge!("Authorization" => "Bearer #{auth["activkey"]}")
end
http_get(endpoint:, request_params: {}) click to toggle source
# File lib/hooktheory/client.rb, line 50
def http_get(endpoint:, request_params: {})
  begin
    self.class.get(BASE_URI + endpoint,
      headers: @headers,
      query: request_params
    ).parsed_response
  rescue Exception => e
    []
  end
end
http_post(endpoint:, request_params: {}, body: {}) click to toggle source
# File lib/hooktheory/client.rb, line 61
def http_post(endpoint:, request_params: {}, body: {})
  begin
    self.class.post(BASE_URI + endpoint,
      headers: @headers,
      query: request_params,
      body: body.to_json
    ).parsed_response
  rescue Exception => e
    []
  end
end