lib/spire/router.rb in spire-0.4.9 vs lib/spire/router.rb in spire-0.4.10

- old
+ new

@@ -1,56 +1,39 @@ module Spire class Router - def initialize(base_path, routes) - $base_path = base_path - @routes = routes - @app = {} + def initialize(map) + @map = map end - def disect(env) - req = env['REQUEST_PATH'].split("/") - @request = {"controller" => req[1], "action" => req[2]} - end + def route(env) + request = Rack::Request.new(env) + request_path = env["REQUEST_PATH"] - def route - @app["controller"] = nil - - if @request["controller"] == "favicon.ico" - favicon = Public.return_file("favicon.ico") - return favicon + if request_path == "/favicon.ico" + return Public.return_file "favicon.ico" end - - if @request["controller"] == nil - route = @routes['default'].split("#") - @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] - @app["controller"] = values[0].capitalize - @app["action"] = values[1] - elsif @request["controller"] == keys[1] - @app["controller"] = values[0].capitalize - @app["action"] = values[1] - end - end + + if !@map.exists? request_path + return Error.return_error :message => "No route was not found!", :status => 404 end - - if !@app["controller"] - return Error.return_error :message => "Route not found in system/routes.rb", :status => 404 + + if @map.should_use_auto(request_path) + params = @map.disect(request_path) + return self.run({:controller => params[1], :action => params[2]}) end - - return self.run + + return self.run(@map.get(request_path), request) end - def run - require "#{$base_path}/controllers/#{@app["controller"]}Controller" - @class = Kernel.const_get(@app["controller"]).new() + def run(maps_to, request) + path = File.expand_path(__FILE__) + path["lib/spire/router.rb"] = "app/controllers" + + require "#{path}/#{maps_to[:controller].capitalize}Controller.rb" + @class = Kernel.const_get(maps_to[:controller].capitalize).new(request) - result = @class.method(@app["action"]).call + result = @class.method(maps_to[:action]).call buffer = @class.get_buffer if !buffer && !result return Error.return_error :message => "No method/Response from method. See #{@app["controller"]}##{@app["action"]} and check for a response", :status => 404 end @@ -61,22 +44,21 @@ if @class.instance_variable_get(:@status) status = @class.instance_variable_get(:@status) end if @class.instance_variable_get(:@content_type) - content_type = @class.instance_variable_get(:content_type) + content_type = @class.instance_variable_get(:@content_type) end if result buffer = buffer + result end return Response.new(buffer, content_type, status) end def call(env) - self.disect(env) - response = self.route + response = self.route(env) puts response if response response.to_rack else