module Cargobull::Rackup
Public Class Methods
call(env)
click to toggle source
# File lib/cargobull/rackup.rb, line 43 def self.call(env) path = env[:request_path] _, match_method = routes(env).detect{ |pattern, _| path =~ pattern } if match_method.nil? return [500, { "Content-Type" => env[:ctype] }, env[:e500] ] else return send(match_method, env) end end
dispatch(env)
click to toggle source
# File lib/cargobull/rackup.rb, line 23 def self.dispatch(env) req = Rack::Request.new(env[:rackenv]) action = env[:request_path].sub(/^#{env[:dispatch_url]}\/?/, '') params = req.GET if req.content_type == "application/x-www-form-urlencoded" params.merge!(req.POST) else params[:body] = req.body end return Dispatch.call(env, env[:request_method], action, params) end
file(env)
click to toggle source
# File lib/cargobull/rackup.rb, line 4 def self.file(env) path = env[:request_path].gsub(/\/\.+/, ''). sub(/^#{env[:serve_url]}\/?/i, '') if path.empty? path = env[:default_files].detect do |f| File.file?("./files/#{f}") end end path = "./files/#{path}" if File.file?(path) return [200, {}, File.open(path, File::RDONLY)] elsif env[:default_path] return [200, {}, File.open("./files/#{env[:default_path]}", File::RDONLY)] else return [404, { "Content-Type" => env[:ctype] }, env[:e404] ] end end
routes(env)
click to toggle source
# File lib/cargobull/rackup.rb, line 35 def self.routes(env) routes = [:file, :dispatch].map do |type| [/^#{env["#{type}_url".to_sym]}\/?/i, type] end routes.reverse! if env[:file_url] == '/' return routes.unshift([/^\/favicon/i, :file]) end