lib/embork/server.rb in embork-0.0.4 vs lib/embork/server.rb in embork-0.0.5

- old
+ new

@@ -9,72 +9,83 @@ include Embork::BuildVersions attr_reader :backend attr_reader :project_root attr_reader :sprockets_environment + attr_reader :port + attr_reader :host + attr_reader :disable_logging attr_reader :app - def initialize(borkfile, options = {}) @borkfile = borkfile - if options.has_key?(:bundle_version) && !options[:bundle_version].nil? - @bundle_version = options[:bundle_version] + if !options[:bundle_version].nil? + Embork.bundle_version = options[:bundle_version] setup_bundled_mode - elsif options.has_key?(:with_latest_bundle) && !!options[:with_latest_bundle] - @asset_bundle_version = sorted_versions(@borkfile.project_root).first + elsif options[:with_latest_bundle] + Embork.bundle_version = sorted_versions(@borkfile.project_root).first + setup_bundled_mode + elsif options[:enable_tests] + setup_test_mode else setup_dev_mode end + @disable_logging = options[:disable_logging] @port = options[:port] @host = options[:host] end def setup_dev_mode @environment = Embork::Environment.new(@borkfile) @sprockets_environment = @environment.sprockets_environment @project_root = @borkfile.project_root - set_backend + static_directory = File.join(project_root, 'static') - container = self - static_directory = File.join(container.project_root, 'static') - - @app = Rack::Builder.new do - use container.backend - use Rack::Static, :urls => [ '/images', '/fonts', ], :root => static_directory - - map '/' do - run container.sprockets_environment - end - end + @cascade_apps = [ + @sprockets_environment, + Rack::File.new(static_directory) + ] + @app = build_app end def setup_bundled_mode @project_root = File.join @borkfile.project_root, 'build', Embork.env.to_s - set_backend - static_directory = @project_root - container = self - @app = Rack::Builder.new do - use container.backend - use Rack::Static, :urls => [ '/' ], :root => static_directory - # Should never reach here. It just need s an app to run - run lambda { |env| [ 200, { 'Content-Type' => 'text/html', }, '' ] } - end + @cascade_apps = [ Rack::File.new(static_directory) ] + @app = build_app end - def set_backend + def setup_test_mode + setup_dev_mode + @sprockets_environment.prepend_path 'tests' + end + + def build_app if @borkfile.backend == :static_index - @backend = Embork::Pushstate + backend = Embork::Pushstate else Embork::Forwarder.target = @borkfile.backend - @backend = Embork::Forwarder + backend = Embork::Forwarder end + cascade_apps = @cascade_apps + Rack::Builder.new do + use backend + run Rack::Cascade.new(cascade_apps) + end end - def run - Rack::Handler::WEBrick.run @app, :Port => @port, :Host => @host + def run_webrick + opts = { + :Port => @port, + :Host => @host + } + if @disable_logging + opts[:Logger] = WEBrick::Log.new("/dev/null") + opts[:AccessLog] = [] + end + Rack::Handler::WEBrick.run @app, opts end end