railties 5.2.0.beta2 → 5.2.0.rc1

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 (37) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +6 -1
  3. data/MIT-LICENSE +1 -1
  4. data/lib/rails/application.rb +2 -1
  5. data/lib/rails/application/configuration.rb +4 -1
  6. data/lib/rails/application/default_middleware_stack.rb +1 -0
  7. data/lib/rails/application/finisher.rb +1 -1
  8. data/lib/rails/commands/credentials/credentials_command.rb +9 -2
  9. data/lib/rails/commands/encrypted/encrypted_command.rb +10 -2
  10. data/lib/rails/commands/secrets/secrets_command.rb +1 -1
  11. data/lib/rails/commands/server/server_command.rb +1 -1
  12. data/lib/rails/gem_version.rb +1 -1
  13. data/lib/rails/generators/app_base.rb +15 -16
  14. data/lib/rails/generators/generated_attribute.rb +2 -2
  15. data/lib/rails/generators/rails/app/app_generator.rb +8 -9
  16. data/lib/rails/generators/rails/app/templates/Gemfile.tt +12 -7
  17. data/lib/rails/generators/rails/app/templates/bin/yarn.tt +1 -1
  18. data/lib/rails/generators/rails/app/templates/config/application.rb.tt +3 -2
  19. data/lib/rails/generators/rails/app/templates/config/boot.rb.tt +2 -0
  20. data/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt +4 -1
  21. data/lib/rails/generators/rails/app/templates/config/initializers/content_security_policy.rb.tt +12 -10
  22. data/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_5_2.rb.tt +4 -1
  23. data/lib/rails/generators/rails/app/templates/config/puma.rb.tt +1 -23
  24. data/lib/rails/generators/rails/app/templates/config/storage.yml.tt +1 -1
  25. data/lib/rails/generators/rails/app/templates/test/test_helper.rb.tt +1 -0
  26. data/lib/rails/generators/rails/credentials/credentials_generator.rb +6 -3
  27. data/lib/rails/generators/rails/encrypted_file/encrypted_file_generator.rb +1 -1
  28. data/lib/rails/generators/rails/plugin/templates/test/test_helper.rb.tt +3 -0
  29. data/lib/rails/generators/test_unit/scaffold/scaffold_generator.rb +1 -1
  30. data/lib/rails/info.rb +1 -1
  31. data/lib/rails/mailers_controller.rb +10 -2
  32. data/lib/rails/railtie/configuration.rb +1 -1
  33. data/lib/rails/templates/rails/mailers/email.html.erb +36 -10
  34. data/lib/rails/test_help.rb +0 -4
  35. data/lib/rails/test_unit/reporter.rb +8 -2
  36. data/lib/rails/test_unit/runner.rb +1 -1
  37. metadata +11 -11
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: e9bd0061c84dce42104ab9c0433e15bd72866027
4
- data.tar.gz: 224808e19d9303f52cbd029404344e63bf431f11
2
+ SHA256:
3
+ metadata.gz: b243e4fd3c66e8a713fdebd1affc6fc463b4f789acf9a0a0396a779b4154f244
4
+ data.tar.gz: 760cfb30ce563e8514edb03f527dda0765c3f42005f9ec6bbadc0c4a7b409963
5
5
  SHA512:
6
- metadata.gz: bc257ca257c3f3739c0720c03bbce1f79b427ce3aac722991c66eed500a47966a929510038bfb3356a2b5fd9488d78f4caa22c939c0c8419c5237cb3bfd409fb
7
- data.tar.gz: 71c8858e621f1bf80dbdd9f143b27b6c50aec419d36625f24284f9c279076c524abf88b28c262eaa6c51d510b1fbc8634bdda0e0a9d56a95d6ab3940039c7c85
6
+ metadata.gz: 9afaf4b62f456ea46ec9363ff0e1982a6a9b49149f83084a9e56ac68d9298501ec14ba676259a566e9aba9e892459be932c2fce64855e82de5b637efb5c325a3
7
+ data.tar.gz: 66876b0be9337a67ecafe82eddc834a351405b991dea4651e2d786f64af30ed24ee05ae8780327a76a44b10c7da3ede921ba546fb75b1d9cd9d0de1f33ccbc4e
@@ -1,3 +1,8 @@
1
+ ## Rails 5.2.0.rc1 (January 30, 2018) ##
2
+
3
+ * No changes.
4
+
5
+
1
6
  ## Rails 5.2.0.beta2 (November 28, 2017) ##
