Brandon Mathis
13 years ago
3 changed files with 39 additions and 36 deletions
@ -1,13 +1,17 @@ |
|||||
source "http://rubygems.org" |
source "http://rubygems.org" |
||||
|
|
||||
gem 'rake' |
group :development do |
||||
gem 'rack' |
gem 'rake' |
||||
gem 'jekyll' |
gem 'rack' |
||||
gem 'rdiscount' |
gem 'jekyll' |
||||
gem 'pygments.rb' |
gem 'rdiscount' |
||||
gem 'RedCloth' |
gem 'pygments.rb' |
||||
gem 'haml', '>= 3.1' |
gem 'RedCloth' |
||||
gem 'compass', '>= 0.11' |
gem 'haml', '>= 3.1' |
||||
gem 'rubypants' |
gem 'compass', '>= 0.11' |
||||
gem 'rb-fsevent' |
gem 'rubypants' |
||||
gem 'stringex' |
gem 'rb-fsevent' |
||||
|
gem 'stringex' |
||||
|
end |
||||
|
|
||||
|
gem 'sinatra', '1.2.6' |
||||
|
@ -1,35 +1,25 @@ |
|||||
require 'rubygems' |
|
||||
require 'bundler/setup' |
require 'bundler/setup' |
||||
require 'rack' |
require 'sinatra/base' |
||||
|
|
||||
# The project root directory |
# The project root directory |
||||
$root = ::File.dirname(__FILE__) |
$root = ::File.dirname(__FILE__) |
||||
|
|
||||
# Common Rack Middleware |
class SinatraStaticServer < Sinatra::Base |
||||
use Rack::ShowStatus # Nice looking 404s and other messages |
|
||||
use Rack::ShowExceptions # Nice looking errors |
|
||||
|
|
||||
# |
get(/.+/) do |
||||
# From Rack::DirectoryIndex: |
send_sinatra_file(request.path) {404} |
||||
# https://github.com/craigmarksmith/rack-directory-index/ |
|
||||
# |
|
||||
module Rack |
|
||||
class DirectoryIndex |
|
||||
def initialize(app) |
|
||||
@app = app |
|
||||
end |
|
||||
def call(env) |
|
||||
index_path = ::File.join($root, 'public', Rack::Request.new(env).path.split('/'), 'index.html') |
|
||||
if ::File.exists?(index_path) |
|
||||
return [200, {"Content-Type" => "text/html"}, [::File.read(index_path)]] |
|
||||
else |
|
||||
@app.call(env) |
|
||||
end |
|
||||
end |
end |
||||
|
|
||||
|
not_found do |
||||
|
send_sinatra_file('404.html') {"Sorry, I cannot find #{request.path}"} |
||||
end |
end |
||||
end |
|
||||
|
|
||||
use Rack::DirectoryIndex |
def send_sinatra_file(path, &missing_file_block) |
||||
|
file_path = File.join(File.dirname(__FILE__), 'public', path) |
||||
|
file_path = File.join(file_path, 'index.html') unless file_path =~ /\.[a-z]+$/i |
||||
|
File.exist?(file_path) ? send_file(file_path) : missing_file_block.call |
||||
|
end |
||||
|
|
||||
run Rack::Directory.new($root + '/public') |
end |
||||
|
|
||||
|
run SinatraStaticServer |
Loading…
Reference in new issue