lib/server.rb in rubrowser-0.1.2 vs lib/server.rb in rubrowser-0.1.3

- old
+ new

@@ -1,25 +1,59 @@ -require 'sinatra/base' +require 'webrick' +require 'haml' require 'data' require 'json' module Rubrowser - class Server < Sinatra::Base - get '/' do - data = Rubrowser::Data.instance + class Server < WEBrick::HTTPServer + def self.start(paths) + new(paths).start + end + + def initialize(paths) + super Port: 9000 + + @data = Rubrowser::Data.new(paths) + @data.parse + + mount_proc '/' do |req, res| + res.body = root(req.path) + end + + trap('INT') { shutdown } + end + + private + + attr_reader :data + + def root(path) + return file(path) if file?(path) + haml :index, locals: { constants: data.constants, occurences: data.occurences } end - def self.start - Rubrowser::Data.instance.parse - Thread.new do - run! host: 'localhost', - port: 9000, - root: File.expand_path('../../', __FILE__) - end.join + def file?(path) + path = resolve_file_path("/public#{path}") + File.file?(path) + end + + def file(path) + File.read(resolve_file_path("/public#{path}")) + end + + def haml(template, options = {}) + path = resolve_file_path("/views/#{template}.haml") + file = File.open(path).read + locals = options.delete(:locals) || {} + Haml::Engine.new(file, options).render(self, locals) + end + + def resolve_file_path(path) + File.expand_path("../..#{path}", __FILE__) end end end