forked from radiant/radiant
-
Notifications
You must be signed in to change notification settings - Fork 0
/
boot.rb
179 lines (152 loc) · 4.25 KB
/
boot.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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
# Don't change this file!
# Configure your app in config/environment.rb and config/environments/*.rb
RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT)
module Rails
class << self
def vendor_rails?
File.exist?("#{RAILS_ROOT}/vendor/rails")
end
end
end
module Radiant
class << self
def boot!
unless booted?
preinitialize
pick_boot.run
end
end
def booted?
defined? Radiant::Initializer
end
def pick_boot
case
when app?
AppBoot.new
when vendor?
VendorBoot.new
else
GemBoot.new
end
end
def vendor?
File.exist?("#{RAILS_ROOT}/vendor/radiant")
end
def app?
File.exist?("#{RAILS_ROOT}/lib/radiant.rb")
end
def preinitialize
load(preinitializer_path) if File.exist?(preinitializer_path)
end
def loaded_via_gem?
pick_boot.is_a? GemBoot
end
def preinitializer_path
"#{RAILS_ROOT}/config/preinitializer.rb"
end
end
class Boot
def run
load_mutex
load_initializer
end
# RubyGems from version 1.6 does not require thread but Rails depend on it
# This should newer rails do automaticly
def load_mutex
begin
require "thread" unless defined?(Mutex)
rescue LoadError => e
$stderr.puts %(Mutex could not be initialized. #{load_error_message})
exit 1
end
end
def load_initializer
begin
require 'radiant'
require 'radiant/initializer'
rescue LoadError => e
$stderr.puts %(Radiant could not be initialized. #{load_error_message})
exit 1
end
Radiant::Initializer.run(:set_load_path)
Radiant::Initializer.run(:install_gem_spec_stubs)
Rails::GemDependency.add_frozen_gem_path
end
end
class VendorBoot < Boot
def load_initializer
$LOAD_PATH.unshift "#{RAILS_ROOT}/vendor/radiant/lib"
super
end
def load_error_message
"Please verify that vendor/radiant contains a complete copy of the Radiant sources."
end
end
class AppBoot < Boot
def load_initializer
$LOAD_PATH.unshift "#{RAILS_ROOT}/lib"
super
end
def load_error_message
"Please verify that you have a complete copy of the Radiant sources."
end
end
class GemBoot < Boot
def load_initializer
self.class.load_rubygems
load_radiant_gem
super
end
def load_error_message
"Please reinstall the Radiant gem with the command 'gem install radiant'."
end
def load_radiant_gem
if version = self.class.gem_version
gem 'radiant', version
else
gem 'radiant'
end
rescue Gem::LoadError => load_error
if load_error.message =~ /Could not find RubyGem radiant/
STDERR.puts %(Missing the Radiant #{version} gem. Please `gem install -v=#{version} radiant`, update your RADIANT_GEM_VERSION setting in config/environment.rb for the Radiant version you do have installed, or comment out RADIANT_GEM_VERSION to use the latest version installed.)
exit 1
else
raise
end
end
class << self
def rubygems_version
Gem::RubyGemsVersion rescue nil
end
def gem_version
if defined? RADIANT_GEM_VERSION
RADIANT_GEM_VERSION
elsif ENV.include?('RADIANT_GEM_VERSION')
ENV['RADIANT_GEM_VERSION']
else
parse_gem_version(read_environment_rb)
end
end
def load_rubygems
min_version = '1.3.2'
require 'rubygems'
unless rubygems_version >= min_version
$stderr.puts %Q(Radiant requires RubyGems >= #{min_version} (you have #{rubygems_version}). Please `gem update --system` and try again.)
exit 1
end
rescue LoadError
$stderr.puts %Q(Radiant requires RubyGems >= #{min_version}. Please install RubyGems and try again: http://rubygems.rubyforge.org)
exit 1
end
def parse_gem_version(text)
$1 if text =~ /^[^#]*RADIANT_GEM_VERSION\s*=\s*["']([!~<>=]*\s*[\d.]+)["']/
end
private
def read_environment_rb
File.read("#{RAILS_ROOT}/config/environment.rb")
end
end
end
end
# All that for this:
Radiant.boot!