Module: Rack::Adapter

Defined in:
lib/thin.rb,
lib/rack/adapter/rails.rb,
lib/rack/adapter/loader.rb

Defined Under Namespace

Classes: Rails

Class Method Summary collapse

Class Method Details

.for(name, options = {}) ⇒ Object

Loads an adapter identified by name using options hash.



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/rack/adapter/loader.rb', line 37

def self.for(name, options={})
  ENV['RACK_ENV'] = options[:environment]
  
  case name.to_sym
  when :rack
    return load(::File.join(options[:chdir], "config.ru"))
    
  when :rails
    return Rails.new(options.merge(:root => options[:chdir]))
  
  when :ramaze
    require "#{options[:chdir]}/start"
    
    Ramaze.trait[:essentials].delete Ramaze::Adapter
    Ramaze.start :force => true
    
    return Ramaze::Adapter::Base
    
  when :merb
    require 'merb-core'
    
    Merb::Config.setup(:merb_root   => options[:chdir],
                       :environment => options[:environment])
    Merb.environment = Merb::Config[:environment]
    Merb.root = Merb::Config[:merb_root]
    Merb::BootLoader.run
    
    return Merb::Rack::Application.new
    
  when :file
    return Rack::File.new(options[:chdir])
    
  else
    raise AdapterNotFound, "Adapter not found: #{name}"
    
  end
end

.guess(dir) ⇒ Object

Guess which adapter to use based on the directory structure or file content. Returns a symbol representing the name of the adapter to use to load the application under dir/.

Raises:



23
24
25
26
27
28
# File 'lib/rack/adapter/loader.rb', line 23

def self.guess(dir)
  ADAPTERS.each do |adapter, file|
    return adapter if file && ::File.exist?(::File.join(dir, file))
  end
  raise AdapterNotFound, "No adapter found for #{dir}"
end

.load(config) ⇒ Object

Load a Rack application from a Rack config file (.ru).



31
32
33
34
# File 'lib/rack/adapter/loader.rb', line 31

def self.load(config)
  rackup_code = ::File.read(config)
  eval("Rack::Builder.new {( #{rackup_code}\n )}.to_app", TOPLEVEL_BINDING, config)
end