class Makanai::Application

Attributes

config[R]
request[R]
response[R]
router[R]

Public Class Methods

new(router:) click to toggle source
# File lib/makanai/application.rb, line 13
def initialize(router:)
  @router = router
  @config = Settings
end

Public Instance Methods

call(env) click to toggle source
# File lib/makanai/application.rb, line 29
def call(env)
  @request = Makanai::Request.new(env)
  @response = Makanai::Response.new
  route_result = execute_route
  return route_result.result if route_result.instance_of?(Response)
  @response.body << execute_route
  @response.result
end
run!() click to toggle source
# File lib/makanai/application.rb, line 20
def run!
  app_config = config.rack_app_config
  handler = Rack::Handler.get(app_config[:handler])
  handler.run(self, **{ Host: app_config[:host], Port: app_config[:port] })
rescue Interrupt
  handler.shutdown
  puts '==== Goodbye! :) ===='
end

Private Instance Methods

execute_route() click to toggle source
# File lib/makanai/application.rb, line 40
def execute_route
  route = router.bind!(url: request.url, method: request.method)
  # NOTE: merge dynamic url params (ex. /resources/1 -> { 'id' => '1' })
  @request.params.merge!(route.url_args)
  route.process.call(request)
rescue Makanai::Router::NotFound
  @response.status = 404
  nil
end