class Volt::HttpResource

Rack middleware for HttpController

Public Class Methods

new(app, volt_app, router) click to toggle source
# File lib/volt/server/rack/http_resource.rb, line 9
def initialize(app, volt_app, router)
  @app = app
  @volt_app = volt_app
  @router = router
end

Public Instance Methods

call(env) click to toggle source
# File lib/volt/server/rack/http_resource.rb, line 15
def call(env)
  request = HttpRequest.new(env)
  params = routes_match?(request)
  if params
    dispatch_to_controller(params, request)
  else
    @app.call env
  end
end

Private Instance Methods

dispatch_to_controller(params, request) click to toggle source

Find the correct controller and call the correct action on it. The controller name and actions need to be set as params for the matching route

# File lib/volt/server/rack/http_resource.rb, line 34
def dispatch_to_controller(params, request)
  namespace = params[:component] || 'main'

  controller_name = params[:controller] + '_controller'
  action = params[:action]

  namespace_module = Object.const_get(namespace.camelize.to_sym)
  klass = namespace_module.const_get(controller_name.camelize.to_sym)
  controller = klass.new(@volt_app, params, request)

  # Use the 'meta' thread local to set the user_id for Volt.current_user
  meta_data = {}
  user_id = request.cookies['user_id']
  meta_data['user_id'] = user_id if user_id
  Thread.current['meta'] = meta_data

  controller.perform(action)
end
routes_match?(request) click to toggle source
# File lib/volt/server/rack/http_resource.rb, line 27
def routes_match?(request)
  @router.url_to_params(request.method, request.path)
end