2
7
 
3
8
  * No changes.
@@ -57,7 +62,7 @@
57
62
 
58
63
  *bogdanvlviv*
59
64
 
60
- * Deprecate support of use `Rails::Application` subclass to start Rails server.
65
+ * Deprecate support for using a `Rails::Application` subclass to start Rails server.
61
66
 
62
67
  *Yuji Yaginuma*
63
68
 
@@ -1,4 +1,4 @@
1
- Copyright (c) 2004-2017 David Heinemeier Hansson
1
+ Copyright (c) 2004-2018 David Heinemeier Hansson
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -472,7 +472,8 @@ module Rails
472
472
  ActiveSupport::EncryptedConfiguration.new(
473
473
  config_path: Rails.root.join(path),
474
474
  key_path: Rails.root.join(key_path),
475
- env_key: env_key
475
+ env_key: env_key,
476
+ raise_if_missing_key: config.require_master_key
476
477
  )
477
478
  end
478
479
 
@@ -16,7 +16,8 @@ module Rails
16
16
  :ssl_options, :public_file_server,
17
17
  :session_options, :time_zone, :reload_classes_only_on_change,
18
18
  :beginning_of_week, :filter_redirect, :x, :enable_dependency_loading,
19
- :read_encrypted_secrets, :log_level, :content_security_policy_report_only
19
+ :read_encrypted_secrets, :log_level, :content_security_policy_report_only,
20
+ :require_master_key
20
21
 
21
22
  attr_reader :encoding, :api_only
22
23
 
@@ -56,6 +57,7 @@ module Rails
56
57
  @read_encrypted_secrets = false
57
58
  @content_security_policy = nil
58
59
  @content_security_policy_report_only = false
60
+ @require_master_key = false
59
61
  end
60
62
 
61
63
  def load_defaults(target_version)
@@ -100,6 +102,7 @@ module Rails
100
102
 
101
103
  if respond_to?(:active_support)
102
104
  active_support.use_authenticated_message_encryption = true
105
+ active_support.use_sha1_digests = true
103
106
  end
104
107
 
105
108
  if respond_to?(:action_controller)
@@ -70,6 +70,7 @@ module Rails
70
70
  middleware.use ::Rack::Head
71
71
  middleware.use ::Rack::ConditionalGet
72
72
  middleware.use ::Rack::ETag, "no-cache"
73
+ middleware.use ::Rack::TempfileReaper
73
74
  end
74
75
  end
75
76
 
@@ -58,7 +58,7 @@ module Rails
58
58
  end
59
59
 
60
60
  # This needs to happen before eager load so it happens
61
- # in exactly the same point regardless of config.cache_classes
61
+ # in exactly the same point regardless of config.eager_load
62
62
  initializer :run_prepare_callbacks do |app|
63
63
  app.reloader.prepare!
64
64
  end
@@ -33,8 +33,7 @@ module Rails
33
33
  def show
34
34
  require_application_and_environment!
35
35
 
36
- say Rails.application.credentials.read.presence ||
37
- "No credentials have been added yet. Use bin/rails credentials:edit to change that."
36
+ say Rails.application.credentials.read.presence || missing_credentials_message
38
37
  end
39
38
 
40
39
  private
@@ -67,6 +66,14 @@ module Rails
67
66
 
68
67
  Rails::Generators::CredentialsGenerator.new
69
68
  end
69
+
70
+ def missing_credentials_message
71
+ if Rails.application.credentials.key.nil?
72
+ "Missing master key to decrypt credentials. See bin/rails credentials:help"
73
+ else
74
+ "No credentials have been added yet. Use bin/rails credentials:edit to change that."
75
+ end
76
+ end
70
77
  end
71
78
  end
72
79
  end
@@ -37,9 +37,9 @@ module Rails
37
37
 
38
38
  def show(file_path)
39
39
  require_application_and_environment!
40
+ encrypted = Rails.application.encrypted(file_path, key_path: options[:key])
40
41
 
41
- say Rails.application.encrypted(file_path, key_path: options[:key]).read.presence ||
42
- "File '#{file_path}' does not exist. Use bin/rails encrypted:edit #{file_path} to change that."
42
+ say encrypted.read.presence || missing_encrypted_message(key: encrypted.key, key_path: options[:key], file_path: file_path)
43
43
  end
44
44
 
45
45
  private
@@ -72,6 +72,14 @@ module Rails
72
72
 
73
73
  Rails::Generators::EncryptedFileGenerator.new
74
74
  end
