Sha256: 75e7cb2ee9701da396d12e7ac40287538e23c8f0319235464b7574eb943911bd

Contents?: true

Size: 1.6 KB

Versions: 1

Compression:

Stored size: 1.6 KB

Contents

require "jruby"

module JettyRails
  
  class Runner
    attr_reader :config
    attr_reader :server
    attr_reader :app_context
    
    @@defaults = {
      :environment => 'development',
      :context_path => '/'
    }
    
    def initialize(config = {})
      @config = config.symbolize_keys!.reverse_merge!(@@defaults)
      raise 'Basedir to be run must be provided' unless config[:base]
      
      @server = Jetty::Server.new 8080
      
      add_public_dir_to server
      install_rack_on server
    end
    
    def start
      @server.start
      @server.join
    end
    
    private
    def rack_filter
      Jetty::FilterHolder.new(Rack::RackFilter.new)
    end
    
    def add_public_dir_to(server)
      @resources = Jetty::Handler::ResourceHandler.new
      @resources.resource_base = config[:base] + '/public'
      server.add_handler(@resources)
    end
    
    def install_rack_on(server)
      #TODO root context should be configurable
      @app_context = Jetty::Handler::WebAppContext.new("/", config[:context_path])
      @app_context.class_loader = JRuby.runtime.jruby_class_loader
      @app_context.resource_base = config[:base]
      
      # refer to goldspike and jruby-rack documentation
      @app_context.init_params = {
        'rails.root' => '/',
        'public.root' => '/public',
        'rails.env' => config[:environment],
        'gem.path' => 'tmp/war/WEB-INF/gems'
      }
      
      @app_context.add_event_listener(Rack::RailsServletContextListener.new)
      @app_context.add_filter(rack_filter, "/*", Jetty::Context::DEFAULT)
      server.add_handler(@app_context)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
jetty-rails-0.1 lib/jetty_rails/runner.rb