/
loader.rb
75 lines (60 loc) · 2.18 KB
/
loader.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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
74
75
module Rack
class AdapterNotFound < RuntimeError; end
# Hash used to guess which adapter to use in <tt>Adapter.for</tt>.
# Framework name => file unique to this framework.
# +nil+ for value to never guess.
ADAPTERS = {
:rails => "config/environment.rb",
:ramaze => "start.rb",
:merb => "config/init.rb",
:halcyon => 'runner.ru',
:mack => 'config/app_config/default.yml',
:file => nil
}
module Adapter
# 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 <tt>dir/</tt>.
def self.guess(dir)
ADAPTERS.each_pair do |adapter, file|
return adapter if file && ::File.exist?(::File.join(dir, file))
end
raise AdapterNotFound, "No adapter found for #{dir}"
end
# Loads an adapter identified by +name+ using +options+ hash.
def self.for(name, options={})
case name.to_sym
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 :halcyon
require 'halcyon'
$:.unshift(Halcyon.root/'lib')
Halcyon::Runner.load_config Halcyon.root/'config'/'config.yml'
return Halcyon::Runner.new
when :mack
ENV["MACK_ENV"] = options[:environment]
load(::File.join(options[:chdir], "Rakefile"))
require 'mack'
return Mack::Utils::Server.build_app
when :file
return Rack::File.new(options[:chdir])
else
raise AdapterNotFound, "Adapter not found: #{name}"
end
end
end
end