Class: OrionX::API

Inherits:
Object
  • Object
show all
Defined in:
lib/orionx/api.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(api_key: nil, api_secret: nil, api_endpoint: nil, config: nil) ⇒ API

Returns a new instance of API.



9
10
11
12
13
14
15
16
17
18
# File 'lib/orionx/api.rb', line 9

def initialize(api_key: nil, api_secret: nil, api_endpoint: nil, config: nil)
  @config = config || OrionX.configuration
  @api_key = api_key || @config.api_key
  @api_secret = api_secret || @config.api_secret
  @api_endpoint = api_endpoint || @config.api_endpoint
  @logger = @config.logger

  validate_credentials!
  setup_connection
end

Instance Attribute Details

#api_endpoint ⇒ Object (readonly)

Returns the value of attribute api_endpoint.



7
8
9
# File 'lib/orionx/api.rb', line 7

def api_endpoint
  @api_endpoint
end

#api_key ⇒ Object (readonly)

Returns the value of attribute api_key.



7
8
9
# File 'lib/orionx/api.rb', line 7

def api_key
  @api_key
end

#api_secret ⇒ Object (readonly)

Returns the value of attribute api_secret.



7
8
9
# File 'lib/orionx/api.rb', line 7

def api_secret
  @api_secret
end

#config ⇒ Object (readonly)

Returns the value of attribute config.



7
8
9
# File 'lib/orionx/api.rb', line 7

def config
  @config
end

#logger ⇒ Object (readonly)

Returns the value of attribute logger.



7
8
9
# File 'lib/orionx/api.rb', line 7

def logger
  @logger
end

Instance Method Details

#call(query, variables = {}) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/orionx/api.rb', line 20

def call(query, variables = {})
  retries = 0
  begin
    @logger.debug("GraphQL Query: #{query}")
    @logger.debug("Variables: #{variables.inspect}")

    response = execute_request(query, variables)
    handle_response(response)
  rescue Faraday::TimeoutError => e
    @logger.error("Request timeout: #{e.message}")
    raise OrionX::NetworkError, "Request timeout: #{e.message}"
  rescue Faraday::ConnectionFailed => e
    @logger.error("Connection failed: #{e.message}")
    raise OrionX::NetworkError, "Connection failed: #{e.message}"
  rescue OrionX::APIError => e
    if retries < @config.retries && retryable_error?(e)
      retries += 1
      @logger.warn("Retrying request (attempt #{retries}/#{@config.retries}): #{e.message}")
      sleep(backoff_delay(retries))
      retry
    else
      raise e
    end
  rescue => e
    @logger.error("Unexpected error: #{e.message}")
    @logger.debug("Backtrace: #{e.backtrace.join("\n")}")
    raise OrionX::Error, "Unexpected error: #{e.message}"
  end
end