75
+
76
+ def missing_encrypted_message(key:, key_path:, file_path:)
77
+ if key.nil?
78
+ "Missing '#{key_path}' to decrypt data. See bin/rails encrypted:help"
79
+ else
80
+ "File '#{file_path}' does not exist. Use bin/rails encrypted:edit #{file_path} to change that."
81
+ end
82
+ end
75
83
  end
76
84
  end
77
85
  end
@@ -56,7 +56,7 @@ module Rails
56
56
  private
57
57
  def deprecate_in_favor_of_credentials_and_exit
58
58
  say "Encrypted secrets is deprecated in favor of credentials. Run:"
59
- say "bin/rails credentials --help"
59
+ say "bin/rails credentials:help"
60
60
 
61
61
  exit 1
62
62
  end
@@ -27,7 +27,7 @@ module Rails
27
27
  app = super
28
28
  if app.is_a?(Class)
29
29
  ActiveSupport::Deprecation.warn(<<-MSG.squish)
30
- Use `Rails::Application` subclass to start the server is deprecated and will be removed in Rails 6.0.
30
+ Using `Rails::Application` subclass to start the server is deprecated and will be removed in Rails 6.0.
31
31
  Please change `run #{app}` to `run Rails.application` in config.ru.
32
32
  MSG
33
33
  end
@@ -10,7 +10,7 @@ module Rails
10
10
  MAJOR = 5
11
11
  MINOR = 2
12
12
  TINY = 0
13
- PRE = "beta2"
13
+ PRE = "rc1"
14
14
 
15
15
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
16
16
  end
@@ -84,6 +84,9 @@ module Rails
84
84
  class_option :skip_system_test, type: :boolean, default: false,
85
85
  desc: "Skip system test files"
86
86
 
87
+ class_option :skip_bootsnap, type: :boolean, default: false,
88
+ desc: "Skip bootsnap gem"
89
+
87
90
  class_option :dev, type: :boolean, default: false,
88
91
  desc: "Setup the #{name} with Gemfile pointing to your Rails checkout"
89
92
 
@@ -297,8 +300,8 @@ module Rails
297
300
  def gem_for_database
298
301
  # %w( mysql postgresql sqlite3 oracle frontbase ibm_db sqlserver jdbcmysql jdbcsqlite3 jdbcpostgresql )
299
302
  case options[:database]
300
- when "mysql" then ["mysql2", [">= 0.3.18", "< 0.5"]]
301
- when "postgresql" then ["pg", ["~> 0.18"]]
303
+ when "mysql" then ["mysql2", ["~> 0.4.4"]]
304
+ when "postgresql" then ["pg", [">= 0.18", "< 2.0"]]
302
305
  when "oracle" then ["activerecord-oracle_enhanced-adapter", nil]
303
306
  when "frontbase" then ["ruby-frontbase", nil]
304
307
  when "sqlserver" then ["activerecord-sqlserver-adapter", nil]
@@ -312,11 +315,13 @@ module Rails
312
315
 
313
316
  def convert_database_option_for_jruby
314
317
  if defined?(JRUBY_VERSION)
315
- case options[:database]
316
- when "postgresql" then options[:database].replace "jdbcpostgresql"
317
- when "mysql" then options[:database].replace "jdbcmysql"
318
- when "sqlite3" then options[:database].replace "jdbcsqlite3"
318
+ opt = options.dup
319
+ case opt[:database]
320
+ when "postgresql" then opt[:database] = "jdbcpostgresql"
321
+ when "mysql" then opt[:database] = "jdbcmysql"
322
+ when "sqlite3" then opt[:database] = "jdbcsqlite3"
319
323
  end
324
+ self.options = opt.freeze
320
325
  end
321
326
  end
322
327
 
@@ -435,6 +440,10 @@ module Rails
435
440
  !options[:skip_listen] && os_supports_listen_out_of_the_box?
436
441
  end
437
442
 
443
+ def depend_on_bootsnap?
444
+ !options[:skip_bootsnap] && !options[:dev]
445
+ end
446
+
438
447
  def os_supports_listen_out_of_the_box?
439
448
  RbConfig::CONFIG["host_os"] =~ /darwin|linux/
440
449
  end
@@ -456,16 +465,6 @@ module Rails
456
465
  end
457
466
  end
458
467
 
