diff --git a/bin/attentive b/bin/attentive index 4b709e7..d11d266 100755 --- a/bin/attentive +++ b/bin/attentive @@ -26,17 +26,7 @@ class Attentive::CLI < Thor method_options [ :port, '-p' ] => 9393 def start if Attentive.has_presentation? - require 'rack' - require 'pygments' - require 'coffee_script' - require 'sass' - - # make sure pygments is ready - Pygments.highlight("attentive") - - Rack::Handler::WEBrick.run(Attentive::Server, :Port => options[:port]) do |server| - trap(:INT) { server.shutdown } - end + Attentive::Server.start! else raise Attentive::NoPresentationError end diff --git a/lib/attentive.rb b/lib/attentive.rb index 85007b1..c759be5 100644 --- a/lib/attentive.rb +++ b/lib/attentive.rb @@ -9,6 +9,10 @@ module Attentive def has_presentation? @has_presentation == true end + + def middleware + @middleware ||= [] + end end def self.configure @@ -23,3 +27,4 @@ module Attentive class NoPresentationError < StandardError ; end end + diff --git a/lib/attentive/server.rb b/lib/attentive/server.rb index d11983a..79fe9ff 100644 --- a/lib/attentive/server.rb +++ b/lib/attentive/server.rb @@ -14,6 +14,20 @@ require 'forwardable' module Attentive class Server < Rack::Builder + def start! + require 'rack' + require 'pygments' + require 'coffee_script' + require 'sass' + + # make sure pygments is ready + Pygments.highlight("attentive") + + Rack::Handler::WEBrick.run(Attentive::Server, :Port => options[:port]) do |server| + trap(:INT) { server.shutdown } + end + end + def self.call(env) @app ||= Rack::Builder.new do map '/assets' do @@ -28,6 +42,10 @@ module Attentive end map '/' do + Attentive.middleware.each do |opts| + use(*opts) + end + run Attentive::Sinatra end end diff --git a/skel/presentation.rb b/skel/presentation.rb index 7d55b7e..d18d353 100644 --- a/skel/presentation.rb +++ b/skel/presentation.rb @@ -1,4 +1,8 @@ Attentive.configure do |c| c.title = "My presentation" + + # add rack middleware here + # require 'rack-livereload' + # c.middleware << Rack::LiveReload end