class ApiProxy::ResponseBuilder

Attributes

config[R]
env[R]
namespace[R]

Public Class Methods

new(env, namespace = :default) click to toggle source
# File lib/api_proxy/response_builder.rb, line 9
def initialize(env, namespace = :default)
  @env = env
  @namespace = namespace
  @config = ApiProxy.configuration(namespace)
end

Public Instance Methods

allow_request?() click to toggle source
# File lib/api_proxy/response_builder.rb, line 15
def allow_request?
  return false unless request.path.start_with?(config.request_starts_with)

  config.request_allowed.call(@env)
end
response() click to toggle source
# File lib/api_proxy/response_builder.rb, line 21
def response
  Rack::Response.new(
    result.to_s,
    result.code,
    ApiProxy::HeadersFilter.new(result.headers).filter
  )
end

Private Instance Methods

filtered_params() click to toggle source
# File lib/api_proxy/response_builder.rb, line 48
def filtered_params
  params.reject { |key, _value| config.reject_params.include?(key.to_s) }
end
headers() click to toggle source
# File lib/api_proxy/response_builder.rb, line 56
def headers
  config.custom_headers.call(env)
end
options() click to toggle source
# File lib/api_proxy/response_builder.rb, line 44
def options
  { namespace: namespace, body: filtered_params, headers: headers }
end
params() click to toggle source
# File lib/api_proxy/response_builder.rb, line 52
def params
  @params ||= (env['action_dispatch.request.request_parameters'].presence || request.params)
end
request() click to toggle source
# File lib/api_proxy/response_builder.rb, line 31
def request
  @request ||= Rack::Request.new(env)
end
result() click to toggle source
# File lib/api_proxy/response_builder.rb, line 35
def result
  @result ||= ApiProxy::SignedRequest.new(request.request_method, url, options).perform
end
url() click to toggle source
# File lib/api_proxy/response_builder.rb, line 39
def url
  path = request.path.gsub(config.request_starts_with, '')
  File.join(config.api_url.to_s, path)
end