459
- def run_active_storage
460
- unless skip_active_storage?
461
- if bundle_install?
462
- rails_command "active_storage:install", capture: options[:quiet]
463
- else
464
- log("Active Storage installation was skipped. Please run `bin/rails active_storage:install` to install Active Storage files.")
465
- end
466
- end
467
- end
468
-
469
468
  def empty_directory_with_keep_file(destination, config = {})
470
469
  empty_directory(destination, config)
471
470
  keep_file(destination)
@@ -75,7 +75,7 @@ module Rails
75
75
  when :date then :date_select
76
76
  when :text then :text_area
77
77
  when :boolean then :check_box
78
- else
78
+ else
79
79
  :text_field
80
80
  end
81
81
  end
@@ -91,7 +91,7 @@ module Rails
91
91
  when :text then "MyText"
92
92
  when :boolean then false
93
93
  when :references, :belongs_to then nil
94
- else
94
+ else
95
95
  ""
96
96
  end
97
97
  end
@@ -348,6 +348,14 @@ module Rails
348
348
  build(:public_directory)
349
349
  end
350
350
 
351
+ def create_tmp_files
352
+ build(:tmp)
353
+ end
354
+
355
+ def create_vendor_files
356
+ build(:vendor)
357
+ end
358
+
351
359
  def create_test_files
352
360
  build(:test) unless options[:skip_test]
353
361
  end
@@ -360,14 +368,6 @@ module Rails
360
368
  build(:storage) unless skip_active_storage?
361
369
  end
362
370
 
363
- def create_tmp_files
364
- build(:tmp)
365
- end
366
-
367
- def create_vendor_files
368
- build(:vendor)
369
- end
370
-
371
371
  def delete_app_assets_if_api_option
372
372
  if options[:api]
373
373
  remove_dir "app/assets"
@@ -463,7 +463,6 @@ module Rails
463
463
 
464
464
  public_task :apply_rails_template, :run_bundle
465
465
  public_task :run_webpack, :generate_spring_binstubs
466
- public_task :run_active_storage
467
466
 
468
467
  def run_after_bundle_callbacks
469
468
  @after_bundle_callbacks.each(&:call)
@@ -29,9 +29,11 @@ ruby <%= "'#{RUBY_VERSION}'" -%>
29
29
  # Use Capistrano for deployment
30
30
  # gem 'capistrano-rails', group: :development
31
31
 
32
+ <% if depend_on_bootsnap? -%>
32
33
  # Reduces boot times through caching; required in config/boot.rb
33
34
  gem 'bootsnap', '>= 1.1.0', require: false
34
35
 
36
+ <%- end -%>
35
37
  <%- if options.api? -%>
36
38
  # Use Rack CORS for handling Cross-Origin Resource Sharing (CORS), making cross-origin AJAX possible
37
39
  # gem 'rack-cors'
@@ -41,13 +43,6 @@ gem 'bootsnap', '>= 1.1.0', require: false
41
43
  group :development, :test do
42
44
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
43
45
  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
44
- <%- if depends_on_system_test? -%>
45
- # Adds support for Capybara system testing and selenium driver
46
- gem 'capybara', '~> 2.15'
47
- gem 'selenium-webdriver'
48
- # Easy installation and use of chromedriver to run system tests with Chrome
49
- gem 'chromedriver-helper'
50
- <%- end -%>
51
46
  end
52
47
 
53
48
  group :development do
@@ -70,6 +65,16 @@ group :development do
70
65
  <% end -%>
71
66
  <% end -%>
72
67
  end
68
+
69
+ <%- if depends_on_system_test? -%>
70
+ group :test do
71
+ # Adds support for Capybara system testing and selenium driver
72
+ gem 'capybara', '~> 2.15'
73
+ gem 'selenium-webdriver'
74
+ # Easy installation and use of chromedriver to run system tests with Chrome
75
+ gem 'chromedriver-helper'
76
+ end
77
+ <%- end -%>
73
78
  <% end -%>
74
79
 
75
80
  # Windows does not include zoneinfo files, so bundle the tzinfo-data gem
@@ -1,7 +1,7 @@
1
1
  APP_ROOT = File.expand_path('..', __dir__)
2
2
  Dir.chdir(APP_ROOT) do
3
3
  begin
4
- exec "yarnpkg #{ARGV.join(' ')}"
4
+ exec "yarnpkg", *ARGV
5
5
  rescue Errno::ENOENT
6
6
  $stderr.puts "Yarn executable was not detected in the system."
7
7
  $stderr.puts "Download Yarn at https://yarnpkg.com/en/docs/install"
@@ -27,8 +27,9 @@ module <%= app_const_base %>
27
27
  config.load_defaults <%= Rails::VERSION::STRING.to_f %>
