class Reynard::Context

Exposes a public interface to build a request context.

Public Class Methods

new(specification:, request_context: nil) click to toggle source
# File lib/reynard/context.rb, line 9
def initialize(specification:, request_context: nil)
  @specification = specification
  @request_context = request_context || build_request_context
end

Public Instance Methods

base_url(base_url) click to toggle source
# File lib/reynard/context.rb, line 14
def base_url(base_url)
  copy(base_url: base_url)
end
execute() click to toggle source
# File lib/reynard/context.rb, line 31
def execute
  build_object(build_request.perform)
end
headers(headers) click to toggle source
# File lib/reynard/context.rb, line 27
def headers(headers)
  copy(headers: headers)
end
operation(operation_name) click to toggle source
# File lib/reynard/context.rb, line 18
def operation(operation_name)
  copy(operation: @specification.operation(operation_name))
end
params(params) click to toggle source
# File lib/reynard/context.rb, line 22
def params(params)
  params = params.transform_keys(&:to_s)
  copy(params: @specification.build_grouped_params(@request_context.operation.node, params))
end

Private Instance Methods

build_object(http_response) click to toggle source
# File lib/reynard/context.rb, line 52
def build_object(http_response)
  media_type = @specification.media_type(
    @request_context.operation.node,
    http_response.code,
    http_response.content_type
  )
  ObjectBuilder.new(
    media_type: media_type,
    schema: @specification.schema(media_type.node),
    http_response: http_response
  ).call
end
build_request() click to toggle source
# File lib/reynard/context.rb, line 48
def build_request
  Reynard::Http::Request.new(request_context: @request_context)
end
build_request_context() click to toggle source
# File lib/reynard/context.rb, line 37
def build_request_context
  RequestContext.new(base_url: @specification.default_base_url)
end
copy(**properties) click to toggle source
# File lib/reynard/context.rb, line 41
def copy(**properties)
  self.class.new(
    specification: @specification,
    request_context: @request_context.copy(**properties)
  )
end