railties 7.0.10 → 7.1.0.beta1

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 (162) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +565 -234
  3. data/MIT-LICENSE +1 -1
  4. data/RDOC_MAIN.md +99 -0
  5. data/README.rdoc +4 -4
  6. data/lib/minitest/rails_plugin.rb +63 -0
  7. data/lib/rails/api/task.rb +35 -4
  8. data/lib/rails/app_updater.rb +1 -1
  9. data/lib/rails/application/bootstrap.rb +12 -3
  10. data/lib/rails/application/configuration.rb +179 -67
  11. data/lib/rails/application/default_middleware_stack.rb +8 -2
  12. data/lib/rails/application/dummy_config.rb +19 -0
  13. data/lib/rails/application/finisher.rb +40 -33
  14. data/lib/rails/application.rb +116 -31
  15. data/lib/rails/backtrace_cleaner.rb +1 -1
  16. data/lib/rails/cli.rb +5 -2
  17. data/lib/rails/command/actions.rb +10 -12
  18. data/lib/rails/command/base.rb +55 -53
  19. data/lib/rails/command/environment_argument.rb +32 -16
  20. data/lib/rails/command/helpers/editor.rb +17 -12
  21. data/lib/rails/command.rb +84 -33
  22. data/lib/rails/commands/about/about_command.rb +14 -0
  23. data/lib/rails/commands/application/application_command.rb +2 -0
  24. data/lib/rails/commands/console/console_command.rb +14 -14
  25. data/lib/rails/commands/credentials/USAGE +53 -55
  26. data/lib/rails/commands/credentials/credentials_command/diffing.rb +5 -3
  27. data/lib/rails/commands/credentials/credentials_command.rb +64 -70
  28. data/lib/rails/commands/db/system/change/change_command.rb +2 -1
  29. data/lib/rails/commands/dbconsole/dbconsole_command.rb +25 -115
  30. data/lib/rails/commands/destroy/destroy_command.rb +3 -2
  31. data/lib/rails/commands/dev/dev_command.rb +1 -6
  32. data/lib/rails/commands/encrypted/USAGE +15 -20
  33. data/lib/rails/commands/encrypted/encrypted_command.rb +46 -35
  34. data/lib/rails/commands/gem_help/USAGE +16 -0
  35. data/lib/rails/commands/gem_help/gem_help_command.rb +13 -0
  36. data/lib/rails/commands/generate/generate_command.rb +2 -2
  37. data/lib/rails/commands/help/USAGE +13 -13
  38. data/lib/rails/commands/help/help_command.rb +21 -2
  39. data/lib/rails/commands/initializers/initializers_command.rb +1 -4
  40. data/lib/rails/commands/middleware/middleware_command.rb +17 -0
  41. data/lib/rails/commands/new/new_command.rb +2 -0
  42. data/lib/rails/commands/notes/notes_command.rb +2 -1
  43. data/lib/rails/commands/plugin/plugin_command.rb +2 -0
  44. data/lib/rails/commands/rake/rake_command.rb +25 -22
  45. data/lib/rails/commands/restart/restart_command.rb +14 -0
  46. data/lib/rails/commands/routes/routes_command.rb +13 -1
  47. data/lib/rails/commands/runner/USAGE +14 -12
  48. data/lib/rails/commands/runner/runner_command.rb +32 -20
  49. data/lib/rails/commands/secret/secret_command.rb +13 -0
  50. data/lib/rails/commands/secrets/USAGE +44 -49
  51. data/lib/rails/commands/secrets/secrets_command.rb +19 -38
  52. data/lib/rails/commands/server/server_command.rb +32 -31
  53. data/lib/rails/commands/test/USAGE +14 -0
  54. data/lib/rails/commands/test/test_command.rb +56 -14
  55. data/lib/rails/commands/unused_routes/unused_routes_command.rb +75 -0
  56. data/lib/rails/commands/version/version_command.rb +1 -0
  57. data/lib/rails/configuration.rb +5 -5
  58. data/lib/rails/console/app.rb +1 -4
  59. data/lib/rails/deprecator.rb +7 -0
  60. data/lib/rails/engine/configuration.rb +5 -0
  61. data/lib/rails/engine.rb +36 -16
  62. data/lib/rails/gem_version.rb +4 -4
  63. data/lib/rails/generators/actions.rb +6 -15
  64. data/lib/rails/generators/active_model.rb +14 -28
  65. data/lib/rails/generators/app_base.rb +353 -82
  66. data/lib/rails/generators/app_name.rb +3 -14
  67. data/lib/rails/generators/base.rb +17 -9
  68. data/lib/rails/generators/database.rb +19 -1
  69. data/lib/rails/generators/erb/mailer/templates/layout.html.erb.tt +1 -1
  70. data/lib/rails/generators/generated_attribute.rb +2 -1
  71. data/lib/rails/generators/migration.rb +1 -2
  72. data/lib/rails/generators/model_helpers.rb +2 -1
  73. data/lib/rails/generators/rails/app/USAGE +15 -6
  74. data/lib/rails/generators/rails/app/app_generator.rb +84 -60
  75. data/lib/rails/generators/rails/app/templates/Dockerfile.tt +107 -0
  76. data/lib/rails/generators/rails/app/templates/Gemfile.tt +9 -11
  77. data/lib/rails/generators/rails/app/templates/app/views/layouts/mailer.html.erb.tt +1 -1
  78. data/lib/rails/generators/rails/app/templates/bin/setup.tt +10 -1
  79. data/lib/rails/generators/rails/app/templates/config/application.rb.tt +4 -17
  80. data/lib/rails/generators/rails/app/templates/config/databases/jdbcsqlite3.yml.tt +3 -3
  81. data/lib/rails/generators/rails/app/templates/config/databases/postgresql.yml.tt +0 -2
  82. data/lib/rails/generators/rails/app/templates/config/databases/sqlite3.yml.tt +3 -3
  83. data/lib/rails/generators/rails/app/templates/config/databases/trilogy.yml.tt +59 -0
  84. data/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt +10 -2
  85. data/lib/rails/generators/rails/app/templates/config/environments/production.rb.tt +28 -24
  86. data/lib/rails/generators/rails/app/templates/config/environments/test.rb.tt +11 -7
  87. data/lib/rails/generators/rails/app/templates/config/initializers/assets.rb.tt +2 -0
  88. data/lib/rails/generators/rails/app/templates/config/initializers/content_security_policy.rb.tt +2 -2
  89. data/lib/rails/generators/rails/app/templates/config/initializers/cors.rb.tt +1 -1
  90. data/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_7_1.rb.tt +223 -0
  91. data/lib/rails/generators/rails/app/templates/config/initializers/permissions_policy.rb.tt +11 -9
  92. data/lib/rails/generators/rails/app/templates/config/locales/en.yml +11 -13
  93. data/lib/rails/generators/rails/app/templates/config/puma.rb.tt +10 -19
  94. data/lib/rails/generators/rails/app/templates/config/routes.rb.tt +4 -0
  95. data/lib/rails/generators/rails/app/templates/db/seeds.rb.tt +6 -4
  96. data/lib/rails/generators/rails/app/templates/docker-entrypoint.tt +10 -0
  97. data/lib/rails/generators/rails/app/templates/dockerignore.tt +43 -0
  98. data/lib/rails/generators/rails/app/templates/gitignore.tt +1 -9
  99. data/lib/rails/generators/rails/app/templates/node-version.tt +1 -0
  100. data/lib/rails/generators/rails/app/templates/test/channels/application_cable/connection_test.rb.tt +10 -8
  101. data/lib/rails/generators/rails/app/templates/test/test_helper.rb.tt +9 -7
  102. data/lib/rails/generators/rails/application_record/application_record_generator.rb +4 -0
  103. data/lib/rails/generators/rails/benchmark/benchmark_generator.rb +2 -1
  104. data/lib/rails/generators/rails/controller/USAGE +12 -4
  105. data/lib/rails/generators/rails/controller/controller_generator.rb +5 -0
  106. data/lib/rails/generators/rails/controller/templates/controller.rb.tt +1 -1
  107. data/lib/rails/generators/rails/credentials/credentials_generator.rb +29 -24
  108. data/lib/rails/generators/rails/credentials/templates/credentials.yml.tt +8 -0
  109. data/lib/rails/generators/rails/encryption_key_file/encryption_key_file_generator.rb +1 -2
  110. data/lib/rails/generators/rails/migration/USAGE +21 -11
  111. data/lib/rails/generators/rails/model/model_generator.rb +4 -0
  112. data/lib/rails/generators/rails/plugin/USAGE +17 -6
  113. data/lib/rails/generators/rails/plugin/plugin_generator.rb +5 -15
  114. data/lib/rails/generators/rails/plugin/templates/Gemfile.tt +2 -2
  115. data/lib/rails/generators/rails/plugin/templates/MIT-LICENSE.tt +1 -1
  116. data/lib/rails/generators/rails/plugin/templates/bin/rails.tt +1 -17
  117. data/lib/rails/generators/rails/plugin/templates/gitignore.tt +0 -2
  118. data/lib/rails/generators/rails/plugin/templates/test/test_helper.rb.tt +4 -4
  119. data/lib/rails/generators/rails/resource/resource_generator.rb +6 -0
  120. data/lib/rails/generators/rails/scaffold/scaffold_generator.rb +2 -1
  121. data/lib/rails/generators/rails/scaffold_controller/scaffold_controller_generator.rb +1 -1
  122. data/lib/rails/generators/test_case.rb +2 -2
  123. data/lib/rails/generators/test_unit/scaffold/scaffold_generator.rb +1 -1
  124. data/lib/rails/generators/testing/{behaviour.rb → behavior.rb} +4 -1
  125. data/lib/rails/generators.rb +6 -14
  126. data/lib/rails/health_controller.rb +55 -0
  127. data/lib/rails/info.rb +1 -1
  128. data/lib/rails/info_controller.rb +31 -11
  129. data/lib/rails/mailers_controller.rb +15 -5
  130. data/lib/rails/rack/logger.rb +15 -12
  131. data/lib/rails/rackup/server.rb +15 -0
  132. data/lib/rails/railtie/configuration.rb +14 -1
  133. data/lib/rails/railtie.rb +18 -18
  134. data/lib/rails/ruby_version_check.rb +2 -0
  135. data/lib/rails/source_annotation_extractor.rb +67 -18
  136. data/lib/rails/tasks/engine.rake +8 -8
  137. data/lib/rails/tasks/framework.rake +4 -10
  138. data/lib/rails/tasks/log.rake +1 -1
  139. data/lib/rails/tasks/misc.rake +3 -14
  140. data/lib/rails/tasks/statistics.rake +5 -4
  141. data/lib/rails/tasks/tmp.rake +5 -5
  142. data/lib/rails/tasks/zeitwerk.rake +1 -1
  143. data/lib/rails/tasks.rb +0 -2
  144. data/lib/rails/templates/rails/mailers/email.html.erb +25 -0
  145. data/lib/rails/templates/rails/mailers/index.html.erb +14 -7
  146. data/lib/rails/templates/rails/mailers/mailer.html.erb +11 -5
  147. data/lib/rails/templates/rails/welcome/index.html.erb +1 -0
  148. data/lib/rails/test_help.rb +7 -7
  149. data/lib/rails/test_unit/line_filtering.rb +1 -1
  150. data/lib/rails/test_unit/reporter.rb +6 -2
  151. data/lib/rails/test_unit/runner.rb +36 -18
  152. data/lib/rails/test_unit/test_parser.rb +88 -0
  153. data/lib/rails/test_unit/testing.rake +13 -33
  154. data/lib/rails/version.rb +1 -1
  155. data/lib/rails.rb +15 -15
  156. metadata +69 -31
  157. data/RDOC_MAIN.rdoc +0 -97
  158. data/lib/rails/application/dummy_erb_compiler.rb +0 -18
  159. data/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_7_0.rb.tt +0 -143
  160. data/lib/rails/generators/rails/model/USAGE +0 -113
  161. data/lib/rails/tasks/middleware.rake +0 -9
  162. data/lib/rails/tasks/restart.rake +0 -9
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # :enddoc:
4
+
3
5
  # Make double-sure the RAILS_ENV is not set to production,
