Class: DiscordRDA::RestClient

Inherits:
Object
  • Object
show all
Defined in:
lib/discord_rda/connection/rest_client.rb

Overview

HTTP client for Discord REST API. Handles requests, rate limiting, and response parsing.

Defined Under Namespace

Classes: APIError, BadRequestError, ForbiddenError, NotFoundError, RateLimitedError, ServerError, UnauthorizedError

Constant Summary collapse

API_BASE =

Discord API base URL

'https://discord.com/api/v10'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config, logger) ⇒ RestClient

Initialize the REST client

Parameters:



29
30
31
32
33
34
35
# File 'lib/discord_rda/connection/rest_client.rb', line 29

def initialize(config, logger)
  @config = config
  @logger = logger
  @rate_limiter = RateLimiter.new(logger: logger)
  @internet = nil
  @mutex = Mutex.new
end

Instance Attribute Details

#configConfiguration (readonly)

Returns Configuration instance.

Returns:



18
19
20
# File 'lib/discord_rda/connection/rest_client.rb', line 18

def config
  @config
end

#loggerLogger (readonly)

Returns Logger instance.

Returns:

  • (Logger)

    Logger instance



21
22
23
# File 'lib/discord_rda/connection/rest_client.rb', line 21

def logger
  @logger
end

#rate_limiterRateLimiter (readonly)

Returns Rate limiter instance.

Returns:



24
25
26
# File 'lib/discord_rda/connection/rest_client.rb', line 24

def rate_limiter
  @rate_limiter
end

Instance Method Details

#delete(path, params: {}, headers: {}) ⇒ Hash

Make a DELETE request

Parameters:

  • path (String)

    API path

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

    Query parameters

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

    Additional headers

Returns:

  • (Hash)

    Response data



109
110
111
# File 'lib/discord_rda/connection/rest_client.rb', line 109

def delete(path, params: {}, headers: {})
  request(:delete, path, params: params, headers: headers)
end

#get(path, params: {}, headers: {}) ⇒ Hash

Make a GET request

Parameters:

  • path (String)

    API path

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

    Query parameters

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

    Additional headers

Returns:

  • (Hash)

    Response data



55
56
57
# File 'lib/discord_rda/connection/rest_client.rb', line 55

def get(path, params: {}, headers: {})
  request(:get, path, params: params, headers: headers)
end

#patch(path, body: nil, params: {}, headers: {}, files: nil) ⇒ Hash

Make a PATCH request

Parameters:

  • path (String)

    API path

  • body (Object) (defaults to: nil)

    Request body

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

    Query parameters

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

    Additional headers

  • files (Hash) (defaults to: nil)

    Files to upload (field_name => File or IO)

Returns:

  • (Hash)

    Response data



96
97
98
99
100
101
102
# File 'lib/discord_rda/connection/rest_client.rb', line 96

def patch(path, body: nil, params: {}, headers: {}, files: nil)
  if files
    request_multipart(:patch, path, body: body, files: files, params: params, headers: headers)
  else
    request(:patch, path, body: body, params: params, headers: headers)
  end
end

#post(path, body: nil, params: {}, headers: {}, files: nil) ⇒ Hash

Make a POST request

Parameters:

  • path (String)

    API path

  • body (Object) (defaults to: nil)

    Request body

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

    Query parameters

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

    Additional headers

  • files (Hash) (defaults to: nil)

    Files to upload (field_name => File or IO)

Returns:

  • (Hash)

    Response data



66
67
68
69
70
71
72
# File 'lib/discord_rda/connection/rest_client.rb', line 66

def post(path, body: nil, params: {}, headers: {}, files: nil)
  if files
    request_multipart(:post, path, body: body, files: files, params: params, headers: headers)
  else
    request(:post, path, body: body, params: params, headers: headers)
  end
end

#put(path, body: nil, params: {}, headers: {}, files: nil) ⇒ Hash

Make a PUT request

Parameters:

  • path (String)

    API path

  • body (Object) (defaults to: nil)

    Request body

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

    Query parameters

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

    Additional headers

  • files (Hash) (defaults to: nil)

    Files to upload (field_name => File or IO)

Returns:

  • (Hash)

    Response data



81
82
83
84
85
86
87
# File 'lib/discord_rda/connection/rest_client.rb', line 81

def put(path, body: nil, params: {}, headers: {}, files: nil)
  if files
    request_multipart(:put, path, body: body, files: files, params: params, headers: headers)
  else
    request(:put, path, body: body, params: params, headers: headers)
  end
end

#startvoid

This method returns an undefined value.

Start the HTTP client



39
40
41
# File 'lib/discord_rda/connection/rest_client.rb', line 39

def start
  @internet = Async::HTTP::Internet.new
end

#stopvoid

This method returns an undefined value.

Stop the HTTP client



45
46
47
48
# File 'lib/discord_rda/connection/rest_client.rb', line 45

def stop
  @internet&.close
  @internet = nil
end