class Sorta::Http::Web::App
Public Class Methods
build(&block)
click to toggle source
# File lib/sorta/http/web/app.rb, line 20 def self.build(&block) app = new app.instance_exec(&block) app end
build_from(template)
click to toggle source
# File lib/sorta/http/web/app.rb, line 13 def self.build_from(template) dependencies = [ Router.build_from(template.router) ] new(*dependencies) end
new(router = Router.new)
click to toggle source
# File lib/sorta/http/web/app.rb, line 26 def initialize(router = Router.new) @router = router end
Public Instance Methods
call(env)
click to toggle source
# File lib/sorta/http/web/app.rb, line 30 def call(env) result = @router.find(env) unless result.found? msg = "Cannot find #{env['REQUEST_METHOD']} action for route \"#{env['PATH_INFO']}\"" logger.error msg return [404, {}, [msg]] end params = result.params params = result.payload[:schema].call(params) unless result.payload[:schema].nil? response = result.payload[:action].new(env).call(params) logger.info "#{response[0]} #{env['REQUEST_METHOD']} \"#{env['PATH_INFO']}\" #{result.payload[:action]} #{params.inspect}: #{response[2].join}" response rescue ParamsValidator::ValidationError => e logger.info "#{500} #{env['REQUEST_METHOD']} \"#{env['PATH_INFO']}\" #{result.payload[:action]} #{params.inspect}: #{e.message}" [500, {}, [e.message]] end
Private Instance Methods
logger()
click to toggle source
# File lib/sorta/http/web/app.rb, line 51 def logger Ractor.current[:logger] end
routes() { |router| ... }
click to toggle source
# File lib/sorta/http/web/app.rb, line 55 def routes yield @router end