class ApiTransformer::BackendRequest

Process request blocks

Attributes

form_params[RW]
header_params[RW]
json_params[RW]
method[RW]
name[R]
path[RW]
query_params[RW]

Public Class Methods

new(name, base_url, frontend_headers) click to toggle source
# File lib/api_transformer/backend_request.rb, line 10
def initialize(name, base_url, frontend_headers)
  @name = name
  @base_url = base_url
  @frontend_headers = frontend_headers

  @query_params = {}
  @form_params = {}
  @json_params = {}
  @cookie_params = {}
  @header_params = {}
end

Public Instance Methods

send() click to toggle source
# File lib/api_transformer/backend_request.rb, line 22
def send
  url = @base_url + @path

  EM::HttpRequest.new(url).send(
    "a#{@method}",
    query: @query_params,
    body: body,
    head: headers
  )
end

Private Instance Methods

body() click to toggle source
# File lib/api_transformer/backend_request.rb, line 35
def body
  case [@form_params.any?, @json_params.any?]
  when [true, true]
    fail RequestError, "A request cannot have both json and form parameters"
  when [true, false]
    @form_params
  when [false, true]
    @json_params.to_json
  when [false, false]
    nil
  end
end
content_type() click to toggle source
# File lib/api_transformer/backend_request.rb, line 64
def content_type
  if @json_params.any?
    { "Content-Type" => "application/json" }
  elsif @form_params.any?
    { "Content-Type" => "application/x-www-form-urlencoded" }
  else
    {}
  end
end
cookies() click to toggle source
# File lib/api_transformer/backend_request.rb, line 74
def cookies
  if @cookie_params.any?
    cookie_string = @cookie_params
      .map { |key, value| "#{key}=#{value};" }
      .join(" ")

    { "Cookie" => cookie_string }
  else
    {}
  end
end
headers() click to toggle source
# File lib/api_transformer/backend_request.rb, line 48
def headers
  ret = [
    stripped_frontend_headers,
    @header_params,
    content_type,
    cookies
  ].reduce(&:merge)

  ret.delete("Host")
  ret
end
stripped_frontend_headers() click to toggle source
# File lib/api_transformer/backend_request.rb, line 60
def stripped_frontend_headers
  @frontend_headers.reject { |key, _| key == "Content-Length" }
end