28
28
 
29
29
  # Settings in config/environments/* take precedence over those specified here.
30
- # Application configuration should go into files in config/initializers
31
- # -- all .rb files in that directory are automatically loaded.
30
+ # Application configuration can go into files in config/initializers
31
+ # -- all .rb files in that directory are automatically loaded after loading
32
+ # the framework and any gems in your application.
32
33
  <%- if options.api? -%>
33
34
 
34
35
  # Only loads a smaller set of middleware suitable for API only apps.
@@ -1,4 +1,6 @@
1
1
  ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
2
2
 
3
3
  require 'bundler/setup' # Set up gems listed in the Gemfile.
4
+ <% if depend_on_bootsnap? -%>
4
5
  require 'bootsnap/setup' # Speed up boot time by caching expensive operations.
6
+ <%- end -%>
@@ -14,7 +14,7 @@ Rails.application.configure do
14
14
 
15
15
  # Enable/disable caching. By default caching is disabled.
16
16
  # Run rails dev:cache to toggle caching.
17
- if Rails.root.join('tmp/caching-dev.txt').exist?
17
+ if Rails.root.join('tmp', 'caching-dev.txt').exist?
18
18
  config.action_controller.perform_caching = true
19
19
 
20
20
  config.cache_store = :memory_store
@@ -46,6 +46,9 @@ Rails.application.configure do
46
46
  # Raise an error on page load if there are pending migrations.
47
47
  config.active_record.migration_error = :page_load
48
48
 
49
+ # Highlight code that triggered database queries in logs.
50
+ config.active_record.verbose_query_logs = true
51
+
49
52
  <%- end -%>
50
53
  <%- unless options.skip_sprockets? -%>
51
54
  # Debug mode disables concatenation and preprocessing of assets.
@@ -1,18 +1,20 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
1
3
  # Define an application-wide content security policy
2
4
  # For further information see the following documentation
3
5
  # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy
4
6
 
5
- Rails.application.config.content_security_policy do |p|
6
- p.default_src :self, :https
7
- p.font_src :self, :https, :data
8
- p.img_src :self, :https, :data
9
- p.object_src :none
10
- p.script_src :self, :https
11
- p.style_src :self, :https, :unsafe_inline
7
+ # Rails.application.config.content_security_policy do |policy|
8
+ # policy.default_src :self, :https
9
+ # policy.font_src :self, :https, :data
10
+ # policy.img_src :self, :https, :data
11
+ # policy.object_src :none
12
+ # policy.script_src :self, :https
13
+ # policy.style_src :self, :https, :unsafe_inline
12
14
 
13
- # Specify URI for violation reports
14
- # p.report_uri "/csp-violation-report-endpoint"
15
- end
15
+ # # Specify URI for violation reports
16
+ # # policy.report_uri "/csp-violation-report-endpoint"
17
+ # end
16
18
 
17
19
  # Report CSP violations to a specified URI
18
20
  # For further information see the following documentation:
@@ -10,7 +10,7 @@
10
10
  # This is needed for recyclable cache keys.
11
11
  # Rails.application.config.active_record.cache_versioning = true
12
12
 
13
- # Use AES 256 GCM authenticated encryption for encrypted cookies.
13
+ # Use AES-256-GCM authenticated encryption for encrypted cookies.
14
14
  # Existing cookies will be converted on read then written with the new scheme.
15
15
  # Rails.application.config.action_dispatch.use_authenticated_cookie_encryption = true
16
16
 
@@ -25,3 +25,6 @@
25
25
  # Store boolean values are in sqlite3 databases as 1 and 0 instead of 't' and
26
26
  # 'f' after migrating old data.
27
27
  # Rails.application.config.active_record.sqlite3.represent_boolean_as_integer = true
28
+
29
+ # Use SHA-1 instead of MD5 to generate non-sensitive digests, such as the ETag header.
30
+ # Rails.application.config.active_support.use_sha1_digests = true
@@ -26,31 +26,9 @@ environment ENV.fetch("RAILS_ENV") { "development" }
26
26
  # Use the `preload_app!` method when specifying a `workers` number.
27
27
  # This directive tells Puma to first boot the application and load code
28
28
  # before forking the application. This takes advantage of Copy On Write
29
- # process behavior so workers use less memory. If you use this option
30
- # you need to make sure to reconnect any threads in the `on_worker_boot`
31
- # block.
29
+ # process behavior so workers use less memory.
32
30
  #
