railties 5.0.0 → 5.1.0

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 (201) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +117 -415
  3. data/MIT-LICENSE +1 -1
  4. data/RDOC_MAIN.rdoc +4 -4
  5. data/exe/rails +2 -2
  6. data/lib/rails/all.rb +1 -1
  7. data/lib/rails/api/generator.rb +28 -0
  8. data/lib/rails/api/task.rb +54 -42
  9. data/lib/rails/app_loader.rb +9 -9
  10. data/lib/rails/application/bootstrap.rb +12 -7
  11. data/lib/rails/application/configuration.rb +56 -52
  12. data/lib/rails/application/default_middleware_stack.rb +3 -5
  13. data/lib/rails/application/finisher.rb +16 -7
  14. data/lib/rails/application/routes_reloader.rb +16 -1
  15. data/lib/rails/application.rb +33 -36
  16. data/lib/rails/application_controller.rb +10 -10
  17. data/lib/rails/backtrace_cleaner.rb +5 -5
  18. data/lib/rails/cli.rb +7 -5
  19. data/lib/rails/code_statistics.rb +17 -17
  20. data/lib/rails/code_statistics_calculator.rb +3 -3
  21. data/lib/rails/command/actions.rb +42 -0
  22. data/lib/rails/command/base.rb +155 -0
  23. data/lib/rails/command/behavior.rb +123 -0
  24. data/lib/rails/command/environment_argument.rb +34 -0
  25. data/lib/rails/command.rb +111 -0
  26. data/lib/rails/commands/application/application_command.rb +29 -0
  27. data/lib/rails/commands/console/console_command.rb +89 -0
  28. data/lib/rails/commands/dbconsole/dbconsole_command.rb +155 -0
  29. data/lib/rails/commands/destroy/destroy_command.rb +26 -0
  30. data/lib/rails/commands/generate/generate_command.rb +28 -0
  31. data/lib/rails/commands/help/USAGE +15 -0
  32. data/lib/rails/commands/help/help_command.rb +13 -0
  33. data/lib/rails/commands/new/new_command.rb +17 -0
  34. data/lib/rails/commands/plugin/plugin_command.rb +43 -0
  35. data/lib/rails/commands/rake/rake_command.rb +49 -0
  36. data/lib/rails/commands/runner/USAGE +17 -0
  37. data/lib/rails/commands/runner/runner_command.rb +49 -0
  38. data/lib/rails/commands/secrets/USAGE +60 -0
  39. data/lib/rails/commands/secrets/secrets_command.rb +49 -0
  40. data/lib/rails/commands/server/server_command.rb +216 -0
  41. data/lib/rails/commands/test/test_command.rb +22 -0
  42. data/lib/rails/commands/version/version_command.rb +9 -0
  43. data/lib/rails/commands.rb +2 -4
  44. data/lib/rails/configuration.rb +7 -7
  45. data/lib/rails/console/app.rb +4 -4
  46. data/lib/rails/dev_caching.rb +8 -8
  47. data/lib/rails/engine/commands.rb +6 -13
  48. data/lib/rails/engine/configuration.rb +2 -2
  49. data/lib/rails/engine/updater.rb +19 -0
  50. data/lib/rails/engine.rb +62 -63
  51. data/lib/rails/gem_version.rb +1 -1
  52. data/lib/rails/generators/actions/create_migration.rb +24 -25
  53. data/lib/rails/generators/actions.rb +20 -21
  54. data/lib/rails/generators/active_model.rb +3 -3
  55. data/lib/rails/generators/app_base.rb +119 -93
  56. data/lib/rails/generators/base.rb +32 -33
  57. data/lib/rails/generators/css/assets/assets_generator.rb +1 -1
  58. data/lib/rails/generators/erb/controller/controller_generator.rb +1 -1
  59. data/lib/rails/generators/erb/mailer/mailer_generator.rb +16 -9
  60. data/lib/rails/generators/erb/mailer/templates/layout.html.erb.tt +13 -0
  61. data/lib/rails/generators/erb/mailer/templates/layout.text.erb.tt +1 -0
  62. data/lib/rails/generators/erb/scaffold/scaffold_generator.rb +3 -3
  63. data/lib/rails/generators/erb/scaffold/templates/_form.html.erb +8 -8
  64. data/lib/rails/generators/erb.rb +14 -14
  65. data/lib/rails/generators/generated_attribute.rb +27 -27
  66. data/lib/rails/generators/js/assets/assets_generator.rb +1 -1
  67. data/lib/rails/generators/migration.rb +8 -8
  68. data/lib/rails/generators/model_helpers.rb +2 -2
  69. data/lib/rails/generators/named_base.rb +66 -58
  70. data/lib/rails/generators/rails/app/app_generator.rb +153 -84
  71. data/lib/rails/generators/rails/app/templates/Gemfile +13 -3
  72. data/lib/rails/generators/rails/app/templates/app/assets/config/manifest.js.tt +0 -2
  73. data/lib/rails/generators/rails/app/templates/app/assets/javascripts/application.js.tt +4 -5
  74. data/lib/rails/generators/rails/app/templates/app/assets/javascripts/cable.js +1 -1
  75. data/lib/rails/generators/rails/app/templates/app/assets/stylesheets/application.css +2 -2
  76. data/lib/rails/generators/rails/app/templates/app/views/layouts/application.html.erb.tt +1 -1
  77. data/lib/rails/generators/rails/app/templates/bin/{setup → setup.tt} +6 -0
  78. data/lib/rails/generators/rails/app/templates/bin/{update → update.tt} +2 -0
  79. data/lib/rails/generators/rails/app/templates/bin/yarn +10 -0
  80. data/lib/rails/generators/rails/app/templates/config/application.rb +7 -0
  81. data/lib/rails/generators/rails/app/templates/config/cable.yml +1 -0
  82. data/lib/rails/generators/rails/app/templates/config/databases/frontbase.yml +1 -0
  83. data/lib/rails/generators/rails/app/templates/config/databases/ibm_db.yml +1 -0
  84. data/lib/rails/generators/rails/app/templates/config/databases/jdbc.yml +1 -0
  85. data/lib/rails/generators/rails/app/templates/config/databases/jdbcmysql.yml +2 -1
  86. data/lib/rails/generators/rails/app/templates/config/databases/jdbcpostgresql.yml +1 -0
  87. data/lib/rails/generators/rails/app/templates/config/databases/jdbcsqlite3.yml +1 -0
  88. data/lib/rails/generators/rails/app/templates/config/databases/mysql.yml +2 -2
  89. data/lib/rails/generators/rails/app/templates/config/databases/oracle.yml +6 -3
  90. data/lib/rails/generators/rails/app/templates/config/databases/postgresql.yml +1 -1
  91. data/lib/rails/generators/rails/app/templates/config/databases/sqlite3.yml +1 -1
  92. data/lib/rails/generators/rails/app/templates/config/databases/sqlserver.yml +4 -20
  93. data/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt +1 -1
  94. data/lib/rails/generators/rails/app/templates/config/environments/production.rb.tt +10 -1
  95. data/lib/rails/generators/rails/app/templates/config/environments/test.rb.tt +1 -1
  96. data/lib/rails/generators/rails/app/templates/config/initializers/assets.rb.tt +8 -3
  97. data/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_5_1.rb.tt +16 -0
  98. data/lib/rails/generators/rails/app/templates/config/locales/en.yml +10 -0
  99. data/lib/rails/generators/rails/app/templates/config/puma.rb +16 -7
  100. data/lib/rails/generators/rails/app/templates/config/secrets.yml +12 -2
  101. data/lib/rails/generators/rails/app/templates/gitignore +5 -1
  102. data/lib/rails/generators/rails/app/templates/package.json +5 -0
  103. data/lib/rails/generators/rails/app/templates/public/404.html +6 -6
  104. data/lib/rails/generators/rails/app/templates/public/422.html +6 -6
  105. data/lib/rails/generators/rails/app/templates/public/500.html +6 -6
  106. data/lib/rails/generators/rails/app/templates/public/robots.txt +0 -4
  107. data/lib/rails/generators/rails/app/templates/test/application_system_test_case.rb +5 -0
  108. data/lib/rails/generators/rails/app/templates/test/test_helper.rb +0 -1
  109. data/lib/rails/generators/rails/assets/assets_generator.rb +10 -10
  110. data/lib/rails/generators/rails/controller/controller_generator.rb +17 -12
  111. data/lib/rails/generators/rails/encrypted_secrets/encrypted_secrets_generator.rb +66 -0
  112. data/lib/rails/generators/rails/encrypted_secrets/templates/config/secrets.yml.enc +3 -0
  113. data/lib/rails/generators/rails/generator/generator_generator.rb +2 -3
  114. data/lib/rails/generators/rails/helper/helper_generator.rb +1 -1
  115. data/lib/rails/generators/rails/model/model_generator.rb +1 -1
  116. data/lib/rails/generators/rails/plugin/plugin_generator.rb +26 -30
  117. data/lib/rails/generators/rails/plugin/templates/bin/rails.tt +1 -0
  118. data/lib/rails/generators/rails/plugin/templates/bin/test.tt +3 -7
  119. data/lib/rails/generators/rails/plugin/templates/test/application_system_test_case.rb +5 -0
  120. data/lib/rails/generators/rails/plugin/templates/test/test_helper.rb +0 -3
  121. data/lib/rails/generators/rails/resource/resource_generator.rb +2 -2
  122. data/lib/rails/generators/rails/scaffold/scaffold_generator.rb +5 -1
  123. data/lib/rails/generators/rails/scaffold/templates/scaffold.css +4 -8
  124. data/lib/rails/generators/rails/scaffold_controller/scaffold_controller_generator.rb +7 -3
  125. data/lib/rails/generators/rails/system_test/USAGE +10 -0
  126. data/lib/rails/generators/rails/system_test/system_test_generator.rb +7 -0
  127. data/lib/rails/generators/rails/task/task_generator.rb +1 -2
  128. data/lib/rails/generators/resource_helpers.rb +13 -10
  129. data/lib/rails/generators/test_case.rb +5 -6
  130. data/lib/rails/generators/test_unit/controller/controller_generator.rb +3 -3
  131. data/lib/rails/generators/test_unit/generator/generator_generator.rb +3 -3
  132. data/lib/rails/generators/test_unit/helper/helper_generator.rb +1 -1
  133. data/lib/rails/generators/test_unit/integration/integration_generator.rb +2 -2
  134. data/lib/rails/generators/test_unit/integration/templates/integration_test.rb +2 -0
  135. data/lib/rails/generators/test_unit/job/job_generator.rb +3 -3
  136. data/lib/rails/generators/test_unit/mailer/mailer_generator.rb +5 -5
  137. data/lib/rails/generators/test_unit/model/model_generator.rb +3 -4
  138. data/lib/rails/generators/test_unit/plugin/plugin_generator.rb +2 -2
  139. data/lib/rails/generators/test_unit/scaffold/scaffold_generator.rb +4 -4
  140. data/lib/rails/generators/test_unit/system/system_generator.rb +17 -0
  141. data/lib/rails/generators/test_unit/system/templates/application_system_test_case.rb +5 -0
  142. data/lib/rails/generators/test_unit/system/templates/system_test.rb +9 -0
  143. data/lib/rails/generators/test_unit.rb +1 -1
  144. data/lib/rails/generators/testing/assertions.rb +4 -4
  145. data/lib/rails/generators/testing/behaviour.rb +20 -21
  146. data/lib/rails/generators.rb +230 -312
  147. data/lib/rails/info.rb +20 -20
  148. data/lib/rails/info_controller.rb +15 -15
  149. data/lib/rails/initializable.rb +6 -2
  150. data/lib/rails/mailers_controller.rb +11 -11
  151. data/lib/rails/paths.rb +12 -6
  152. data/lib/rails/plugin/test.rb +7 -0
  153. data/lib/rails/rack/logger.rb +44 -46
  154. data/lib/rails/railtie/configurable.rb +6 -6
  155. data/lib/rails/railtie/configuration.rb +1 -1
  156. data/lib/rails/railtie.rb +41 -38
  157. data/lib/rails/ruby_version_check.rb +1 -1
  158. data/lib/rails/secrets.rb +100 -0
  159. data/lib/rails/source_annotation_extractor.rb +15 -9
  160. data/lib/rails/tasks/annotations.rake +3 -3
  161. data/lib/rails/tasks/dev.rake +2 -2
  162. data/lib/rails/tasks/engine.rake +15 -4
  163. data/lib/rails/tasks/framework.rake +8 -18
  164. data/lib/rails/tasks/initializers.rake +1 -1
  165. data/lib/rails/tasks/log.rake +14 -10
  166. data/lib/rails/tasks/middleware.rake +1 -1
  167. data/lib/rails/tasks/misc.rake +10 -10
  168. data/lib/rails/tasks/restart.rake +4 -4
  169. data/lib/rails/tasks/routes.rake +3 -12
  170. data/lib/rails/tasks/statistics.rake +3 -3
  171. data/lib/rails/tasks/tmp.rake +7 -7
  172. data/lib/rails/tasks/yarn.rake +11 -0
  173. data/lib/rails/tasks.rb +3 -2
  174. data/lib/rails/templates/rails/mailers/email.html.erb +4 -1
  175. data/lib/rails/test_help.rb +14 -10
  176. data/lib/rails/test_unit/line_filtering.rb +2 -2
  177. data/lib/rails/test_unit/minitest_plugin.rb +62 -15
  178. data/lib/rails/test_unit/railtie.rb +6 -3
  179. data/lib/rails/test_unit/reporter.rb +2 -2
  180. data/lib/rails/test_unit/test_requirer.rb +8 -5
  181. data/lib/rails/test_unit/testing.rake +20 -15
  182. data/lib/rails/version.rb +1 -1
  183. data/lib/rails/welcome_controller.rb +1 -1
  184. data/lib/rails.rb +19 -18
  185. metadata +52 -27
  186. data/lib/rails/commands/application.rb +0 -17
  187. data/lib/rails/commands/commands_tasks.rb +0 -180
  188. data/lib/rails/commands/console.rb +0 -68
  189. data/lib/rails/commands/console_helper.rb +0 -34
  190. data/lib/rails/commands/dbconsole.rb +0 -173
  191. data/lib/rails/commands/destroy.rb +0 -11
  192. data/lib/rails/commands/generate.rb +0 -13
  193. data/lib/rails/commands/plugin.rb +0 -23
  194. data/lib/rails/commands/rake_proxy.rb +0 -34
  195. data/lib/rails/commands/runner.rb +0 -69
  196. data/lib/rails/commands/server.rb +0 -139
  197. data/lib/rails/commands/test.rb +0 -9
  198. data/lib/rails/engine/commands_tasks.rb +0 -116
  199. data/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults.rb.tt +0 -34
  200. data/lib/rails/generators/rails/app/templates/config/initializers/session_store.rb.tt +0 -3
  201. data/lib/rails/rack/debugger.rb +0 -3
