Skip to content

@sr /serve.rb
Created

Embed URL

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
# WTFPL
# Requires http://github.com/rtomayko/sinatra/tree/hoboken
require "rubygems"
require "rack"
require "thin"
require "pathname"
require "addressable/uri"
require "sinatra/base"
class Serve < Sinatra::Application
class UnknownDirectoryError < StandardError; end
Formats = %w(html css js textile markdown).freeze
attr_reader :base, :charset
def initialize(base, charset="UTF-8")
@base = Pathname(base)
@charset = charset
raise UnknownDirectoryError unless @base.directory?
end
get "/*" do
Formats.each do |format|
path = params[:splat].join
path = "index" if path.empty? || path == "/"
path << ".#{format}" unless base.join(path).file? && !path.end_with?(format)
next unless (file = base.join(path)).file?
content_type media_type(file.extname || format) || "html", :charset => charset
halt [200, file.read]
break
end
not_found 'Not found. Try <a href="/">root</a>.'
end
end
if $0 == __FILE__
directory = ARGV[0] || Dir.pwd
charset = ARGV[1] ? ARGV[1] : nil
app = begin
Serve.new(directory, charset)
rescue Serve::UnknownDirectoryError
$stderr.puts "Unknown directory `#{directory}`"
abort("Usage: #{$0} directory [charset]")
end
Thin::Server.start("0.0.0.0", 1234) do
use Rack::CommonLogger
run app
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.