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