class Kwipper::Application
Attributes
action[R]
request[R]
response[R]
Public Instance Methods
process!()
click to toggle source
# File lib/kwipper/application.rb, line 30 def process! if Controller::ROUTES.key? request.route_key response.set_status :ok response.content_type = 'text/html' controller_class, @action = Controller::ROUTES[request.route_key] controller = controller_class.new request, response if controller.respond_to? @action @view = controller.process @action response.body = render :layout else raise Kwipper::NotFoundError, "#{self} does not know #{@action}" end elsif (file_name = public_file_request?) response.set_status :ok response.content_type = get_content_type file_name response.body = File.read file_name else raise Kwipper::NotFoundError end end
respond_to(request)
click to toggle source
# File lib/kwipper/application.rb, line 8 def respond_to(request) @request = request @response = Response.new request begin start_time = Time.now.to_f process! log.debug "#{"Processed #{request.info}".blue} in #{sprintf '%.8f', Time.now.to_f - start_time}s" rescue Kwipper::AuthenticationRequired redirect '/' log.debug "401 Not Authorized".yellow rescue Kwipper::NotFoundError render_not_found log.warn @response.info.yellow rescue => e render_error e log.fatal "#{@response.info.red}\n#{verbose_error(e)}" end @response end
Private Instance Methods
get_content_type(file_name)
click to toggle source
# File lib/kwipper/application.rb, line 60 def get_content_type(file_name) if (mime = MIME::Types.of(file_name).first) mime.content_type else log.warn "Unknown content type for file: #{file_name}" 'text/plain' end end
public_file_request?()
click to toggle source
# File lib/kwipper/application.rb, line 55 def public_file_request? file = File.join(Kwipper::ROOT, 'public', request.path) File.exists?(file) && file end
render_error(e)
click to toggle source
# File lib/kwipper/application.rb, line 76 def render_error(e) @error = e response.set_status :server_error @view = render :server_error response.body = render :layout end
render_not_found()
click to toggle source
# File lib/kwipper/application.rb, line 69 def render_not_found response.set_status :not_found response.status_message = "#{response.status_message}: #{request.info}" @view = render :not_found response.body = render :layout end
verbose_error(e)
click to toggle source
# File lib/kwipper/application.rb, line 83 def verbose_error(e) "#{e.class} #{e.message}\n#{e.backtrace.join "\n"}".red end