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 Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(global_configuration) ⇒ ApiCall

Initializes a new instance of ApiCall.

Parameters:



14
15
16
17
18
19
20
21
# File 'lib/apimatic-core/api_call.rb', line 14

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)
  @pagination_strategy_list = nil
end

Instance Attribute Details

#global_configurationObject (readonly)

Returns the value of attribute global_configuration.



4
5
6
# File 'lib/apimatic-core/api_call.rb', line 4

def global_configuration
  @global_configuration
end

#pagination_strategy_listObject (readonly)

Returns the value of attribute pagination_strategy_list.



4
5
6
# File 'lib/apimatic-core/api_call.rb', line 4

def pagination_strategy_list
  @pagination_strategy_list
end

#request_builderObject (readonly)

Returns the value of attribute request_builder.



4
5
6
# File 'lib/apimatic-core/api_call.rb', line 4

def request_builder
  @request_builder
end

Instance Method Details

#clone_with(global_configuration: nil, request_builder: nil) ⇒ ApiCall

Creates a deep clone of the ApiCall instance with optional overrides.

This method is useful for duplicating an API call while changing select parts like the request builder or pagination strategies.

Parameters:

  • global_configuration (GlobalConfiguration, nil) (defaults to: nil)

    Optional replacement global configuration.

  • request_builder (RequestBuilder, nil) (defaults to: nil)

    Optional replacement request builder.

Returns:

  • (ApiCall)

    A new instance with copied internal state and any applied overrides.



127
128
129
130
131
132
133
134
135
136
# File 'lib/apimatic-core/api_call.rb', line 127

def clone_with(global_configuration: nil, request_builder: nil)
  clone = ApiCall.new(global_configuration || @global_configuration)

  clone.request(request_builder || @request_builder.clone_with)
  clone.response(@response_handler)
  clone.set_endpoint_context(DeepCloneUtils.deep_copy(@endpoint_context))
  clone.pagination_strategies(*pagination_strategy_list) if pagination_strategy_list

  clone
end

#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.



43
44
45
46
# File 'lib/apimatic-core/api_call.rb', line 43

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.



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/apimatic-core/api_call.rb', line 59

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



110
111
112
113
114
115
116
# File 'lib/apimatic-core/api_call.rb', line 110

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.



8
9
10
# File 'lib/apimatic-core/api_call.rb', line 8

def new_builder
  ApiCall.new(@global_configuration)
end

#paginate(page_iterable_creator, paginated_items_converter) ⇒ Object

Invokes the given page iterable creator with a PaginatedData instance.

Parameters:

  • page_iterable_creator (Proc)

    A callable that accepts a PaginatedData instance and returns an iterable (e.g., Enumerator) over pages of results.

  • paginated_items_converter (Proc)

    A callable used to convert paginated items.

Returns:

  • (Object)

    The result of calling page_iterable_creator with the PaginatedData.



100
101
102
# File 'lib/apimatic-core/api_call.rb', line 100

def paginate(page_iterable_creator, paginated_items_converter)
  page_iterable_creator.call(PaginatedData.new(self, paginated_items_converter))
end

#pagination_strategies(*pagination_strategies) ⇒ self

Sets the pagination strategies for this instance.

Parameters:

  • pagination_strategies (Array<Object>)

    A variable number of pagination strategy objects.

Returns:

  • (self)

    Returns the current instance for method chaining.



52
53
54
55
# File 'lib/apimatic-core/api_call.rb', line 52

def pagination_strategies(*pagination_strategies)
  @pagination_strategy_list = pagination_strategies
  self
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.



26
27
28
29
# File 'lib/apimatic-core/api_call.rb', line 26

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.



34
35
36
37
# File 'lib/apimatic-core/api_call.rb', line 34

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.



106
107
108
# File 'lib/apimatic-core/api_call.rb', line 106

def update_http_callback(callable)
  callable.call
end