4
6
  # so fixtures aren't loaded into that environment
5
7
  abort("Abort testing: Your Rails environment is running in production mode!") if Rails.env.production?
@@ -24,12 +26,12 @@ if defined?(ActiveRecord::Base)
24
26
  include ActiveRecord::TestDatabases
25
27
  include ActiveRecord::TestFixtures
26
28
 
27
- self.fixture_path = "#{Rails.root}/test/fixtures/"
28
- self.file_fixture_path = fixture_path + "files"
29
+ self.fixture_paths << "#{Rails.root}/test/fixtures/"
30
+ self.file_fixture_path = "#{Rails.root}/test/fixtures/files"
29
31
  end
30
32
 
31
33
  ActiveSupport.on_load(:action_dispatch_integration_test) do
32
- self.fixture_path = ActiveSupport::TestCase.fixture_path
34
+ self.fixture_paths += ActiveSupport::TestCase.fixture_paths
33
35
  end
34
36
  else
35
37
  ActiveSupport.on_load(:active_support_test_case) do
@@ -37,17 +39,15 @@ else
37
39
  end
38
40
  end
39
41
 
40
- # :enddoc:
41
-
42
42
  ActiveSupport.on_load(:action_controller_test_case) do
43
- def before_setup # :nodoc:
43
+ def before_setup
44
44
  @routes = Rails.application.routes
