graffititracker_devise 1.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. data/CHANGELOG.rdoc +410 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +272 -0
  4. data/Rakefile +53 -0
  5. data/TODO +2 -0
  6. data/app/controllers/confirmations_controller.rb +33 -0
  7. data/app/controllers/passwords_controller.rb +41 -0
  8. data/app/controllers/registrations_controller.rb +53 -0
  9. data/app/controllers/sessions_controller.rb +42 -0
  10. data/app/controllers/unlocks_controller.rb +41 -0
  11. data/app/models/devise_mailer.rb +68 -0
  12. data/app/views/confirmations/new.html.erb +12 -0
  13. data/app/views/devise_mailer/confirmation_instructions.html.erb +5 -0
  14. data/app/views/devise_mailer/reset_password_instructions.html.erb +8 -0
  15. data/app/views/devise_mailer/unlock_instructions.html.erb +7 -0
  16. data/app/views/passwords/edit.html.erb +16 -0
  17. data/app/views/passwords/new.html.erb +12 -0
  18. data/app/views/registrations/edit.html.erb +25 -0
  19. data/app/views/registrations/new.html.erb +17 -0
  20. data/app/views/sessions/new.html.erb +17 -0
  21. data/app/views/shared/_devise_links.erb +19 -0
  22. data/app/views/unlocks/new.html.erb +12 -0
  23. data/generators/devise/USAGE +5 -0
  24. data/generators/devise/devise_generator.rb +15 -0
  25. data/generators/devise/lib/route_devise.rb +32 -0
  26. data/generators/devise/templates/migration.rb +23 -0
  27. data/generators/devise/templates/model.rb +9 -0
  28. data/generators/devise_install/USAGE +3 -0
  29. data/generators/devise_install/devise_install_generator.rb +15 -0
  30. data/generators/devise_install/templates/README +23 -0
  31. data/generators/devise_install/templates/devise.rb +105 -0
  32. data/generators/devise_views/USAGE +3 -0
  33. data/generators/devise_views/devise_views_generator.rb +21 -0
  34. data/lib/devise.rb +277 -0
  35. data/lib/devise/controllers/helpers.rb +226 -0
  36. data/lib/devise/controllers/internal_helpers.rb +129 -0
  37. data/lib/devise/controllers/url_helpers.rb +41 -0
  38. data/lib/devise/encryptors/authlogic_sha512.rb +21 -0
  39. data/lib/devise/encryptors/base.rb +20 -0
  40. data/lib/devise/encryptors/bcrypt.rb +21 -0
  41. data/lib/devise/encryptors/clearance_sha1.rb +19 -0
  42. data/lib/devise/encryptors/restful_authentication_sha1.rb +22 -0
  43. data/lib/devise/encryptors/sha1.rb +27 -0
  44. data/lib/devise/encryptors/sha512.rb +27 -0
  45. data/lib/devise/failure_app.rb +72 -0
  46. data/lib/devise/hooks/activatable.rb +15 -0
  47. data/lib/devise/hooks/rememberable.rb +33 -0
  48. data/lib/devise/hooks/timeoutable.rb +18 -0
  49. data/lib/devise/hooks/trackable.rb +18 -0
  50. data/lib/devise/locales/en.yml +35 -0
  51. data/lib/devise/mapping.rb +130 -0
  52. data/lib/devise/models.rb +117 -0
  53. data/lib/devise/models/activatable.rb +16 -0
  54. data/lib/devise/models/confirmable.rb +167 -0
  55. data/lib/devise/models/database_authenticatable.rb +144 -0
  56. data/lib/devise/models/http_authenticatable.rb +23 -0
  57. data/lib/devise/models/lockable.rb +150 -0
  58. data/lib/devise/models/recoverable.rb +80 -0
  59. data/lib/devise/models/registerable.rb +8 -0
  60. data/lib/devise/models/rememberable.rb +92 -0
  61. data/lib/devise/models/timeoutable.rb +28 -0
  62. data/lib/devise/models/token_authenticatable.rb +89 -0
  63. data/lib/devise/models/trackable.rb +16 -0
  64. data/lib/devise/models/validatable.rb +39 -0
  65. data/lib/devise/orm/active_record.rb +41 -0
  66. data/lib/devise/orm/data_mapper.rb +83 -0
  67. data/lib/devise/orm/mongo_mapper.rb +52 -0
  68. data/lib/devise/rails.rb +14 -0
  69. data/lib/devise/rails/routes.rb +133 -0
  70. data/lib/devise/rails/warden_compat.rb +63 -0
  71. data/lib/devise/schema.rb +73 -0
  72. data/lib/devise/strategies/base.rb +16 -0
  73. data/lib/devise/strategies/database_authenticatable.rb +36 -0
  74. data/lib/devise/strategies/http_authenticatable.rb +59 -0
  75. data/lib/devise/strategies/rememberable.rb +37 -0
  76. data/lib/devise/strategies/token_authenticatable.rb +37 -0
  77. data/lib/devise/test_helpers.rb +90 -0
  78. data/lib/devise/version.rb +3 -0
  79. data/rails/init.rb +2 -0
  80. data/test/controllers/helpers_test.rb +184 -0
  81. data/test/controllers/internal_helpers_test.rb +55 -0
  82. data/test/controllers/url_helpers_test.rb +47 -0
  83. data/test/devise_test.rb +74 -0
  84. data/test/encryptors_test.rb +31 -0
  85. data/test/failure_app_test.rb +44 -0
  86. data/test/integration/authenticatable_test.rb +340 -0
  87. data/test/integration/confirmable_test.rb +97 -0
  88. data/test/integration/http_authenticatable_test.rb +52 -0
  89. data/test/integration/lockable_test.rb +102 -0
  90. data/test/integration/rack_middleware_test.rb +47 -0
  91. data/test/integration/recoverable_test.rb +141 -0
  92. data/test/integration/registerable_test.rb +144 -0
  93. data/test/integration/rememberable_test.rb +82 -0
  94. data/test/integration/timeoutable_test.rb +68 -0
  95. data/test/integration/token_authenticatable_test.rb +55 -0
  96. data/test/integration/trackable_test.rb +64 -0
  97. data/test/mailers/confirmation_instructions_test.rb +86 -0
  98. data/test/mailers/reset_password_instructions_test.rb +68 -0
  99. data/test/mailers/unlock_instructions_test.rb +62 -0
  100. data/test/mapping_test.rb +158 -0
  101. data/test/models/authenticatable_test.rb +180 -0
  102. data/test/models/confirmable_test.rb +228 -0
  103. data/test/models/lockable_test.rb +202 -0
  104. data/test/models/recoverable_test.rb +138 -0
  105. data/test/models/rememberable_test.rb +135 -0
  106. data/test/models/timeoutable_test.rb +28 -0
  107. data/test/models/token_authenticatable_test.rb +51 -0
  108. data/test/models/trackable_test.rb +5 -0
  109. data/test/models/validatable_test.rb +106 -0
  110. data/test/models_test.rb +70 -0
  111. data/test/orm/active_record.rb +31 -0
  112. data/test/orm/mongo_mapper.rb +20 -0
  113. data/test/rails_app/app/active_record/admin.rb +7 -0
  114. data/test/rails_app/app/active_record/user.rb +7 -0
  115. data/test/rails_app/app/controllers/admins_controller.rb +6 -0
  116. data/test/rails_app/app/controllers/application_controller.rb +12 -0
  117. data/test/rails_app/app/controllers/home_controller.rb +4 -0
  118. data/test/rails_app/app/controllers/users_controller.rb +16 -0
  119. data/test/rails_app/app/helpers/application_helper.rb +3 -0
  120. data/test/rails_app/app/mongo_mapper/admin.rb +13 -0
  121. data/test/rails_app/app/mongo_mapper/user.rb +14 -0
  122. data/test/rails_app/config/boot.rb +110 -0
  123. data/test/rails_app/config/environment.rb +42 -0
  124. data/test/rails_app/config/environments/development.rb +17 -0
  125. data/test/rails_app/config/environments/production.rb +28 -0
  126. data/test/rails_app/config/environments/test.rb +28 -0
  127. data/test/rails_app/config/initializers/devise.rb +82 -0
  128. data/test/rails_app/config/initializers/inflections.rb +2 -0
  129. data/test/rails_app/config/initializers/new_rails_defaults.rb +24 -0
  130. data/test/rails_app/config/initializers/session_store.rb +15 -0
  131. data/test/rails_app/config/routes.rb +25 -0
  132. data/test/routes_test.rb +131 -0
  133. data/test/support/assertions_helper.rb +37 -0
  134. data/test/support/integration_tests_helper.rb +71 -0
  135. data/test/support/test_silencer.rb +5 -0
  136. data/test/support/tests_helper.rb +39 -0
  137. data/test/test_helper.rb +21 -0
  138. data/test/test_helpers_test.rb +57 -0
  139. metadata +279 -0