data/RDOC_MAIN.rdoc CHANGED
@@ -35,17 +35,17 @@ can read more about Action Pack in its {README}[link:files/actionpack/README_rdo
35
35
 
36
36
  1. Install \Rails at the command prompt if you haven't yet:
37
37
 
38
- gem install rails
38
+ $ gem install rails
39
39
 
40
40
  2. At the command prompt, create a new \Rails application:
41
41
 
42
- rails new myapp
42
+ $ rails new myapp
43
43
 
44
44
  where "myapp" is the application name.
45
45
 
46
46
  3. Change directory to +myapp+ and start the web server:
47
47
 
48
- cd myapp; rails server
48
+ $ cd myapp; rails server
49
49
 
50
50
  Run with <tt>--help</tt> or <tt>-h</tt> for options.
51
51
 
@@ -57,7 +57,7 @@ can read more about Action Pack in its {README}[link:files/actionpack/README_rdo
57
57
 
58
58
  * The \README file created within your application.
59
59
  * {Getting Started with \Rails}[http://guides.rubyonrails.org/getting_started.html].
60
- * {Ruby on \Rails Tutorial}[http://www.railstutorial.org/book].
60
+ * {Ruby on \Rails Tutorial}[https://www.railstutorial.org/book].
61
61
  * {Ruby on \Rails Guides}[http://guides.rubyonrails.org].
62
62
  * {The API Documentation}[http://api.rubyonrails.org].
63
63
 
data/exe/rails CHANGED
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- git_path = File.expand_path('../../../.git', __FILE__)
3
+ git_path = File.expand_path("../../../.git", __FILE__)
4
4
 
5
5
  if File.exist?(git_path)
6
- railties_path = File.expand_path('../../lib', __FILE__)
6
+ railties_path = File.expand_path("../../lib", __FILE__)
7
7
  $:.unshift(railties_path)
8
8
  end
9
9
  require "rails/cli"
data/lib/rails/all.rb CHANGED
@@ -1,4 +1,4 @@
1
- require 'rails'
1
+ require "rails"
2
2
 
3
3
  %w(
4
4
  active_record/railtie
@@ -0,0 +1,28 @@
1
+ require "sdoc"
2
+
3
+ class RDoc::Generator::API < RDoc::Generator::SDoc # :nodoc:
4
+ RDoc::RDoc.add_generator self
5
+
6
+ def generate_class_tree_level(classes, visited = {})
7
+ # Only process core extensions on the first visit.
8
+ if visited.empty?
9
+ core_exts, classes = classes.partition { |klass| core_extension?(klass) }
10
+
11
+ super.unshift([ "Core extensions", "", "", build_core_ext_subtree(core_exts, visited) ])
12
+ else
13
+ super
14
+ end
15
+ end
16
+
17
+ private
18
+ def build_core_ext_subtree(classes, visited)
19
+ classes.map do |klass|
20
+ [ klass.name, klass.document_self_or_methods ? klass.path : "", "",
21
+ generate_class_tree_level(klass.classes_and_modules, visited) ]
22
+ end
23
+ end
24
+
25
+ def core_extension?(klass)
26
+ klass.name != "ActiveSupport" && klass.in_files.any? { |file| file.absolute_name.include?("core_ext") }
27
+ end
28
+ end
@@ -1,33 +1,33 @@
1
- require 'rdoc/task'
1
+ require "rdoc/task"
2
+ require_relative "generator"
2
3
 
3
4
  module Rails
4
5
  module API
5
6
  class Task < RDoc::Task
6
7
  RDOC_FILES = {
7
- 'activesupport' => {
8
- :include => %w(
8
+ "activesupport" => {
9
+ include: %w(
9
10
  README.rdoc
10
11
  lib/active_support/**/*.rb
11
- ),
12
- :exclude => 'lib/active_support/vendor/*'
12
+ )
13
13
  },
14
14
 
15
- 'activerecord' => {
16
- :include => %w(
15
+ "activerecord" => {
16
+ include: %w(
17
17
  README.rdoc
18
18
  lib/active_record/**/*.rb
19
19
  )
20
20
  },
21
21
 
22
- 'activemodel' => {
23
- :include => %w(
22
+ "activemodel" => {
23
+ include: %w(
24
24
  README.rdoc
25
25
  lib/active_model/**/*.rb
26
26
  )
27
27
  },
28
28
 
29
- 'actionpack' => {
30
- :include => %w(
29
+ "actionpack" => {
30
+ include: %w(
31
31
  README.rdoc
32
32
  lib/abstract_controller/**/*.rb
33
33
  lib/action_controller/**/*.rb
@@ -35,41 +35,45 @@ module Rails
35
35
  )
36
36
  },
37
37
 
38
- 'actionview' => {
39
- :include => %w(
38
+ "actionview" => {
39
+ include: %w(
40
40
  README.rdoc
41
41
  lib/action_view/**/*.rb
42
42
  ),
43
- :exclude => 'lib/action_view/vendor/*'
43
+ exclude: "lib/action_view/vendor/*"
44
44
  },
45
45
 
46
- 'actionmailer' => {
47
- :include => %w(
46
+ "actionmailer" => {
47
+ include: %w(
48
48
  README.rdoc
49
49
  lib/action_mailer/**/*.rb
50
50
  )
51
51
  },
52
52
 
53
- 'activejob' => {
54
- :include => %w(
53
+ "activejob" => {
54
+ include: %w(
55
55
  README.md
56
56
  lib/active_job/**/*.rb
57
57
  )
58
58
  },
59
59
 
60
- 'actioncable' => {
61
- :include => %w(
60
+ "actioncable" => {
61
+ include: %w(
62
62
  README.md
63
63
  lib/action_cable/**/*.rb
64
64
  )
65
65
  },
66
66
 
67
- 'railties' => {
68
- :include => %w(
67
+ "railties" => {
68
+ include: %w(
69
69
  README.rdoc
70
70
  lib/**/*.rb
71
71
  ),
72
- :exclude => 'lib/rails/generators/rails/**/templates/**/*.rb'
72
+ exclude: %w(
73
+ lib/rails/generators/**/templates/**/*.rb
74
+ lib/rails/test_unit/*
75
+ lib/rails/api/generator.rb
76
+ )
73
77
  }
74
78
  }
75
79
 
@@ -80,7 +84,7 @@ module Rails
80
84
  # Be lazy computing stuff to have as light impact as possible to
81
85
  # the rest of tasks.
82
86
  before_running_rdoc do
83
- load_and_configure_sdoc
87
+ configure_sdoc
84
88
  configure_rdoc_files
85
89
  setup_horo_variables
86
90
  end
@@ -91,20 +95,15 @@ module Rails
91
95
  # no-op
92
96
  end
93
97
 
94
- def load_and_configure_sdoc
95
- require 'sdoc'
96
-
97
- self.title = 'Ruby on Rails API'
98
+ def configure_sdoc
99
+ self.title = "Ruby on Rails API"
98
100
  self.rdoc_dir = api_dir
99
101
 
100
- options << '-m' << api_main
101
- options << '-e' << 'UTF-8'
102
+ options << "-m" << api_main
103
+ options << "-e" << "UTF-8"
102
104
 
103
- options << '-f' << 'sdoc'
104
- options << '-T' << 'rails'
105
- rescue LoadError
106
- $stderr.puts %(Unable to load SDoc, please add\n\n gem 'sdoc', require: false\n\nto the Gemfile.)
107
- exit 1
105
+ options << "-f" << "api"
106
+ options << "-T" << "rails"
108
107
  end
109
108
 
110
109
  def configure_rdoc_files
@@ -121,22 +120,35 @@ module Rails
121
120
  rdoc_files.exclude("#{cdr}/#{pattern}")
122
121
  end
123
122
  end
123
+
124
+ # Only generate documentation for files that have been
125
+ # changed since the API was generated.
126
+ if Dir.exist?("doc/rdoc") && !ENV["ALL"]
127
+ last_generation = DateTime.rfc2822(File.open("doc/rdoc/created.rid", &:readline))
128
+
129
+ rdoc_files.keep_if do |file|
130
+ File.mtime(file).to_datetime > last_generation
131
+ end
132
+
133
+ # Nothing to do
134
+ exit(0) if rdoc_files.empty?
135
+ end
124
136
  end
125
137
 
126
138
  def setup_horo_variables
127
- ENV['HORO_PROJECT_NAME'] = 'Ruby on Rails'
128
- ENV['HORO_PROJECT_VERSION'] = rails_version
139
+ ENV["HORO_PROJECT_NAME"] = "Ruby on Rails"
140
+ ENV["HORO_PROJECT_VERSION"] = rails_version
129
141
  end
130
142
 
131
143
  def api_main
132
- component_root_dir('railties') + '/RDOC_MAIN.rdoc'
144
+ component_root_dir("railties") + "/RDOC_MAIN.rdoc"
133
145
  end
134
146
  end
135
147
 
136
148
  class RepoTask < Task
137
- def load_and_configure_sdoc
149
+ def configure_sdoc
138
150
  super
139
- options << '-g' # link to GitHub, SDoc flag
151
+ options << "-g" # link to GitHub, SDoc flag
140
152
  end
141
153
 
142
154
  def component_root_dir(component)
@@ -144,7 +156,7 @@ module Rails
144
156
  end
145
157
 
146
158
  def api_dir
147
- 'doc/rdoc'
159
+ "doc/rdoc"
148
160
  end
149
161
  end
150
162
 
@@ -156,7 +168,7 @@ module Rails
156
168
 
157
169
  class StableTask < RepoTask
158
170
  def rails_version
159
- File.read('RAILS_VERSION').strip
171
+ File.read("RAILS_VERSION").strip
160
172
  end
161
173
  end
162
174
  end
@@ -1,12 +1,12 @@
1
- require 'pathname'
2
- require 'rails/version'
1
+ require "pathname"
2
+ require "rails/version"
3
3
 
4
4
  module Rails
5
5
  module AppLoader # :nodoc:
6
6
  extend self
7
7
 
8
8
  RUBY = Gem.ruby
9
- EXECUTABLES = ['bin/rails', 'script/rails']
9
+ EXECUTABLES = ["bin/rails", "script/rails"]
10
10
  BUNDLER_WARNING = <<EOS
11
11
  Looks like your app's ./bin/rails is a stub that was generated by Bundler.
12
12
 
@@ -39,21 +39,21 @@ EOS
39
39
  if contents =~ /(APP|ENGINE)_PATH/
40
40
  exec RUBY, exe, *ARGV
41
41
  break # non reachable, hack to be able to stub exec in the test suite
42
- elsif exe.end_with?('bin/rails') && contents.include?('This file was generated by Bundler')
42
+ elsif exe.end_with?("bin/rails") && contents.include?("This file was generated by Bundler")
43
43
  $stderr.puts(BUNDLER_WARNING)
44
- Object.const_set(:APP_PATH, File.expand_path('config/application', Dir.pwd))
45
- require File.expand_path('../boot', APP_PATH)
46
- require 'rails/commands'
44
+ Object.const_set(:APP_PATH, File.expand_path("config/application", Dir.pwd))
45
+ require File.expand_path("../boot", APP_PATH)
46
+ require "rails/commands"
47
47
  break
48
48
  end
49
49
  end
50
50
 
51
51
  # If we exhaust the search there is no executable, this could be a
52
52
  # call to generate a new application, so restore the original cwd.
53
- Dir.chdir(original_cwd) and return if Pathname.new(Dir.pwd).root?
53
+ Dir.chdir(original_cwd) && return if Pathname.new(Dir.pwd).root?
54
54
 
55
55
  # Otherwise keep moving upwards in search of an executable.
56
- Dir.chdir('..')
56
+ Dir.chdir("..")
57
57
  end
58
58
  end
59
59
 
@@ -1,7 +1,8 @@
1
- require 'fileutils'
2
- require 'active_support/notifications'
3
- require 'active_support/dependencies'
4
- require 'active_support/descendants_tracker'
1
+ require "fileutils"
2
+ require "active_support/notifications"
3
+ require "active_support/dependencies"
4
+ require "active_support/descendants_tracker"
5
+ require "rails/secrets"
5
6
 
6
7
  module Rails
7
8
  class Application
@@ -36,7 +37,7 @@ INFO
36
37
  FileUtils.mkdir_p File.dirname path
37
38
  end
38
39
 
39
- f = File.open path, 'a'
40
+ f = File.open path, "a"
40
41
  f.binmode
41
42
  f.sync = config.autoflush_log # if true make sure every write flushes
42
43
 
@@ -48,8 +49,8 @@ INFO
48
49
  logger = ActiveSupport::TaggedLogging.new(ActiveSupport::Logger.new(STDERR))
49
50
  logger.level = ActiveSupport::Logger::WARN
50
51
  logger.warn(
51
- "Rails Error: Unable to access log file. Please ensure that #{path} exists and is writable " +
52
- "(ie, make it writable for user and group: chmod 0664 #{path}). " +
52
+ "Rails Error: Unable to access log file. Please ensure that #{path} exists and is writable " \
53
+ "(ie, make it writable for user and group: chmod 0664 #{path}). " \
53
54
  "The log level has been raised to WARN and the output directed to STDERR until the problem is fixed."
54
55
  )
55
56
  logger
@@ -77,6 +78,10 @@ INFO
77
78
  initializer :bootstrap_hook, group: :all do |app|
78
79
  ActiveSupport.run_load_hooks(:before_initialize, app)
79
80
  end
81
+
82
+ initializer :set_secrets_root, group: :all do
83
+ Rails::Secrets.root = root
84
+ end
80
85
  end
81
86
  end
82
87
  end
@@ -1,10 +1,7 @@
1
- require 'active_support/core_ext/kernel/reporting'
2
- require 'active_support/file_update_checker'
3
- require 'rails/engine/configuration'
4
- require 'rails/source_annotation_extractor'
5
-
6
- require 'active_support/deprecation'
7
- require 'active_support/core_ext/string/strip' # for strip_heredoc
1
+ require "active_support/core_ext/kernel/reporting"
2
+ require "active_support/file_update_checker"
3
+ require "rails/engine/configuration"
4
+ require "rails/source_annotation_extractor"
8
5
 
9
6
  module Rails
10
7
  class Application
@@ -16,14 +13,14 @@ module Rails
16
13
  :railties_order, :relative_url_root, :secret_key_base, :secret_token,
17
14
  :ssl_options, :public_file_server,
18
15
  :session_options, :time_zone, :reload_classes_only_on_change,
19
- :beginning_of_week, :filter_redirect, :x, :enable_dependency_loading
16
+ :beginning_of_week, :filter_redirect, :x, :enable_dependency_loading,
17
+ :read_encrypted_secrets, :log_level
20
18
 
21
- attr_writer :log_level
22
- attr_reader :encoding, :api_only, :static_cache_control
19
+ attr_reader :encoding, :api_only
23
20
 
24
21
  def initialize(*)
25
22
  super
26
- self.encoding = "utf-8"
23
+ self.encoding = Encoding::UTF_8
27
24
  @allow_concurrency = nil
28
25
  @consider_all_requests_local = false
29
26
  @filter_parameters = []
@@ -34,11 +31,10 @@ module Rails
34
31
  @public_file_server.index_name = "index"
35
32
  @force_ssl = false
36
33
  @ssl_options = {}
37
- @session_store = :cookie_store
38
- @session_options = {}
34
+ @session_store = nil
39
35
  @time_zone = "UTC"
40
36
  @beginning_of_week = :monday
41
- @log_level = nil
37
+ @log_level = :debug
42
38
  @generators = app_generators
43
39
  @cache_store = [ :file_store, "#{root}/tmp/cache/" ]
44
40
  @railties_order = [:all]
@@ -55,35 +51,35 @@ module Rails
55
51
  @debug_exception_response_format = nil
56
52
  @x = Custom.new
57
53
  @enable_dependency_loading = false
54
+ @read_encrypted_secrets = false
58
55
  end
59
56
 
60
- def static_cache_control=(value)
61
- ActiveSupport::Deprecation.warn <<-eow.strip_heredoc
62
- `config.static_cache_control` is deprecated and will be removed in Rails 5.1.
63
- Please use
64
- `config.public_file_server.headers = { 'Cache-Control' => '#{value}' }`
65
- instead.
66
- eow
57
+ def load_defaults(target_version)
58
+ case target_version.to_s
59
+ when "5.0"
60
+ if respond_to?(:action_controller)
61
+ action_controller.per_form_csrf_tokens = true
62
+ action_controller.forgery_protection_origin_check = true
63
+ end
67
64
 
68
- @static_cache_control = value
69
- end
65
+ ActiveSupport.to_time_preserves_timezone = true
70
66
 
71
- def serve_static_files
72
- ActiveSupport::Deprecation.warn <<-eow.strip_heredoc
73
- `config.serve_static_files` is deprecated and will be removed in Rails 5.1.
74
- Please use `config.public_file_server.enabled` instead.
75
- eow
67
+ if respond_to?(:active_record)
68
+ active_record.belongs_to_required_by_default = true
69
+ end
76
70
 
77
- @public_file_server.enabled
78
- end
71
+ self.ssl_options = { hsts: { subdomains: true } }
72
+
73
+ when "5.1"
74
+ load_defaults "5.0"
79
75
 
80
- def serve_static_files=(value)
81
- ActiveSupport::Deprecation.warn <<-eow.strip_heredoc
82
- `config.serve_static_files` is deprecated and will be removed in Rails 5.1.
83
- Please use `config.public_file_server.enabled = #{value}` instead.
84
- eow
76
+ if respond_to?(:assets)
77
+ assets.unknown_asset_fallback = false
78
+ end
85
79
 
86
- @public_file_server.enabled = value
80
+ else
81
+ raise "Unknown version #{target_version.to_s.inspect}"
82
+ end
87
83
  end
88
84
 
89
85
  def encoding=(value)
@@ -113,7 +109,7 @@ module Rails
113
109
  @paths ||= begin
114
110
  paths = super
115
111
  paths.add "config/database", with: "config/database.yml"
116
- paths.add "config/secrets", with: "config/secrets.yml"
112
+ paths.add "config/secrets", with: "config", glob: "secrets.yml{,.enc}"
117
113
  paths.add "config/environment", with: "config/environment.rb"
118
114
  paths.add "lib/templates"
119
115
  paths.add "log", with: "log/#{Rails.env}.log"
@@ -135,7 +131,7 @@ module Rails
135
131
  require "yaml"
136
132
  require "erb"
137
133
  YAML.load(ERB.new(yaml.read).result) || {}
138
- elsif ENV['DATABASE_URL']
134
+ elsif ENV["DATABASE_URL"]
139
135
  # Value from ENV['DATABASE_URL'] is set to default database connection
140
136
  # by Active Record.
141
137
  {}
@@ -152,42 +148,46 @@ module Rails
152
148
  raise e, "Cannot load `Rails.application.database_configuration`:\n#{e.message}", e.backtrace
153
149
  end
154
150
 
155
- def log_level
156
- @log_level ||= (Rails.env.production? ? :info : :debug)
157
- end
158
-
159
151
  def colorize_logging
160
152
  ActiveSupport::LogSubscriber.colorize_logging
161
153
  end
162
154
 
163
155
  def colorize_logging=(val)
164
156
  ActiveSupport::LogSubscriber.colorize_logging = val
165
- self.generators.colorize_logging = val
157
+ generators.colorize_logging = val
166
158
  end
167
159
 
168
- def session_store(*args)
169
- if args.empty?
170
- case @session_store
171
- when :disabled
172
- nil
173
- when :active_record_store
160
+ def session_store(new_session_store = nil, **options)
161
+ if new_session_store
162
+ if new_session_store == :active_record_store
174
163
  begin
175
164
  ActionDispatch::Session::ActiveRecordStore
176
165
  rescue NameError
177
166
  raise "`ActiveRecord::SessionStore` is extracted out of Rails into a gem. " \
178
167
  "Please add `activerecord-session_store` to your Gemfile to use it."
179
168
  end
169
+ end
170
+
171
+ @session_store = new_session_store
172
+ @session_options = options || {}
173
+ else
174
+ case @session_store
175
+ when :disabled
176
+ nil
177
+ when :active_record_store
178
+ ActionDispatch::Session::ActiveRecordStore
180
179
  when Symbol
181
180
  ActionDispatch::Session.const_get(@session_store.to_s.camelize)
182
181
  else
183
182
  @session_store
184
183
  end
185
- else
186
- @session_store = args.shift
187
- @session_options = args.shift || {}
188
184
  end
189
185
  end
190
186
 
187
+ def session_store? #:nodoc:
188
+ @session_store
189
+ end
190
+
191
191
  def annotations
192
192
  SourceAnnotationExtractor::Annotation
193
193
  end
@@ -206,6 +206,10 @@ module Rails
206
206
  }
207
207
  end
208
208
  end
209
+
210
+ def respond_to_missing?(symbol, *)
211
+ true
212
+ end
209
213
  end
210
214
  end
211
215
  end
@@ -19,7 +19,6 @@ module Rails
19
19
 
20
20
  if config.public_file_server.enabled
21
21
  headers = config.public_file_server.headers || {}
22
- headers['Cache-Control'.freeze] = config.static_cache_control if config.static_cache_control
23
22
 
24
23
  middleware.use ::ActionDispatch::Static, paths["public"].first, index: config.public_file_server.index_name, headers: headers
25
24
  end
@@ -41,12 +40,11 @@ module Rails
41
40
  middleware.use ::Rack::Runtime
42
41
  middleware.use ::Rack::MethodOverride unless config.api_only
43
42
  middleware.use ::ActionDispatch::RequestId
43
+ middleware.use ::ActionDispatch::RemoteIp, config.action_dispatch.ip_spoofing_check, config.action_dispatch.trusted_proxies
44
44
 
45
- # Must come after Rack::MethodOverride to properly log overridden methods
46
45
  middleware.use ::Rails::Rack::Logger, config.log_tags
47
46
  middleware.use ::ActionDispatch::ShowExceptions, show_exceptions_app
48
47
  middleware.use ::ActionDispatch::DebugExceptions, app, config.debug_exception_response_format
49
- middleware.use ::ActionDispatch::RemoteIp, config.action_dispatch.ip_spoofing_check, config.action_dispatch.trusted_proxies
50
48
 
51
49
  unless config.cache_classes
52
50
  middleware.use ::ActionDispatch::Reloader, app.reloader
@@ -76,9 +74,9 @@ module Rails
76
74
  return unless rack_cache
77
75
 
78
76
  begin
79
- require 'rack/cache'
77
+ require "rack/cache"
80
78
  rescue LoadError => error
81
- error.message << ' Be sure to add rack-cache to your Gemfile'
79
+ error.message << " Be sure to add rack-cache to your Gemfile"
82
80
  raise
83
81
  end
84
82
 
@@ -22,17 +22,25 @@ module Rails
22
22
  initializer :add_builtin_route do |app|
23
23
  if Rails.env.development?
24
24
  app.routes.prepend do
25
- get '/rails/info/properties' => "rails/info#properties", internal: true
26
- get '/rails/info/routes' => "rails/info#routes", internal: true
27
- get '/rails/info' => "rails/info#index", internal: true
25
+ get "/rails/info/properties" => "rails/info#properties", internal: true
26
+ get "/rails/info/routes" => "rails/info#routes", internal: true
27
+ get "/rails/info" => "rails/info#index", internal: true
28
28
  end
29
29
 
30
30
  app.routes.append do
31
- get '/' => "rails/welcome#index", internal: true
31
+ get "/" => "rails/welcome#index", internal: true
32
32
  end
33
33
  end
34
34
  end
35
35
 
36
+ # Setup default session store if not already set in config/application.rb
37
+ initializer :setup_default_session_store, before: :build_middleware_stack do |app|
38
+ unless app.config.session_store?
39
+ app_name = app.class.name ? app.railtie_name.chomp("_application") : ""
40
+ app.config.session_store :cookie_store, key: "_#{app_name}_session"
41
+ end
42
+ end
43
+
36
44
  initializer :build_middleware_stack do
37
45
  build_middleware_stack
38
46
  end
@@ -98,7 +106,7 @@ module Rails
98
106
 
99
107
  elsif config.allow_concurrency == :unsafe
100
108
  # Do nothing, even if we know this is dangerous. This is the
101
- # historical behaviour for true.
109
+ # historical behavior for true.
102
110
 
103
111
  else
104
112
  # Default concurrency setting: enabled, but safe
@@ -116,8 +124,9 @@ module Rails
116
124
  # the hook are taken into account.
117
125
  initializer :set_routes_reloader_hook do |app|
118
126
  reloader = routes_reloader
127
+ reloader.eager_load = app.config.eager_load
119
128
  reloader.execute_if_updated
120
- self.reloaders << reloader
129
+ reloaders << reloader
121
130
  app.reloader.to_run do
122
131
  # We configure #execute rather than #execute_if_updated because if
123
132
  # autoloaded constants are cleared we need to reload routes also in
@@ -153,7 +162,7 @@ module Rails
153
162
 
154
163
  if config.reload_classes_only_on_change
155
164
  reloader = config.file_watcher.new(*watchable_args, &callback)
156
- self.reloaders << reloader
165
+ reloaders << reloader
157
166
 
158
167
  # Prepend this callback to have autoloaded constants cleared before
159
168
  # any other possible reloading, in case they need to autoload fresh