Class: AddonsApi::Client::Wrapper

Inherits:
Object
  • Object
show all
Defined in:
lib/addons-api/client.rb

Overview

Addons.io API wrapper

Constant Summary collapse

BASE_URL =
%(https://api.addons.io/).freeze
API_VERSION =
%(2022-12-01).freeze
HEADERS =
{
  'X-Addons-Api-Version' => API_VERSION,
  'Accept'          => 'application/json',
  'Content-Type'    => 'application/json',
  'User-Agent'      => "addons-api/#{AddonsApi::VERSION}"
}.freeze
OPTIONS =
{
  :auto_paginate  => true,
  :headers => {},
  :logger  => Logger.new(STDERR),
  :timeout => 10 # seconds
}.freeze

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Wrapper



55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/addons-api/client.rb', line 55

def initialize(options={})
  @options = OPTIONS.merge(options)

  @token = @options.delete(:token)
  @base_url = @options.delete(:base_url) || BASE_URL

  @options[:headers] = HEADERS
  if @token
    @options[:headers] = @options[:headers].merge({
      'Authorization' => "Bearer #{@token}",
    }).merge(@options[:headers])
  end
end

Instance Method Details

#addon_serviceObject

AddonService resource



104
105
106
# File 'lib/addons-api/client.rb', line 104

def addon_service
  @addon_service_resource ||= AddonService.new(self)
end

#oauthObject

OAuth resource



99
100
101
# File 'lib/addons-api/client.rb', line 99

def oauth
  @oauth_resource ||= OAuth.new(self)
end

#request(method, path, body: {}, query: {}, base_url: nil) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/addons-api/client.rb', line 69

def request(method, path, body: {}, query: {}, base_url: nil)

  base_url = base_url || @base_url
  url = "#{base_url.chomp('/')}/#{path}"
  query_string = URI.encode_www_form(query)

  unless query_string.empty?
    if url.include?('?')
      url = url + '&' + query_string
    else
      url = url + '?' + query_string
    end
  end

  # TODO: How do we paginate these requests??
  result = RestClient::Request.execute(
    method:   method, 
    url:      url,
    params:   query,
    payload:  Oj.dump(body, mode: :compat),
    headers:  @options[:headers],
    timeout:  @options[:timeout],
    log:      @options[:logger]
  )
  Oj.load(result.body, symbol_keys: true)
rescue RestClient::BadRequest => e
  raise
end

#teamObject

Team resource



109
110
111
# File 'lib/addons-api/client.rb', line 109

def team
  @team_resource ||= Team.new(self)
end