class ParallelBatchApi::RackProcessor

Attributes

app[R]
env[R]
headers[R]
method[R]
params[R]
url[R]

Public Class Methods

new(env, options, app) click to toggle source
# File lib/parallel_batch_api/rack_processor.rb, line 8
def initialize(env, options, app)
  @method = options['method'] || ParallelBatchApi::HTTP_METHOD_GET
  @url    = options['url']
  @params = options['params'] || {}
  @env    = env
  @headers = options['headers'] || {}
  @app = app
  @params = params_for_rails
end

Public Instance Methods

build() click to toggle source

set value into @env

# File lib/parallel_batch_api/rack_processor.rb, line 30
def build
  path, qs = url.split('?')

  headrs = (headers || {}).inject({}) do |heads, (k, v)|
    heads.tap { |h| h["HTTP_#{k.gsub(/\-/, '_').upcase}"] = v }
  end

  env.merge!(headrs)

  env['REQUEST_METHOD'] = method.upcase

  if env['REQUEST_URI']
    env['REQUEST_URI'] = env['REQUEST_URI'].gsub(/#{ParallelBatchApi.batch_path}.*/, url)
  end

  env['REQUEST_PATH'] = env['PATH_INFO'] = path
  env['ORIGINAL_FULLPATH'] = url

  env['rack.request.query_string'] = qs
  env['QUERY_STRING'] = qs

  env['rack.request.form_hash'] = params
  env['rack.request.query_hash'] = method == ParallelBatchApi::HTTP_METHOD_GET ? params : nil

  env['action_dispatch.request.parameters'] = params
  env['action_dispatch.request.request_parameters'] = params

  env['CONTENT_TYPE'] = 'text/plain'
  env['HTTP_CONTENT_TYPE'] = 'text/plain'
  env['ROW_POST_DATA'] = ''
end
process() click to toggle source
# File lib/parallel_batch_api/rack_processor.rb, line 18
def process
  build
  res = begin
    app.call(env)
  rescue => er
    ParallelBatchApi::ErrorResponse.new(er).execute
  end

  ParallelBatchApi::Response.new(res, url, params).execute
end

Private Instance Methods

params_for_rails() click to toggle source
# File lib/parallel_batch_api/rack_processor.rb, line 64
def params_for_rails
  path_params = Rails.application.routes.recognize_path(url)
  params.merge(path_params)
rescue
  params
end