@@ -0,0 +1,28 @@
1
+ require 'test/test_helper'
2
+
3
+ class TimeoutableTest < ActiveSupport::TestCase
4
+
5
+ test 'should be expired' do
6
+ assert new_user.timedout?(31.minutes.ago)
7
+ end
8
+
9
+ test 'should not be expired' do
10
+ assert_not new_user.timedout?(29.minutes.ago)
11
+ end
12
+
13
+ test 'should not be expired when params is nil' do
14
+ assert_not new_user.timedout?(nil)
15
+ end
16
+
17
+ test 'fallback to Devise config option' do
18
+ swap Devise, :timeout_in => 1.minute do
19
+ user = new_user
20
+ assert user.timedout?(2.minutes.ago)
21
+ assert_not user.timedout?(30.seconds.ago)
22
+
23
+ Devise.timeout_in = 5.minutes
24
+ assert_not user.timedout?(2.minutes.ago)
25
+ assert user.timedout?(6.minutes.ago)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,51 @@
1
+ require 'test/test_helper'
2
+
3
+ class TokenAuthenticatableTest < ActiveSupport::TestCase
4
+
5
+ test 'should generate friendly authentication token on create' do
6
+ User.expects(:authentication_token).returns(VALID_AUTHENTICATION_TOKEN)
7
+ user = create_user
8
+ assert_present user.authentication_token
9
+ assert_equal VALID_AUTHENTICATION_TOKEN, user.authentication_token
10
+ end
11
+
12
+ test 'should reset authentication token' do
13
+ user = new_user
14
+ user.reset_authentication_token
15
+ previous_token = user.authentication_token
16
+ user.reset_authentication_token
17
+ assert_not_equal previous_token, user.authentication_token
18
+ end
19
+
20
+ test 'should ensure authentication token' do
21
+ user = new_user
22
+ user.ensure_authentication_token
23
+ previous_token = user.authentication_token
24
+ user.ensure_authentication_token
25
+ assert_equal previous_token, user.authentication_token
26
+ end
27
+
28
+ test 'should test for a valid authentication token' do
29
+ User.expects(:authentication_token).returns(VALID_AUTHENTICATION_TOKEN)
30
+ user = create_user
31
+ assert user.valid_authentication_token?(VALID_AUTHENTICATION_TOKEN)
32
+ assert_not user.valid_authentication_token?(VALID_AUTHENTICATION_TOKEN.reverse)
33
+ end
34
+
35
+ test 'should authenticate a valid user with authentication token and return it' do
36
+ User.expects(:authentication_token).returns(VALID_AUTHENTICATION_TOKEN)
37
+ user = create_user
38
+ user.confirm!
39
+ authenticated_user = User.authenticate_with_token(:auth_token => user.authentication_token)
40
+ assert_equal authenticated_user, user
41
+ end
42
+
43
+ test 'should return nil when authenticating an invalid user by authentication token' do
44
+ User.expects(:authentication_token).returns(VALID_AUTHENTICATION_TOKEN)
45
+ user = create_user
46
+ user.confirm!
47
+ authenticated_user = User.authenticate_with_token(:auth_token => user.authentication_token.reverse)
48
+ assert_nil authenticated_user
49
+ end
50
+
51
+ end
@@ -0,0 +1,5 @@
1
+ require 'test/test_helper'
2
+
3
+ class TrackableTest < ActiveSupport::TestCase
4
+
5
+ end
@@ -0,0 +1,106 @@
1
+ require 'test/test_helper'
2
+
3
+ class ValidatableTest < ActiveSupport::TestCase
4
+ extend Devise::TestSilencer if [:mongo_mapper, :data_mapper].include?(DEVISE_ORM)
5
+
6
+ test 'should require email to be set' do
7
+ user = new_user(:email => nil)
8
+ assert user.invalid?
9
+ assert user.errors[:email]
10
+ assert_equal 'can\'t be blank', user.errors[:email]
11
+ end
12
+
13
+ test 'should require uniqueness of email, allowing blank' do
14
+ existing_user = create_user
15
+ user = new_user(:email => '')
16
+ assert user.invalid?
17
+ assert_not_equal 'has already been taken', user.errors[:email]
18
+ user.email = existing_user.email
19
+ assert user.invalid?
20
+ assert user.errors[:email]
21
+ assert_equal 1, [*user.errors[:email]].size
22
+ assert_equal 'has already been taken', user.errors[:email]
23
+ end
24
+
25
+ test 'should require correct email format, allowing blank' do
26
+ user = new_user(:email => '')
27
+ assert user.invalid?
28
+ assert_not_equal 'is invalid', user.errors[:email]
29
+ %w(invalid_email_format email@invalid invalid$character@mail.com other@not 123).each do |email|
30
+ user.email = email
31
+ assert user.invalid?, 'should be invalid with email ' << email
32
+ assert user.errors[:email]
33
+ assert_equal 1, [*user.errors[:email]].size
34
+ assert_equal 'is invalid', user.errors[:email]
35
+ end
36
+ end
37
+
38
+ test 'should accept valid emails' do
39
+ %w(a.b.c@example.com test_mail@gmail.com any@any.net email@test.br 123@mail.test).each do |email|
40
+ user = new_user(:email => email)
41
+ assert user.valid?, 'should be valid with email ' << email
42
+ assert_nil user.errors[:email]
43
+ end
44
+ end
45
+
46
+ test 'should require password to be set when creating a new record' do
47
+ user = new_user(:password => '', :password_confirmation => '')
48
+ assert user.invalid?
49
+ assert user.errors[:password]
50
+ assert_equal 'can\'t be blank', user.errors[:password]
51
+ end
52
+
53
+ test 'should require confirmation to be set when creating a new record' do
54
+ user = new_user(:password => 'new_password', :password_confirmation => 'blabla')
55
+ assert user.invalid?
56
+ assert user.errors[:password]
57
+ assert_equal 'doesn\'t match confirmation', user.errors[:password]
58
+ end
59
+
60
+ test 'should require password when updating/reseting password' do
61
+ user = create_user
62
+ user.password = ''
63
+ user.password_confirmation = ''
64
+ assert user.invalid?
65
+ assert user.errors[:password]
66
+ assert_equal 'can\'t be blank', user.errors[:password]
67
+ end
68
+
69
+ test 'should require confirmation when updating/reseting password' do
70
+ user = create_user
71
+ user.password_confirmation = 'another_password'
72
+ assert user.invalid?
73
+ assert user.errors[:password]
74
+ assert_equal 'doesn\'t match confirmation', user.errors[:password]
75
+ end
76
+
77
+ test 'should require a password with minimum of 6 characters' do
78
+ user = new_user(:password => '12345', :password_confirmation => '12345')
79
+ assert user.invalid?
80
+ assert user.errors[:password]
81
+ assert_equal 'is too short (minimum is 6 characters)', user.errors[:password]
82
+ end
83
+
84
+ test 'should require a password with maximum of 20 characters long' do
85
+ user = new_user(:password => 'x'*21, :password_confirmation => 'x'*21)
86
+ assert user.invalid?
87
+ assert user.errors[:password]
88
+ assert_equal 'is too long (maximum is 20 characters)', user.errors[:password]
89
+ end
90
+
91
+ test 'should not require password length when it\'s not changed' do
92
+ user = create_user.reload
93
+ user.password = user.password_confirmation = nil
94
+ assert user.valid?
95
+ user.password_confirmation = 'confirmation'
96
+ assert user.invalid?
97
+ assert user.errors[:password]
98
+ assert_not user.errors[:password].to_a.include?('is too short (minimum is 6 characters)')
99
+ end
100
+
101
+ test 'shuold not be included in objects with invalid API' do
102
+ assert_raise RuntimeError do
103
+ Class.new.send :include, Devise::Models::Validatable
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,70 @@
1
+ require 'test/test_helper'
2
+
3
+ class Configurable < User
4
+ devise :database_authenticatable, :confirmable, :rememberable, :timeoutable, :lockable,
5
+ :stretches => 15, :pepper => 'abcdef', :confirm_within => 5.days,
6
+ :remember_for => 7.days, :timeout_in => 15.minutes, :unlock_in => 10.days
7
+ end
8
+
9
+ class ActiveRecordTest < ActiveSupport::TestCase
10
+ def include_module?(klass, mod)
11
+ klass.devise_modules.include?(mod) &&
12
+ klass.included_modules.include?(Devise::Models::const_get(mod.to_s.classify))
13
+ end
14
+
15
+ def assert_include_modules(klass, *modules)
16
+ modules.each do |mod|
17
+ assert include_module?(klass, mod)
18
+ end
19
+
20
+ (Devise::ALL - modules).each do |mod|
21
+ assert_not include_module?(klass, mod)
22
+ end
23
+ end
24
+
25
+ test 'add modules cherry pick' do
26
+ assert_include_modules Admin, :database_authenticatable, :registerable, :timeoutable
27
+ end
28
+
29
+ test 'order of module inclusion' do
30
+ correct_module_order = [:database_authenticatable, :registerable, :timeoutable]
31
+ incorrect_module_order = [:database_authenticatable, :timeoutable, :registerable]
32
+
33
+ assert_include_modules Admin, *incorrect_module_order
34
+
35
+ # get module constants from symbol list
36
+ module_constants = correct_module_order.collect { |mod| Devise::Models::const_get(mod.to_s.classify) }
37
+
38
+ # confirm that they adhere to the order in ALL
39
+ # get included modules, filter out the noise, and reverse the order
40
+ assert_equal module_constants, (Admin.included_modules & module_constants).reverse
41
+ end
42
+
43
+ test 'set a default value for stretches' do
44
+ assert_equal 15, Configurable.stretches
45
+ end
46
+
47
+ test 'set a default value for pepper' do
48
+ assert_equal 'abcdef', Configurable.pepper
49
+ end
50
+
51
+ test 'set a default value for confirm_within' do
52
+ assert_equal 5.days, Configurable.confirm_within
53
+ end
54
+
55
+ test 'set a default value for remember_for' do
56
+ assert_equal 7.days, Configurable.remember_for
57
+ end
58
+
59
+ test 'set a default value for timeout_in' do
60
+ assert_equal 15.minutes, Configurable.timeout_in
61
+ end
62
+
63
+ test 'set a default value for unlock_in' do
64
+ assert_equal 10.days, Configurable.unlock_in
65
+ end
66
+
67
+ test 'set null fields on migrations' do
68
+ Admin.create!
69
+ end
70
+ end
@@ -0,0 +1,31 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'rails_app', 'config', 'environment')
2
+ require 'test_help'
3
+
4
+ ActiveRecord::Migration.verbose = false
5
+ ActiveRecord::Base.logger = Logger.new(nil)
6
+ ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
7
+
8
+ ActiveRecord::Schema.define(:version => 1) do
9
+ [:users, :admins, :accounts].each do |table|
10
+ create_table table do |t|
11
+ t.database_authenticatable :null => table == :admins
12
+
13
+ if table != :admin
14
+ t.string :username
15
+ t.confirmable
16
+ t.recoverable
17
+ t.rememberable
18
+ t.trackable
19
+ t.lockable
20
+ t.token_authenticatable
21
+ end
22
+
23
+ t.timestamps
24
+ end
25
+ end
26
+ end
27
+
28
+ class ActiveSupport::TestCase
29
+ self.use_transactional_fixtures = true
30
+ self.use_instantiated_fixtures = false
31
+ end
@@ -0,0 +1,20 @@
1
+ require 'mongo_mapper'
2
+ MongoMapper.database = "devise-test-suite"
3
+ MongoMapper.connection = Mongo::Connection.new('127.0.0.1', 27017)
4
+
5
+ require File.join(File.dirname(__FILE__), '..', 'rails_app', 'config', 'environment')
6
+ require 'test_help'
7
+
8
+ module MongoMapper::Document
9
+ # TODO This should not be required
10
+ def invalid?
11
+ !valid?
12
+ end
13
+ end
14
+
15
+ class ActiveSupport::TestCase
16
+ setup do
17
+ User.delete_all
18
+ Admin.delete_all
19
+ end
20
+ end
@@ -0,0 +1,7 @@
1
+ class Admin < ActiveRecord::Base
2
+ devise :database_authenticatable, :registerable, :timeoutable
3
+
4
+ def self.find_for_authentication(conditions)
5
+ last(:conditions => conditions)
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ class User < ActiveRecord::Base
2
+ devise :database_authenticatable, :http_authenticatable, :confirmable,
3
+ :lockable, :recoverable, :registerable, :rememberable, :timeoutable,
4
+ :token_authenticatable, :trackable, :validatable
5
+
6
+ attr_accessible :username, :email, :password, :password_confirmation
7
+ end
@@ -0,0 +1,6 @@
1
+ class AdminsController < ApplicationController
2
+ before_filter :authenticate_admin!
3
+
4
+ def index
5
+ end
6
+ end
@@ -0,0 +1,12 @@
1
+ # Filters added to this controller apply to all controllers in the application.
2
+ # Likewise, all the methods added will be available for all controllers.
3
+
4
+ class ApplicationController < ActionController::Base
5
+ helper :all # include all helpers, all the time
6
+ protect_from_forgery # See ActionController::RequestForgeryProtection for details
7
+
8
+ # Scrub sensitive parameters from your log
9
+ filter_parameter_logging :password
10
+
11
+ before_filter :current_user
12
+ end
@@ -0,0 +1,4 @@
1
+ class HomeController < ApplicationController
2
+ def index
3
+ end
4
+ end
@@ -0,0 +1,16 @@
1
+ class UsersController < ApplicationController
2
+ before_filter :authenticate_user!
3
+
4
+ def index
5
+ user_session[:cart] = "Cart"
6
+ end
7
+
8
+ def expire
9
+ user_session['last_request_at'] = 31.minutes.ago.utc
10
+ render :text => 'User will be expired on next request'
11
+ end
12
+
13
+ def show
14
+ render :text => current_user.id.to_s
15
+ end
16
+ end
@@ -0,0 +1,3 @@
1
+ # Methods added to this helper will be available to all templates in the application.
2
+ module ApplicationHelper
3
+ end
@@ -0,0 +1,13 @@
1
+ class Admin
2
+ include MongoMapper::Document
3
+ devise :authenticatable, :registerable, :timeoutable
4
+
5
+ def self.find_for_authentication(conditions)
6
+ last(:conditions => conditions)
7
+ end
8
+
9
+ def self.last(options={})
10
+ options.merge!(:order => 'email')
11
+ super options
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ class User
2
+ include MongoMapper::Document
3
+ key :created_at, DateTime
4
+ devise :authenticatable, :http_authenticatable, :confirmable, :lockable, :recoverable,
5
+ :registerable, :rememberable, :timeoutable, :token_authenticatable,
6
+ :trackable, :validatable
7
+ # attr_accessible :username, :email, :password, :password_confirmation
8
+
9
+ def self.last(options={})
10
+ options.merge!(:order => 'email')
11
+ super options
12
+ end
13
+
14
+ end
@@ -0,0 +1,110 @@
1
+ # Don't change this file!
2
+ # Configure your app in config/environment.rb and config/environments/*.rb
3
+
4
+ RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT)
5
+
6
+ module Rails
7
+ class << self
8
+ def boot!
9
+ unless booted?
10
+ preinitialize
11
+ pick_boot.run
12
+ end
13
+ end
14
+
15
+ def booted?
16
+ defined? Rails::Initializer
17
+ end
18
+
19
+ def pick_boot
20
+ (vendor_rails? ? VendorBoot : GemBoot).new
21
+ end
22
+
23
+ def vendor_rails?
24
+ File.exist?("#{RAILS_ROOT}/vendor/rails")
25
+ end
26
+
27
+ def preinitialize
28
+ load(preinitializer_path) if File.exist?(preinitializer_path)
29
+ end
30
+
31
+ def preinitializer_path
32
+ "#{RAILS_ROOT}/config/preinitializer.rb"
33
+ end
34
+ end
35
+
36
+ class Boot
37
+ def run
38
+ load_initializer
39
+ Rails::Initializer.run(:set_load_path)
40
+ end
41
+ end
42
+
43
+ class VendorBoot < Boot
44
+ def load_initializer
45
+ require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer"
46
+ Rails::Initializer.run(:install_gem_spec_stubs)
47
+ Rails::GemDependency.add_frozen_gem_path
48
+ end
49
+ end
50
+
51
+ class GemBoot < Boot
52
+ def load_initializer
53
+ self.class.load_rubygems
54
+ load_rails_gem
55
+ require 'initializer'
56
+ end
57
+
58
+ def load_rails_gem
59
+ if version = self.class.gem_version
60
+ gem 'rails', version
61
+ else
62
+ gem 'rails'
63
+ end
64
+ rescue Gem::LoadError => load_error
65
+ $stderr.puts %(Missing the Rails #{version} gem. Please `gem install -v=#{version} rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.)
66
+ exit 1
67
+ end
68
+
69
+ class << self
70
+ def rubygems_version
71
+ Gem::RubyGemsVersion rescue nil
72
+ end
73
+
74
+ def gem_version
75
+ if defined? RAILS_GEM_VERSION
76
+ RAILS_GEM_VERSION
77
+ elsif ENV.include?('RAILS_GEM_VERSION')
78
+ ENV['RAILS_GEM_VERSION']
79
+ else
80
+ parse_gem_version(read_environment_rb)
81
+ end
82
+ end
83
+
84
+ def load_rubygems
85
+ min_version = '1.3.2'
86
+ require 'rubygems'
87
+ unless rubygems_version >= min_version
88
+ $stderr.puts %Q(Rails requires RubyGems >= #{min_version} (you have #{rubygems_version}). Please `gem update --system` and try again.)
89
+ exit 1
90
+ end
91
+
92
+ rescue LoadError
93
+ $stderr.puts %Q(Rails requires RubyGems >= #{min_version}. Please install RubyGems and try again: http://rubygems.rubyforge.org)
94
+ exit 1
95
+ end
96
+
97
+ def parse_gem_version(text)
98
+ $1 if text =~ /^[^#]*RAILS_GEM_VERSION\s*=\s*["']([!~<>=]*\s*[\d.]+)["']/
99
+ end
100
+
101
+ private
102
+ def read_environment_rb
103
+ File.read("#{RAILS_ROOT}/config/environment.rb")
104
+ end
105
+ end
106
+ end
107
+ end
108
+
109
+ # All that for this:
110
+ Rails.boot!