33
31
  # preload_app!
34
32
 
35
- # If you are preloading your application and using Active Record, it's
36
- # recommended that you close any connections to the database before workers
37
- # are forked to prevent connection leakage.
38
- #
39
- # before_fork do
40
- # ActiveRecord::Base.connection_pool.disconnect! if defined?(ActiveRecord)
41
- # end
42
-
43
- # The code in the `on_worker_boot` will be called if you are using
44
- # clustered mode by specifying a number of `workers`. After each worker
45
- # process is booted, this block will be run. If you are using the `preload_app!`
46
- # option, you will want to use this block to reconnect to any threads
47
- # or connections that may have been created at application boot, as Ruby
48
- # cannot share connections between processes.
49
- #
50
- # on_worker_boot do
51
- # ActiveRecord::Base.establish_connection if defined?(ActiveRecord)
52
- # end
53
- #
54
-
55
33
  # Allow puma to be restarted by `rails restart` command.
56
34
  plugin :tmp_restart
@@ -18,7 +18,7 @@ local:
18
18
  # google:
19
19
  # service: GCS
20
20
  # project: your_project
21
- # keyfile: <%%= Rails.root.join("path/to/gcs.keyfile") %>
21
+ # credentials: <%%= Rails.root.join("path/to/gcs.keyfile") %>
22
22
  # bucket: your_own_bucket
23
23
 
24
24
  # Use rails credentials:edit to set the Azure Storage secret (as azure_storage:storage_access_key)
@@ -1,3 +1,4 @@
1
+ ENV['RAILS_ENV'] ||= 'test'
1
2
  require_relative '../config/environment'
2
3
  require 'rails/test_help'
3
4
 
@@ -8,7 +8,7 @@ module Rails
8
8
  module Generators
9
9
  class CredentialsGenerator < Base
10
10
  def add_credentials_file
11
- unless credentials.exist?
11
+ unless credentials.content_path.exist?
12
12
  template = credentials_template
13
13
 
14
14
  say "Adding #{credentials.content_path} to store encrypted credentials."
@@ -26,7 +26,9 @@ module Rails
26
26
  end
27
27
 
28
28
  def add_credentials_file_silently(template = nil)
29
- credentials.write(credentials_template)
29
+ unless credentials.content_path.exist?
30
+ credentials.write(credentials_template)
31
+ end
30
32
  end
31
33
 
32
34
  private
@@ -34,7 +36,8 @@ module Rails
34
36
  ActiveSupport::EncryptedConfiguration.new(
35
37
  config_path: "config/credentials.yml.enc",
36
38
  key_path: "config/master.key",
37
- env_key: "RAILS_MASTER_KEY"
39
+ env_key: "RAILS_MASTER_KEY",
40
+ raise_if_missing_key: true
38
41
  )
39
42
  end
40
43
 
@@ -24,7 +24,7 @@ module Rails
24
24
 
25
25
  def add_encrypted_file_silently(file_path, key_path, template = encrypted_file_template)
26
26
  unless File.exist?(file_path)
27
- setup = { content_path: file_path, key_path: key_path, env_key: "RAILS_MASTER_KEY" }
27
+ setup = { content_path: file_path, key_path: key_path, env_key: "RAILS_MASTER_KEY", raise_if_missing_key: true }
28
28
  ActiveSupport::EncryptedFile.new(setup).write(template)
29
29
  end
30
30
  end
@@ -1,3 +1,6 @@
1
+ # Configure Rails Environment
2
+ ENV["RAILS_ENV"] = "test"
3
+
1
4
  require_relative "<%= File.join('..', options[:dummy_path], 'config/environment') -%>"
2
5
  <% unless options[:skip_active_record] -%>
3
6
  ActiveRecord::Migrator.migrations_paths = [File.expand_path("../<%= options[:dummy_path] -%>/db/migrate", __dir__)]
@@ -23,7 +23,7 @@ module TestUnit # :nodoc:
23
23
  template template_file,
24
24
  File.join("test/controllers", controller_class_path, "#{controller_file_name}_controller_test.rb")
25
25
 
26
- unless options.api? || options[:system_tests].nil?
26
+ if !options.api? && options[:system_tests]
27
27
  template "system_test.rb", File.join("test/system", class_path, "#{file_name.pluralize}_test.rb")
28
28
  end
29
29
  end
@@ -99,7 +99,7 @@ module Rails
99
99
  end
100
100
 
101
101
  property "Database schema version" do
