lib/spire/router.rb in spire-0.2.2 vs lib/spire/router.rb in spire-0.2.3

- old
+ new

@@ -1,62 +1,67 @@ module Spire class Router def initialize(base_path, routes) @base_path = base_path @routes = routes + @app = {} end def disect(env) req = env['REQUEST_PATH'].split("/") - @request = {"controller" => req[1], "action" => req[2]} + @request = {"controller" => req[1], "action" => req[2]} end def route - @controller_value = nil - @action_value = nil - if @request["controller"] == "favicon.ico" - return Response.new(File.open("public/favicon.ico", 'r').read, "image/ico;") + if @request["controller"] == "public" + self.return_file end + if @request["controller"] == nil route = @routes['default'].split("#") - @controller_value = route[0].capitalize - @action_value = route[1] + @app["controller"] = route[0].capitalize + @app["action"] = route[1] else @routes.each do |key, value| keys = key.split("/") values = value.split("#") if @request["controller"] == keys[1] && @request["action"] == keys[3] - puts values[0] - @controller_value = values[0].capitalize - puts @controller_value - @action_value = values[1] + @app["controller"] = values[0].capitalize + @app["action"] = values[1] elsif @request["controller"] == keys[1] - puts values[0] - @controller_value = values[0].capitalize - puts @controller_value - @action_value = values[1] + @app["controller"] = values[0].capitalize + @app["action"] = values[1] end end end - unless @controller_value - return Error.new("<title>404</title><body><h2>404 // Page not found</h2></body>") + + unless @app["controller"] + return Error.new(nil ,404) end + return self.run end + def return_file + # still need to add checks for mime types. this will be done in a seperate class once i get round to it + return Response.new(File.open("/public/#{@request["action"]}", "r").read) + end + def run - require "#{@base_path}/controllers/#{@controller_value}Controller" - @app = Kernel.const_get(@controller_value).new(@base_path) + require "#{@base_path}/controllers/#{@app["controller"]}Controller" + @class = Kernel.const_get(@app["controller"]).new(@base_path) - result = @app.method(@action_value).call + result = @class.method(@app["action"]).call + content_type = "text/html;" status = 200 - if @app.instance_variable_get(:@status) - status = @app.instance_variable_get(:@status) + if @class.instance_variable_get(:@status) + status = @class.instance_variable_get(:@status) end - if @app.instance_variable_get(:@content_type) - content_type = @app.instance_variable_get(:content_type) + + if @class.instance_variable_get(:@content_type) + content_type = @class.instance_variable_get(:content_type) end return Response.new(result, content_type, status) end