lib/servel/middleware.rb in servel-0.2.0 vs lib/servel/middleware.rb in servel-0.3.0
- old
+ new
@@ -1,32 +1,36 @@
class Servel::Middleware
def initialize(app, options = {})
@app = app
@root = Pathname.new(options[:root])
- @haml_context = Servel::HamlContext.new
+ @file_server = Rack::File.new(@root.to_s)
end
def call(env)
path = env["PATH_INFO"]
url_path = url_path_for(path)
fs_path = @root + url_path[1..-1]
- unless fs_path.directory?
- return @app.call(env)
- end
+ return @file_server.call(env) unless fs_path.directory?
- if path != "" && !path.end_with?("/")
- return [302, { "Location" => "#{url_path}/" }, []]
- end
+ url_path << "/" unless url_path.end_with?("/")
- url_path << "/" if url_path != "" && !url_path.end_with?("/")
+ return [302, { "Location" => url_path }, []] unless path == "" || path.end_with?("/")
- [200, {}, StringIO.new(Servel::IndexView.new(url_path, fs_path).render(@haml_context))]
+ index(url_path, fs_path)
end
def url_path_for(url_path)
url_path = Rack::Utils.unescape_path(url_path)
raise unless Rack::Utils.valid_path?(url_path)
Rack::Utils.clean_path_info(url_path)
+ end
+
+ def index(url_path, fs_path)
+ @haml_context ||= Servel::HamlContext.new
+ locals = Servel::Locals.new(url_path: url_path, fs_path: fs_path, root: @root).locals
+ body = @haml_context.render('index.haml', locals)
+
+ [200, {}, [body]]
end
end
\ No newline at end of file