102
- ActiveRecord::Migrator.current_version rescue nil
102
+ ActiveRecord::Base.connection.migration_context.current_version rescue nil
103
103
  end
104
104
  end
105
105
  end
@@ -6,9 +6,9 @@ class Rails::MailersController < Rails::ApplicationController # :nodoc:
6
6
  prepend_view_path ActionDispatch::DebugExceptions::RESCUES_TEMPLATE_PATH
7
7
 
8
8
  before_action :require_local!, unless: :show_previews?
9
- before_action :find_preview, only: :preview
9
+ before_action :find_preview, :set_locale, only: :preview
10
10
 
11
- helper_method :part_query
11
+ helper_method :part_query, :locale_query
12
12
 
13
13
  def index
14
14
  @previews = ActionMailer::Preview.all
@@ -84,4 +84,12 @@ class Rails::MailersController < Rails::ApplicationController # :nodoc:
84
84
  def part_query(mime_type)
85
85
  request.query_parameters.merge(part: mime_type).to_query
86
86
  end
87
+
88
+ def locale_query(locale)
89
+ request.query_parameters.merge(locale: locale).to_query
90
+ end
91
+
92
+ def set_locale
93
+ I18n.locale = params[:locale] || I18n.default_locale
94
+ end
87
95
  end
@@ -55,7 +55,7 @@ module Rails
55
55
  ActiveSupport.on_load(:before_configuration, yield: true, &block)
56
56
  end
57
57
 
58
- # Third configurable block to run. Does not run if +config.cache_classes+
58
+ # Third configurable block to run. Does not run if +config.eager_load+
59
59
  # set to false.
60
60
  def before_eager_load(&block)
61
61
  ActiveSupport.on_load(:before_eager_load, yield: true, &block)
@@ -95,11 +95,25 @@
95
95
  </dd>
96
96
  <% end %>
97
97
 
98
+ <dt>Format:</dt>
98
99
  <% if @email.multipart? %>
99
100
  <dd>
100
- <select onchange="formatChanged(this);">
101
- <option <%= request.format == Mime[:html] ? 'selected' : '' %> value="?<%= part_query('text/html') %>">View as HTML email</option>
102
- <option <%= request.format == Mime[:text] ? 'selected' : '' %> value="?<%= part_query('text/plain') %>">View as plain-text email</option>
101
+ <select id="part" onchange="refreshBody();">
102
+ <option <%= request.format == Mime[:html] ? 'selected' : '' %> value="<%= part_query('text/html') %>">View as HTML email</option>
103
+ <option <%= request.format == Mime[:text] ? 'selected' : '' %> value="<%= part_query('text/plain') %>">View as plain-text email</option>
104
+ </select>
105
+ </dd>
106
+ <% else %>
107
+ <dd id="mime_type" data-mime-type="<%= part_query(@email.mime_type) %>"><%= @email.mime_type == 'text/html' ? 'HTML email' : 'plain-text email' %></dd>
108
+ <% end %>
109
+
110
+ <% if I18n.available_locales.count > 1 %>
111
+ <dt>Locale:</dt>
112
+ <dd>
113
+ <select id="locale" onchange="refreshBody();">
114
+ <% I18n.available_locales.each do |locale| %>
115
+ <option <%= I18n.locale == locale ? 'selected' : '' %> value="<%= locale_query(locale) %>"><%= locale %></option>
116
+ <% end %>
103
117
  </select>
104
118
  </dd>
105
119
  <% end %>
@@ -116,15 +130,27 @@
116
130
  <% end %>
117
131
 
118
132
  <script>