45
45
  super
46
46
  end
47
47
  end
48
48
 
49
49
  ActiveSupport.on_load(:action_dispatch_integration_test) do
50
- def before_setup # :nodoc:
50
+ def before_setup
51
51
  @routes = Rails.application.routes
52
52
  super
53
53
  end
@@ -5,7 +5,7 @@ require "rails/test_unit/runner"
5
5
  module Rails
6
6
  module LineFiltering # :nodoc:
7
7
  def run(reporter, options = {})
8
- options[:filter] = Rails::TestUnit::Runner.compose_filter(self, options[:filter])
8
+ options = options.merge(filter: Rails::TestUnit::Runner.compose_filter(self, options[:filter]))
9
9
 
10
10
  super
11
11
  end
@@ -6,7 +6,7 @@ require "minitest"
6
6
  module Rails
7
7
  class TestUnitReporter < Minitest::StatisticsReporter
8
8
  class_attribute :app_root
9
- class_attribute :executable, default: "rails test"
9
+ class_attribute :executable, default: "bin/rails test"
10
10
 
11
11
  def record(result)
12
12
  super
@@ -52,7 +52,11 @@ module Rails
52
52
  end
53
53
 
54
54
  def relative_path_for(file)
55
- file.sub(/^#{app_root}\/?/, "")
55
+ if app_root
56
+ file.sub(/^#{app_root}\/?/, "")
57
+ else
58
+ file
59
+ end
56
60
  end
57
61
 
58
62
  private
@@ -1,14 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "shellwords"
4
- require "method_source"
5
4
  require "rake/file_list"
6
5
  require "active_support"
7
6
  require "active_support/core_ext/module/attribute_accessors"
7
+ require "active_support/core_ext/range"
8
+ require "rails/test_unit/test_parser"
8
9
 
9
10
  module Rails
10
11
  module TestUnit
11
12
  class Runner
13
+ TEST_FOLDERS = [:models, :helpers, :channels, :controllers, :mailers, :integration, :jobs, :mailboxes]
14
+ PATH_ARGUMENT_PATTERN = %r"^(?!/.+/$)[.\w]*[/\\]"
12
15
  mattr_reader :filters, default: []
13
16
 
14
17
  class << self
@@ -30,9 +33,9 @@ module Rails
30
33
  $VERBOSE = argv.delete_at(w_index) if w_index
31
34
  end
32
35
 
33
- def rake_run(argv = [])
36
+ def run_from_rake(test_command, argv = [])
34
37
  # Ensure the tests run during the Rake Task action, not when the process exits
35
- success = system("rails", "test", *argv, *Shellwords.split(ENV["TESTOPTS"] || ""))
38
+ success = system("rails", test_command, *argv, *Shellwords.split(ENV["TESTOPTS"] || ""))
36
39
  success || exit(false)
37
40
  end
38
41
 
@@ -43,11 +46,14 @@ module Rails
43
46
  end
44
47
 
45
48
  def load_tests(argv)
46
- tests = list_tests(argv)
49
+ patterns = extract_filters(argv)
50
+ tests = list_tests(patterns)
47
51
  tests.to_a.each { |path| require File.expand_path(path) }
48
52
  end
49
53
 
50
54
  def compose_filter(runnable, filter)
55
+ filter = normalize_declarative_test_filter(filter)
56
+
51
57
  if filters.any? { |_, lines| lines.any? }
52
58
  CompositeFilter.new(runnable, filter, filters)
53
59
  else
@@ -59,11 +65,11 @@ module Rails
59
65
  def extract_filters(argv)
60
66
  # Extract absolute and relative paths but skip -n /.*/ regexp filters.
61
67
  argv.filter_map do |path|
62
- next unless path_argument?(path) && !regexp_filter?(path)
68
+ next unless path_argument?(path)
63
69
 
64
70
  path = path.tr("\\", "/")
65
71
  case
66
- when /(:\d+)+$/.match?(path)
72
+ when /(:\d+(-\d+)?)+$/.match?(path)
67
73
  file, *lines = path.split(":")
68
74
  filters << [ file, lines ]
69
75
  file
@@ -89,16 +95,27 @@ module Rails
89
95
  end
90
96
 
91
97
  def path_argument?(arg)
92
- %r"^[/\\]?\w+[/\\]".match?(arg)
98
+ PATH_ARGUMENT_PATTERN.match?(arg)
93
99
  end
94
100
 
95
- def list_tests(argv)
96
- patterns = extract_filters(argv)
97
-
101
+ def list_tests(patterns)
98
102
  tests = Rake::FileList[patterns.any? ? patterns : default_test_glob]
99
103
  tests.exclude(default_test_exclude_glob) if patterns.empty?
100
104
  tests
101
105
  end
106
+
107
+ def normalize_declarative_test_filter(filter)
108
+ if filter.is_a?(String)
109
+ if regexp_filter?(filter)
110
+ # Minitest::Spec::DSL#it does not replace whitespace in method
111
+ # names, so match unmodified method names as well.
112
+ filter = filter.gsub(/\s+/, "_").delete_suffix("/") + "|" + filter.delete_prefix("/")
113
+ elsif !filter.start_with?("test_")
114
+ filter = "test_#{filter.gsub(/\s+/, "_")}"
115
+ end
116
+ end
117
+ filter
118
+ end
102
119
  end
103
120
  end
104
121
 
@@ -139,17 +156,21 @@ module Rails
139
156
  end
140
157
 
141
158
  class Filter # :nodoc:
142
- def initialize(runnable, file, line)
159
+ def initialize(runnable, file, line_or_range)
143
160
  @runnable, @file = runnable, File.expand_path(file)
144
- @line = line.to_i if line
161
+ if line_or_range
162
+ first, last = line_or_range.split("-").map(&:to_i)
163
+ last ||= first
164
+ @line_range = Range.new(first, last)
165
+ end
145
166
  end
146
167
 
147
168
  def ===(method)
148
169
  return unless @runnable.method_defined?(method)
149
170
 
150
- if @line
171
+ if @line_range
151
172
  test_file, test_range = definition_for(@runnable.instance_method(method))
152
- test_file == @file && test_range.include?(@line)
173
+ test_file == @file && @line_range.overlaps?(test_range)
153
174
  else
154
175
  @runnable.instance_method(method).source_location.first == @file
155
176
  end
@@ -157,10 +178,7 @@ module Rails
157
178
 
158
179
  private
159
180
  def definition_for(method)
160
- file, start_line = method.source_location
161
- end_line = method.source.count("\n") + start_line - 1
162
-
163
- return file, start_line..end_line
181
+ TestParser.definition_for(method)
164
182
  end
165
183
  end
166
184
  end
@@ -0,0 +1,88 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "ripper"
4
+
5
+ module Rails
6
+ module TestUnit
7
+ # Parse a test file to extract the line ranges of all tests in both
8
+ # method-style (def test_foo) and declarative-style (test "foo" do)
9
+ class TestParser < Ripper # :nodoc:
10
+ # Helper to translate a method object into the path and line range where
11
+ # the method was defined.
12
+ def self.definition_for(method_obj)
13
+ path, begin_line = method_obj.source_location
14
+ begins_to_ends = new(File.read(path), path).parse
15
+ return unless end_line = begins_to_ends[begin_line]
16
+ [path, (begin_line..end_line)]
17
+ end
18
+
19
+ def initialize(*)
20
+ # A hash mapping the 1-indexed line numbers that tests start on to where they end.
21
+ @begins_to_ends = {}
22
+ super
23
+ end
24
+
25
+ def parse
26
+ super
27
+ @begins_to_ends
28
+ end
29
+
30
+ # method test e.g. `def test_some_description`
31
+ # This event's first argument gets the `ident` node containing the method
32
+ # name, which we have overridden to return the line number of the ident
33
+ # instead.
34
+ def on_def(begin_line, *)
35
+ @begins_to_ends[begin_line] = lineno
36
+ end
37
+
38
+ # Everything past this point is to support declarative tests, which
39
+ # require more work to get right because of the many different ways
40
+ # methods can be invoked in ruby, all of which are parsed differently.
41
+ #
42
+ # The approach is just to store the current line number when the
43
+ # "test" method is called and pass it up the tree so it's available at
44
+ # the point when we also know the line where the associated block ends.
45
+
46
+ def on_method_add_block(begin_line, end_line)
47
+ if begin_line && end_line
48
+ @begins_to_ends[begin_line] = end_line
49
+ end
50
+ end
51
+
52
+ def on_command_call(*, begin_lineno, _args)
53
+ begin_lineno
54
+ end
55
+
56
+ def first_arg(arg, *)
57
+ arg
58
+ end
59
+
60
+ def just_lineno(*)
61
+ lineno
62
+ end
63
+
64
+ alias on_method_add_arg first_arg
65
+ alias on_command first_arg
66
+ alias on_stmts_add first_arg
67
+ alias on_arg_paren first_arg
68
+ alias on_bodystmt first_arg
69
+
70
+ alias on_ident just_lineno
71
+ alias on_do_block just_lineno
72
+ alias on_stmts_new just_lineno
73
+ alias on_brace_block just_lineno
74
+
75
+ def on_args_new
76
+ []
77
+ end
78
+
79
+ def on_args_add(parts, part)
80
+ parts << part
81
+ end
82
+
83
+ def on_args_add_block(args, *rest)
84
+ args.first
85
+ end
86
+ end
87
+ end
88
+ end
@@ -1,18 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- gem "minitest"
4
3
  require "minitest"
5
4
  require "rails/test_unit/runner"
6
5
 
7
6
  task default: :test
8
7
 
9
- desc "Runs all tests in test folder except system ones"
8
+ desc "Run all tests in test folder except system ones"
10
9
  task :test do
11
- if ENV.key?("TEST")
12
- Rails::TestUnit::Runner.rake_run([ENV["TEST"]])
13
- else
14
- Rails::TestUnit::Runner.rake_run
15
- end
10
+ Rails::TestUnit::Runner.run_from_rake("test", Array(ENV["TEST"]))
16
11
  end
17
12
 
18
13
  namespace :test do
@@ -23,37 +18,22 @@ namespace :test do
23
18
 
24
19
  task run: %w[test]
25
20
 
26
- desc "Run tests quickly, but also reset db"
21
+ desc "Reset the database and run `bin/rails test`"
27
22
  task :db do
28
23
  success = system({ "RAILS_ENV" => ENV.fetch("RAILS_ENV", "test") }, "rake", "db:test:prepare", "test")
29
24
  success || exit(false)
30
25
  end
31
26
 
32
- ["models", "helpers", "channels", "controllers", "mailers", "integration", "jobs", "mailboxes"].each do |name|
33
- task name => "test:prepare" do
34
- Rails::TestUnit::Runner.rake_run(["test/#{name}"])
27
+ [
28
+ *Rails::TestUnit::Runner::TEST_FOLDERS,
29
+ :all,
30
+ :generators,
31
+ :units,
32
+ :functionals,
33
+ :system,
34
+ ].each do |name|
35
+ task name do
36
+ Rails::TestUnit::Runner.run_from_rake("test:#{name}")
35
37
  end
36
38
  end
37
-
38
- desc "Runs all tests, including system tests"
39
- task all: "test:prepare" do
40
- Rails::TestUnit::Runner.rake_run(["test/**/*_test.rb"])
41
- end
42
-
43
- task generators: "test:prepare" do
44
- Rails::TestUnit::Runner.rake_run(["test/lib/generators"])
45
- end
46
-
47
- task units: "test:prepare" do
48
- Rails::TestUnit::Runner.rake_run(["test/models", "test/helpers", "test/unit"])
49
- end
50
-
51
- task functionals: "test:prepare" do
52
- Rails::TestUnit::Runner.rake_run(["test/controllers", "test/mailers", "test/functional"])
53
- end
54
-
55
- desc "Run system tests only"
56
- task system: "test:prepare" do
57
- Rails::TestUnit::Runner.rake_run(["test/system"])
58
- end
59
39
  end
data/lib/rails/version.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  require_relative "gem_version"
4
4
 
5
5
  module Rails
6
- # Returns the currently loaded version of Rails as a string.
6
+ # Returns the currently loaded version of \Rails as a string.
7
7
  def self.version
8
8
  VERSION::STRING
9
9
  end
data/lib/rails.rb CHANGED
@@ -10,8 +10,10 @@ require "active_support/core_ext/module/delegation"
10
10
  require "active_support/core_ext/array/extract_options"
11
11
  require "active_support/core_ext/object/blank"
12
12
 
13
- require "rails/application"
14
13
  require "rails/version"
14
+ require "rails/deprecator"
15
+ require "rails/application"
16
+ require "rails/backtrace_cleaner"
15
17
 
16
18
  require "active_support/railtie"
17
19
  require "action_dispatch/railtie"
@@ -22,10 +24,12 @@ silence_warnings do
22
24
  Encoding.default_internal = Encoding::UTF_8
23
25
  end
24
26
 
27
+ # :include: railties/README.rdoc
25
28
  module Rails
26
29
  extend ActiveSupport::Autoload
27
30
  extend ActiveSupport::Benchmarkable
28
31
 
32
+ autoload :HealthController
29
33
  autoload :Info
30
34
  autoload :InfoController
31
35
  autoload :MailersController
@@ -42,20 +46,16 @@ module Rails
42
46
 
43
47
  delegate :initialize!, :initialized?, to: :application
44
48
 
45
- # The Configuration instance used to configure the Rails environment
49
+ # The Configuration instance used to configure the \Rails environment
46
50
  def configuration
47
51
  application.config
48
52
  end
49
53
 
50
54
  def backtrace_cleaner
51
- @backtrace_cleaner ||= begin
52
- # Relies on Active Support, so we have to lazy load to postpone definition until Active Support has been loaded
53
- require "rails/backtrace_cleaner"
54
- Rails::BacktraceCleaner.new
55
- end
55
+ @backtrace_cleaner ||= Rails::BacktraceCleaner.new
56
56
  end
57
57
 
58
- # Returns a Pathname object of the current Rails project,
58
+ # Returns a Pathname object of the current \Rails project,
59
59
  # otherwise it returns +nil+ if there is no project:
60
60
  #
61
61
  # Rails.root
@@ -64,7 +64,7 @@ module Rails
64
64
  application && application.config.root
65
65
  end
66
66
 
67
- # Returns the current Rails environment.
67
+ # Returns the current \Rails environment.
68
68
  #
69
69
  # Rails.env # => "development"
70
70
  # Rails.env.development? # => true
@@ -73,14 +73,14 @@ module Rails
73
73
  @_env ||= ActiveSupport::EnvironmentInquirer.new(ENV["RAILS_ENV"].presence || ENV["RACK_ENV"].presence || "development")
74
74
  end
75
75
 
76
- # Sets the Rails environment.
76
+ # Sets the \Rails environment.
77
77
  #
78
78
  # Rails.env = "staging" # => "staging"
79
79
  def env=(environment)
80
80
  @_env = ActiveSupport::EnvironmentInquirer.new(environment)
81
81
  end
82
82
 
83
- # Returns the ActiveSupport::ErrorReporter of the current Rails project,
83
+ # Returns the ActiveSupport::ErrorReporter of the current \Rails project,
84
84
  # otherwise it returns +nil+ if there is no project.
85
85
  #
86
86
  # Rails.error.handle(IOError) do
@@ -88,12 +88,12 @@ module Rails
88
88
  # end
89
89
  # Rails.error.report(error)
90
90
  def error
91
- application && application.executor.error_reporter
91
+ ActiveSupport.error_reporter
92
92
  end
93
93
 
94
- # Returns all Rails groups for loading based on:
94
+ # Returns all \Rails groups for loading based on:
95
95
  #
96
- # * The Rails environment;
96
+ # * The \Rails environment;
97
97
  # * The environment variable RAILS_GROUPS;
98
98
  # * The optional envs given as argument and the hash with group dependencies;
99
99
  #
@@ -112,7 +112,7 @@ module Rails
112
112
  end
113
113
 
114
114
  # Returns a Pathname object of the public folder of the current
115
- # Rails project, otherwise it returns +nil+ if there is no project:
115
+ # \Rails project, otherwise it returns +nil+ if there is no project:
116
116
  #
117
117
  # Rails.public_path
118
118
  # # => #<Pathname:/Users/someuser/some/path/project/public>