class LessonlyApi::Utils::Client

Constants

ERRORS_MAPPING

Attributes

api_key[R]
domain[R]
logger[R]
root_url[R]

Public Class Methods

instance() click to toggle source
# File lib/lessonly_api/utils/client.rb, line 33
def self.instance
  @instance ||= new(LessonlyApi.configuration)
end
new(configuration) click to toggle source
# File lib/lessonly_api/utils/client.rb, line 26
def initialize(configuration)
  @root_url = configuration.root_url
  @domain = configuration.domain
  @api_key = configuration.api_key
  @logger = configuration.logger
end

Public Instance Methods

send_delete(endpoint, params = {}) click to toggle source
# File lib/lessonly_api/utils/client.rb, line 49
def send_delete(endpoint, params = {})
  send_request(:delete, endpoint, params)
end
send_get(endpoint, params = {}) click to toggle source
# File lib/lessonly_api/utils/client.rb, line 37
def send_get(endpoint, params = {})
  send_request(:get, endpoint, params)
end
send_post(endpoint, params = {}) click to toggle source
# File lib/lessonly_api/utils/client.rb, line 41
def send_post(endpoint, params = {})
  send_request(:post, endpoint, params)
end
send_put(endpoint, params = {}) click to toggle source
# File lib/lessonly_api/utils/client.rb, line 45
def send_put(endpoint, params = {})
  send_request(:put, endpoint, params)
end

Private Instance Methods

assign_params(request, method:, params:) click to toggle source
# File lib/lessonly_api/utils/client.rb, line 94
def assign_params(request, method:, params:)
  if method == :get
    request.params = params
  else
    request.body = params.to_json
  end
end
auth_token() click to toggle source
# File lib/lessonly_api/utils/client.rb, line 74
def auth_token
  Base64.strict_encode64("#{domain}:#{api_key}")
end
connection() click to toggle source
# File lib/lessonly_api/utils/client.rb, line 55
def connection
  Faraday.new(root_url, http_options) do |faraday|
    faraday.request :url_encoded
    faraday.response :logger, logger, headers: true, bodies: true

    faraday.adapter :httpclient
  end
end
http_options() click to toggle source
# File lib/lessonly_api/utils/client.rb, line 64
def http_options
  {
    headers: {
      'Accept' => 'application/json',
      'Content-Type' => 'application/json',
      'Authorization' => auth_token
    }
  }
end
parse_json(data) click to toggle source
# File lib/lessonly_api/utils/client.rb, line 123
def parse_json(data)
  JSON.parse(data)
rescue JSON::ParserError => e
  raise LessonlyApi::Errors::InvalidJson, e.message
end
process_response(response) click to toggle source
# File lib/lessonly_api/utils/client.rb, line 102
def process_response(response)
  return process_success(response) if response.status >= 200 && response.status < 300

  error = ERRORS_MAPPING[response.status] || LessonlyApi::Errors::ApiError
  raise(error, parse_json(response.body))
end
process_success(response) click to toggle source
# File lib/lessonly_api/utils/client.rb, line 109
def process_success(response)
  return {} if response.body.empty?

  parse_json(response.body)
end
send_request(method, endpoint, params) click to toggle source
# File lib/lessonly_api/utils/client.rb, line 78
def send_request(method, endpoint, params)
  response = with_tag do
    connection.public_send(method) do |request|
      # TODO: i.kamenko refactor it
      request.url "/api/v1.1/#{endpoint}"
      assign_params(request, method: method, params: params)
    end
  end

  process_response(response)
rescue Faraday::TimeoutError => e
  raise LessonlyApi::Errors::ApiTimeoutError, e.message
rescue Faraday::Error => e
  raise LessonlyApi::Errors::Base, e.message
end
with_tag() { || ... } click to toggle source
# File lib/lessonly_api/utils/client.rb, line 115
def with_tag
  if logger&.respond_to?(:tagged)
    logger.tagged('LESSONLY API') { yield }
  else
    yield
  end
end