119
- function formatChanged(form) {
120
- var part_name = form.options[form.selectedIndex].value
121
- var iframe =document.getElementsByName('messageBody')[0];
122
- iframe.contentWindow.location.replace(part_name);
133
+ function refreshBody() {
134
+ var part_select = document.querySelector('select#part');
135
+ var locale_select = document.querySelector('select#locale');
136
+ var iframe = document.getElementsByName('messageBody')[0];
137
+ var part_param = part_select ?
138
+ part_select.options[part_select.selectedIndex].value :
139
+ document.querySelector('#mime_type').dataset.mimeType;
140
+ var locale_param = locale_select ? locale_select.options[locale_select.selectedIndex].value : null;
141
+ var fresh_location;
142
+ if (locale_param) {
143
+ fresh_location = '?' + part_param + '&' + locale_param;
144
+ } else {
145
+ fresh_location = '?' + part_param;
146
+ }
147
+ iframe.contentWindow.location = fresh_location;
123
148
 
124
149
  if (history.replaceState) {
125
- var url = location.pathname.replace(/\.(txt|html)$/, '');
126
- var format = /html/.test(part_name) ? '.html' : '.txt';
127
- window.history.replaceState({}, '', url + format);
150
+ var url = location.pathname.replace(/\.(txt|html)$/, '');
151
+ var format = /html/.test(part_param) ? '.html' : '.txt';
152
+ var state_to_replace = locale_param ? (url + format + '?' + locale_param) : (url + format);
153
+ window.history.replaceState({}, '', state_to_replace);
128
154
  }
129
155
  }
130
156
  </script>
@@ -29,10 +29,6 @@ if defined?(ActiveRecord::Base)
29
29
  end
30
30
 
31
31
  ActionDispatch::IntegrationTest.fixture_path = ActiveSupport::TestCase.fixture_path
32
-
33
- def create_fixtures(*fixture_set_names, &block)
34
- FixtureSet.create_fixtures(ActiveSupport::TestCase.fixture_path, fixture_set_names, {}, &block)
35
- end
36
32
  end
37
33
 
38
34
  # :enddoc:
@@ -64,11 +64,17 @@ module Rails
64
64
  end
65
65
 
66
66
  def format_line(result)
67
- "%s#%s = %.2f s = %s" % [result.class, result.name, result.time, result.result_code]
67
+ klass = result.respond_to?(:klass) ? result.klass : result.class
68
+ "%s#%s = %.2f s = %s" % [klass, result.name, result.time, result.result_code]
68
69
  end
69
70
 
70
71
  def format_rerun_snippet(result)
71
- location, line = result.method(result.name).source_location
72
+ location, line = if result.respond_to?(:source_location)
73
+ result.source_location
74
+ else
75
+ result.method(result.name).source_location
76
+ end
77
+
72
78
  "#{executable} #{relative_path_for(location)}:#{line}"
73
79
  end
74
80
 
@@ -13,7 +13,7 @@ module Rails
13
13
  class << self
14
14
  def attach_before_load_options(opts)
15
15
  opts.on("--warnings", "-w", "Run with Ruby warnings enabled") {}
16
- opts.on("--environment", "-e", "Run tests in the ENV environment") {}
16
+ opts.on("-e", "--environment ENV", "Run tests in the ENV environment") {}
17
17
  end
18
18
 
19
19
  def parse_options(argv)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: railties
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.2.0.beta2
4
+ version: 5.2.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-11-28 00:00:00.000000000 Z
11
+ date: 2018-01-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 5.2.0.beta2
19
+ version: 5.2.0.rc1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 5.2.0.beta2
26
+ version: 5.2.0.rc1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: actionpack
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 5.2.0.beta2
33
+ version: 5.2.0.rc1
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 5.2.0.beta2
40
+ version: 5.2.0.rc1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -92,14 +92,14 @@ dependencies:
92
92
  requirements:
93
93
  - - '='
94
94
  - !ruby/object:Gem::Version
95
- version: 5.2.0.beta2
95
+ version: 5.2.0.rc1
96
96
  type: :development
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
100
  - - '='
101
101
  - !ruby/object:Gem::Version
102
- version: 5.2.0.beta2
102
+ version: 5.2.0.rc1
103
103
  description: 'Rails internals: application bootup, plugins, generators, and rake tasks.'
104
104
  email: david@loudthinking.com
105
105
  executables:
@@ -421,8 +421,8 @@ homepage: http://rubyonrails.org
421
421
  licenses:
422
422
  - MIT
423
423
  metadata:
424
- source_code_uri: https://github.com/rails/rails/tree/v5.2.0.beta2/railties
425
- changelog_uri: https://github.com/rails/rails/blob/v5.2.0.beta2/railties/CHANGELOG.md
424
+ source_code_uri: https://github.com/rails/rails/tree/v5.2.0.rc1/railties
425
+ changelog_uri: https://github.com/rails/rails/blob/v5.2.0.rc1/railties/CHANGELOG.md
426
426
  post_install_message:
427
427
  rdoc_options:
428
428
  - "--exclude"
@@ -441,7 +441,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
441
441
  version: 1.3.1
442
442
  requirements: []
443
443
  rubyforge_project:
444
- rubygems_version: 2.6.12
444
+ rubygems_version: 2.7.3
445
445
  signing_key:
446
446
  specification_version: 4
447
447
  summary: Tools for creating, working with, and running Rails applications.