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