Class: CoreLibrary::ApiCall

Inherits:
Object
  • Object
show all
Defined in:
lib/apimatic-core/api_call.rb

Overview

This class is responsible for executing an API call using HttpClient, RequestBuilder and ResponseHandler objects.

Instance Method Summary collapse

Constructor Details

#initialize(global_configuration) ⇒ ApiCall

Initializes a new instance of ApiCall.

Parameters:



12
13
14
15
16
17
18
# File 'lib/apimatic-core/api_call.rb', line 12

def initialize(global_configuration)
  @global_configuration = global_configuration
  @request_builder = RequestBuilder.new
  @response_handler = ResponseHandler.new
  @endpoint_context = {}
  initialize_api_logger(@global_configuration.client_configuration.logging_configuration)
end

Instance Method Details

#endpoint_context(context_key, context_value) ⇒ ApiCall

The setter for the context for an endpoint call.

Parameters:

  • context_key (String)

    The name of the endpoint context.

  • context_value (Object)

    The value of the endpoint context.

Returns:

  • (ApiCall)

    An updated instance of ApiCall.



40
41
42
43
# File 'lib/apimatic-core/api_call.rb', line 40

def endpoint_context(context_key, context_value)
  @endpoint_context[context_key] = context_value
  self
end

#executeObject

Executes the API call using provided HTTP client, request builder and response handler objects.

Returns:

  • The deserialized endpoint response.



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/apimatic-core/api_call.rb', line 47

def execute
  _client_configuration = @global_configuration.client_configuration
  begin
    if _client_configuration.http_client.nil?
      raise ArgumentError, 'An HTTP client instance is required to execute an Api call.'
    end

    _http_request = @request_builder.global_configuration(@global_configuration)
                                    .build(@endpoint_context)
    @logger.log_request(_http_request)

    _http_callback = _client_configuration.http_callback
    unless _http_callback.nil?
      update_http_callback(proc do
        _http_callback&.on_before_request(_http_request)
      end)
    end
    _http_response = _client_configuration.http_client.execute(_http_request)
    @logger.log_response(_http_response)

    unless _http_callback.nil?
      update_http_callback(proc do
        _http_callback&.on_after_response(_http_response)
      end)
    end

    _deserialized_response = @response_handler.handle(_http_response, @global_configuration.get_global_errors,
                                                      @global_configuration.should_symbolize_hash)
    _deserialized_response
  rescue StandardError => e
    raise e
  end
end

#initialize_api_logger(logging_config) ⇒ Object



87
88
89
90
91
92
93
# File 'lib/apimatic-core/api_call.rb', line 87

def initialize_api_logger(logging_config)
  @logger = if logging_config.nil?
              NilSdkLogger.new
            else
              SdkLogger.new(logging_config)
            end
end

#new_builderApiCall

Creates a new builder instance of the API call with pre-configured global and logging configurations.

Returns:

  • (ApiCall)

    The instance of ApiCall object.



6
7
8
# File 'lib/apimatic-core/api_call.rb', line 6

def new_builder
  ApiCall.new(@global_configuration)
end

#request(request_builder) ⇒ ApiCall

The setter for the request builder to be used for building the request of an API call.

Parameters:

Returns:

  • (ApiCall)

    An updated instance of ApiCall.



23
24
25
26
# File 'lib/apimatic-core/api_call.rb', line 23

def request(request_builder)
  @request_builder = request_builder
  self
end

#response(response_handler) ⇒ ApiCall

The setter for the response handler to be used for handling the response of an API call.

Parameters:

Returns:

  • (ApiCall)

    An updated instance of ApiCall.



31
32
33
34
# File 'lib/apimatic-core/api_call.rb', line 31

def response(response_handler)
  @response_handler = response_handler
  self
end

#update_http_callback(callable) ⇒ Object

Registers request and response with the provided http_callback

Parameters:

  • callable (Callable)

    The callable to be called for registering into the HttpCallback instance.



83
84
85
# File 'lib/apimatic-core/api_call.rb', line 83

def update_http_callback(callable)
  callable.call
end