diff options
26 files changed, 168 insertions, 100 deletions
| diff --git a/actionpack/CHANGELOG.md b/actionpack/CHANGELOG.md index dc98fb583c..24dc207656 100644 --- a/actionpack/CHANGELOG.md +++ b/actionpack/CHANGELOG.md @@ -431,10 +431,4 @@      *Piotr Sarnacki*, *Łukasz Strzałkowski* -*   Fix removing trailing slash for mounted apps. - -    Fixes #3215. - -    *Piotr Sarnacki* -  Please check [4-0-stable](https://github.com/rails/rails/blob/4-0-stable/actionpack/CHANGELOG.md) for previous changes. diff --git a/actionpack/lib/action_dispatch/journey/router.rb b/actionpack/lib/action_dispatch/journey/router.rb index da32f1bfe7..419e665d12 100644 --- a/actionpack/lib/action_dispatch/journey/router.rb +++ b/actionpack/lib/action_dispatch/journey/router.rb @@ -54,7 +54,7 @@ module ActionDispatch        end        def call(env) -        env['PATH_INFO'] = normalize_path(env['PATH_INFO']) +        env['PATH_INFO'] = Utils.normalize_path(env['PATH_INFO'])          find_routes(env).each do |match, parameters, route|            script_name, path_info, set_params = env.values_at('SCRIPT_NAME', @@ -103,12 +103,6 @@ module ActionDispatch        private -        def normalize_path(path) -          path = "/#{path}" -          path.squeeze!('/') -          path -        end -          def partitioned_routes            routes.partitioned_routes          end diff --git a/actionpack/test/dispatch/mount_test.rb b/actionpack/test/dispatch/mount_test.rb index 683a4f01e2..cdf00d84fb 100644 --- a/actionpack/test/dispatch/mount_test.rb +++ b/actionpack/test/dispatch/mount_test.rb @@ -44,11 +44,6 @@ class TestRoutingMount < ActionDispatch::IntegrationTest            "A named route should be defined with a parent's prefix"    end -  def test_trailing_slash_is_not_removed_from_path_info -    get "/sprockets/omg/" -    assert_equal "/sprockets -- /omg/", response.body -  end -    def test_mounting_sets_script_name      get "/sprockets/omg"      assert_equal "/sprockets -- /omg", response.body diff --git a/actionpack/test/dispatch/routing_test.rb b/actionpack/test/dispatch/routing_test.rb index 5a532dc38f..795911497e 100644 --- a/actionpack/test/dispatch/routing_test.rb +++ b/actionpack/test/dispatch/routing_test.rb @@ -2894,6 +2894,24 @@ class TestRoutingMapper < ActionDispatch::IntegrationTest      assert_equal '/foo', foo_root_path    end +  def test_trailing_slash +    draw do +      resources :streams +    end + +    get '/streams' +    assert @response.ok?, 'route without trailing slash should work' + +    get '/streams/' +    assert @response.ok?, 'route with trailing slash should work' + +    get '/streams?foobar' +    assert @response.ok?, 'route without trailing slash and with QUERY_STRING should work' + +    get '/streams/?foobar' +    assert @response.ok?, 'route with trailing slash and with QUERY_STRING should work' +  end +  private    def draw(&block) diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index 5c5dd99ab7..d289f616b8 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,3 +1,7 @@ +*   Make `touch` fire the `after_commit` and `after_rollback` callbacks. + +    *Harry Brundage* +  *   Enable partial indexes for sqlite >= 3.8.0      See http://www.sqlite.org/partialindex.html diff --git a/activerecord/lib/active_record/transactions.rb b/activerecord/lib/active_record/transactions.rb index 45313b5e75..c33ffeece0 100644 --- a/activerecord/lib/active_record/transactions.rb +++ b/activerecord/lib/active_record/transactions.rb @@ -6,9 +6,6 @@ module ActiveRecord      extend ActiveSupport::Concern      ACTIONS = [:create, :destroy, :update] -    class TransactionError < ActiveRecordError # :nodoc: -    end -      included do        define_callbacks :commit, :rollback,                         terminator: ->(_, result) { result == false }, @@ -243,15 +240,14 @@ module ActiveRecord        def set_options_for_callbacks!(args)          options = args.last          if options.is_a?(Hash) && options[:on] -          assert_valid_transaction_action(options[:on]) -          options[:if] = Array(options[:if])            fire_on = Array(options[:on]) +          assert_valid_transaction_action(fire_on) +          options[:if] = Array(options[:if])            options[:if] << "transaction_include_any_action?(#{fire_on})"          end        end        def assert_valid_transaction_action(actions) -        actions = Array(actions)          if (actions - ACTIONS).any?            raise ArgumentError, ":on conditions for after_commit and after_rollback callbacks have to be one of #{ACTIONS.join(",")}"          end @@ -277,6 +273,10 @@ module ActiveRecord        with_transaction_returning_status { super }      end +    def touch(*) #:nodoc: +      with_transaction_returning_status { super } +    end +      # Reset id and @new_record if the transaction rolls back.      def rollback_active_record_state!        remember_transaction_record_state diff --git a/activerecord/test/cases/adapters/postgresql/json_test.rb b/activerecord/test/cases/adapters/postgresql/json_test.rb index 01e7334aad..3daef399d8 100644 --- a/activerecord/test/cases/adapters/postgresql/json_test.rb +++ b/activerecord/test/cases/adapters/postgresql/json_test.rb @@ -21,7 +21,7 @@ class PostgresqlJSONTest < ActiveRecord::TestCase          end        end      rescue ActiveRecord::StatementInvalid -      return skip "do not test on PG without json" +      skip "do not test on PG without json"      end      @column = JsonDataType.columns.find { |c| c.name == 'payload' }    end diff --git a/activerecord/test/cases/adapters/postgresql/range_test.rb b/activerecord/test/cases/adapters/postgresql/range_test.rb index a56b8ac791..5c2d8e1c1d 100644 --- a/activerecord/test/cases/adapters/postgresql/range_test.rb +++ b/activerecord/test/cases/adapters/postgresql/range_test.rb @@ -26,7 +26,7 @@ if ActiveRecord::Base.connection.supports_ranges?            end          end        rescue ActiveRecord::StatementInvalid -        return skip "do not test on PG without range" +        skip "do not test on PG without range"        end        insert_range(id: 101, diff --git a/activerecord/test/cases/adapters/postgresql/xml_test.rb b/activerecord/test/cases/adapters/postgresql/xml_test.rb index bf14b378d8..dd2a727afe 100644 --- a/activerecord/test/cases/adapters/postgresql/xml_test.rb +++ b/activerecord/test/cases/adapters/postgresql/xml_test.rb @@ -18,7 +18,7 @@ class PostgresqlXMLTest < ActiveRecord::TestCase          end        end      rescue ActiveRecord::StatementInvalid -      return skip "do not test on PG without xml" +      skip "do not test on PG without xml"      end      @column = XmlDataType.columns.find { |c| c.name == 'payload' }    end diff --git a/activerecord/test/cases/autosave_association_test.rb b/activerecord/test/cases/autosave_association_test.rb index 517d2674a7..fe5de44409 100644 --- a/activerecord/test/cases/autosave_association_test.rb +++ b/activerecord/test/cases/autosave_association_test.rb @@ -574,6 +574,13 @@ class TestDestroyAsPartOfAutosaveAssociation < ActiveRecord::TestCase      @ship = @pirate.create_ship(:name => 'Nights Dirty Lightning')    end +  def teardown +    # We are running without transactional fixtures and need to cleanup. +    Bird.delete_all +    @ship.delete +    @pirate.delete +  end +    # reload    def test_a_marked_for_destruction_record_should_not_be_be_marked_after_reload      @pirate.mark_for_destruction diff --git a/activerecord/test/cases/base_test.rb b/activerecord/test/cases/base_test.rb index 4bc6002bfe..983bcd9826 100644 --- a/activerecord/test/cases/base_test.rb +++ b/activerecord/test/cases/base_test.rb @@ -626,6 +626,7 @@ class BasicsTest < ActiveRecord::TestCase        assert_equal ["EUC-JP"], Weird.columns.map {|c| c.name.encoding.name }.uniq      ensure        silence_warnings { Encoding.default_internal = old_default_internal } +      Weird.reset_column_information      end    end @@ -1129,7 +1130,7 @@ class BasicsTest < ActiveRecord::TestCase      k = Class.new(ak)      k.table_name = "projects"      orig_name = k.sequence_name -    return skip "sequences not supported by db" unless orig_name +    skip "sequences not supported by db" unless orig_name      assert_equal k.reset_sequence_name, orig_name    end diff --git a/activerecord/test/cases/finder_test.rb b/activerecord/test/cases/finder_test.rb index 5125d5df2a..9b575557de 100644 --- a/activerecord/test/cases/finder_test.rb +++ b/activerecord/test/cases/finder_test.rb @@ -891,11 +891,4 @@ class FinderTest < ActiveRecord::TestCase          ActiveRecord::Base.send(:replace_bind_variables, statement, vars)        end      end - -    def with_env_tz(new_tz = 'US/Eastern') -      old_tz, ENV['TZ'] = ENV['TZ'], new_tz -      yield -    ensure -      old_tz ? ENV['TZ'] = old_tz : ENV.delete('TZ') -    end  end diff --git a/activerecord/test/cases/integration_test.rb b/activerecord/test/cases/integration_test.rb index 2e71b1a40d..dfb8a608cb 100644 --- a/activerecord/test/cases/integration_test.rb +++ b/activerecord/test/cases/integration_test.rb @@ -3,12 +3,11 @@  require 'cases/helper'  require 'models/company'  require 'models/developer' -require 'models/car' -require 'models/bulb'  require 'models/owner' +require 'models/pet'  class IntegrationTest < ActiveRecord::TestCase -  fixtures :companies, :developers, :owners +  fixtures :companies, :developers, :owners, :pets    def test_to_param_should_return_string      assert_kind_of String, Client.first.to_param @@ -91,13 +90,14 @@ class IntegrationTest < ActiveRecord::TestCase    end    def test_cache_key_changes_when_child_touched -    car = Car.create -    Bulb.create(car: car) +    owner = owners(:blackbeard) +    pet   = pets(:parrot) + +    owner.update_column :updated_at, Time.current +    key = owner.cache_key -    key = car.cache_key -    car.bulb.touch -    car.reload -    assert_not_equal key, car.cache_key +    assert pet.touch +    assert_not_equal key, owner.reload.cache_key    end    def test_cache_key_format_for_existing_record_with_nil_updated_timestamps diff --git a/activerecord/test/cases/migration_test.rb b/activerecord/test/cases/migration_test.rb index 0363bf1048..1bda472d23 100644 --- a/activerecord/test/cases/migration_test.rb +++ b/activerecord/test/cases/migration_test.rb @@ -328,6 +328,7 @@ class MigrationTest < ActiveRecord::TestCase    end    def test_proper_table_name_on_migrator +    reminder_class = new_isolated_reminder_class      assert_deprecated do        assert_equal "table", ActiveRecord::Migrator.proper_table_name('table')      end @@ -335,30 +336,30 @@ class MigrationTest < ActiveRecord::TestCase        assert_equal "table", ActiveRecord::Migrator.proper_table_name(:table)      end      assert_deprecated do -      assert_equal "reminders", ActiveRecord::Migrator.proper_table_name(Reminder) +      assert_equal "reminders", ActiveRecord::Migrator.proper_table_name(reminder_class)      end -    Reminder.reset_table_name +    reminder_class.reset_table_name      assert_deprecated do -      assert_equal Reminder.table_name, ActiveRecord::Migrator.proper_table_name(Reminder) +      assert_equal reminder_class.table_name, ActiveRecord::Migrator.proper_table_name(reminder_class)      end      # Use the model's own prefix/suffix if a model is given      ActiveRecord::Base.table_name_prefix = "ARprefix_"      ActiveRecord::Base.table_name_suffix = "_ARsuffix" -    Reminder.table_name_prefix = 'prefix_' -    Reminder.table_name_suffix = '_suffix' -    Reminder.reset_table_name +    reminder_class.table_name_prefix = 'prefix_' +    reminder_class.table_name_suffix = '_suffix' +    reminder_class.reset_table_name      assert_deprecated do -      assert_equal "prefix_reminders_suffix", ActiveRecord::Migrator.proper_table_name(Reminder) +      assert_equal "prefix_reminders_suffix", ActiveRecord::Migrator.proper_table_name(reminder_class)      end -    Reminder.table_name_prefix = '' -    Reminder.table_name_suffix = '' -    Reminder.reset_table_name +    reminder_class.table_name_prefix = '' +    reminder_class.table_name_suffix = '' +    reminder_class.reset_table_name      # Use AR::Base's prefix/suffix if string or symbol is given      ActiveRecord::Base.table_name_prefix = "prefix_"      ActiveRecord::Base.table_name_suffix = "_suffix" -    Reminder.reset_table_name +    reminder_class.reset_table_name      assert_deprecated do        assert_equal "prefix_table_suffix", ActiveRecord::Migrator.proper_table_name('table')      end @@ -368,28 +369,29 @@ class MigrationTest < ActiveRecord::TestCase    end    def test_proper_table_name_on_migration +    reminder_class = new_isolated_reminder_class      migration = ActiveRecord::Migration.new      assert_equal "table", migration.proper_table_name('table')      assert_equal "table", migration.proper_table_name(:table) -    assert_equal "reminders", migration.proper_table_name(Reminder) -    Reminder.reset_table_name -    assert_equal Reminder.table_name, migration.proper_table_name(Reminder) +    assert_equal "reminders", migration.proper_table_name(reminder_class) +    reminder_class.reset_table_name +    assert_equal reminder_class.table_name, migration.proper_table_name(reminder_class)      # Use the model's own prefix/suffix if a model is given      ActiveRecord::Base.table_name_prefix = "ARprefix_"      ActiveRecord::Base.table_name_suffix = "_ARsuffix" -    Reminder.table_name_prefix = 'prefix_' -    Reminder.table_name_suffix = '_suffix' -    Reminder.reset_table_name -    assert_equal "prefix_reminders_suffix", migration.proper_table_name(Reminder) -    Reminder.table_name_prefix = '' -    Reminder.table_name_suffix = '' -    Reminder.reset_table_name +    reminder_class.table_name_prefix = 'prefix_' +    reminder_class.table_name_suffix = '_suffix' +    reminder_class.reset_table_name +    assert_equal "prefix_reminders_suffix", migration.proper_table_name(reminder_class) +    reminder_class.table_name_prefix = '' +    reminder_class.table_name_suffix = '' +    reminder_class.reset_table_name      # Use AR::Base's prefix/suffix if string or symbol is given      ActiveRecord::Base.table_name_prefix = "prefix_"      ActiveRecord::Base.table_name_suffix = "_suffix" -    Reminder.reset_table_name +    reminder_class.reset_table_name      assert_equal "prefix_table_suffix", migration.proper_table_name('table', migration.table_name_options)      assert_equal "prefix_table_suffix", migration.proper_table_name(:table, migration.table_name_options)    end @@ -532,11 +534,13 @@ class MigrationTest < ActiveRecord::TestCase    end    protected -    def with_env_tz(new_tz = 'US/Eastern') -      old_tz, ENV['TZ'] = ENV['TZ'], new_tz -      yield -    ensure -      old_tz ? ENV['TZ'] = old_tz : ENV.delete('TZ') +    # This is needed to isolate class_attribute assignments like `table_name_prefix` +    # for each test case. +    def new_isolated_reminder_class +      Class.new(Reminder) { +        def self.name; "Reminder"; end +        def self.base_class; self; end +      }      end  end diff --git a/activerecord/test/cases/query_cache_test.rb b/activerecord/test/cases/query_cache_test.rb index 5566563116..da8ae672fe 100644 --- a/activerecord/test/cases/query_cache_test.rb +++ b/activerecord/test/cases/query_cache_test.rb @@ -8,7 +8,7 @@ require 'rack'  class QueryCacheTest < ActiveRecord::TestCase    fixtures :tasks, :topics, :categories, :posts, :categories_posts -  def setup +  teardown do      Task.connection.clear_query_cache      ActiveRecord::Base.connection.disable_query_cache!    end @@ -214,7 +214,7 @@ class QueryCacheExpiryTest < ActiveRecord::TestCase      Post.find(1)      # change the column definition -    Post.connection.change_column :posts, :title, :string, :limit => 80 +    Post.connection.change_column :posts, :title, :string, limit: 80      assert_nothing_raised { Post.find(1) }      # restore the old definition @@ -241,7 +241,6 @@ class QueryCacheExpiryTest < ActiveRecord::TestCase    def test_update      Task.connection.expects(:clear_query_cache).times(2) -      Task.cache do        task = Task.find(1)        task.starting = Time.now.utc @@ -251,7 +250,6 @@ class QueryCacheExpiryTest < ActiveRecord::TestCase    def test_destroy      Task.connection.expects(:clear_query_cache).times(2) -      Task.cache do        Task.find(1).destroy      end @@ -259,7 +257,6 @@ class QueryCacheExpiryTest < ActiveRecord::TestCase    def test_insert      ActiveRecord::Base.connection.expects(:clear_query_cache).times(2) -      Task.cache do        Task.create!      end diff --git a/activerecord/test/cases/transaction_callbacks_test.rb b/activerecord/test/cases/transaction_callbacks_test.rb index 5644a35385..fe0781b7ec 100644 --- a/activerecord/test/cases/transaction_callbacks_test.rb +++ b/activerecord/test/cases/transaction_callbacks_test.rb @@ -1,9 +1,11 @@  require "cases/helper" +require 'models/owner' +require 'models/pet'  require 'models/topic'  class TransactionCallbacksTest < ActiveRecord::TestCase    self.use_transactional_fixtures = false -  fixtures :topics +  fixtures :topics, :owners, :pets    class ReplyWithCallbacks < ActiveRecord::Base      self.table_name = :topics @@ -120,6 +122,18 @@ class TransactionCallbacksTest < ActiveRecord::TestCase      assert_equal [], reply.history    end +  def test_only_call_after_commit_on_update_after_transaction_commits_for_existing_record_on_touch +    @first.after_commit_block(:create){|r| r.history << :commit_on_create} +    @first.after_commit_block(:update){|r| r.history << :commit_on_update} +    @first.after_commit_block(:destroy){|r| r.history << :commit_on_destroy} +    @first.after_rollback_block(:create){|r| r.history << :rollback_on_create} +    @first.after_rollback_block(:update){|r| r.history << :rollback_on_update} +    @first.after_rollback_block(:destroy){|r| r.history << :rollback_on_destroy} + +    @first.touch +    assert_equal [:commit_on_update], @first.history +  end +    def test_call_after_rollback_after_transaction_rollsback      @first.after_commit_block{|r| r.history << :after_commit}      @first.after_rollback_block{|r| r.history << :after_rollback} @@ -148,6 +162,22 @@ class TransactionCallbacksTest < ActiveRecord::TestCase      assert_equal [:rollback_on_update], @first.history    end +  def test_only_call_after_rollback_on_update_after_transaction_rollsback_for_existing_record_on_touch +    @first.after_commit_block(:create){|r| r.history << :commit_on_create} +    @first.after_commit_block(:update){|r| r.history << :commit_on_update} +    @first.after_commit_block(:destroy){|r| r.history << :commit_on_destroy} +    @first.after_rollback_block(:create){|r| r.history << :rollback_on_create} +    @first.after_rollback_block(:update){|r| r.history << :rollback_on_update} +    @first.after_rollback_block(:destroy){|r| r.history << :rollback_on_destroy} + +    Topic.transaction do +      @first.touch +      raise ActiveRecord::Rollback +    end + +    assert_equal [:rollback_on_update], @first.history +  end +    def test_only_call_after_rollback_on_destroy_after_transaction_rollsback_for_destroyed_record      @first.after_commit_block(:create){|r| r.history << :commit_on_create}      @first.after_commit_block(:update){|r| r.history << :commit_on_update} @@ -279,6 +309,21 @@ class TransactionCallbacksTest < ActiveRecord::TestCase    def test_after_commit_callbacks_should_validate_on_condition      assert_raise(ArgumentError) { Topic.send(:after_commit, :on => :save) }    end + +  def test_saving_a_record_with_a_belongs_to_that_specifies_touching_the_parent_should_call_callbacks_on_the_parent_object +    pet   = Pet.first +    owner = pet.owner +    flag = false + +    owner.on_after_commit do +      flag = true +    end + +    pet.name = "Fluffy the Third" +    pet.save + +    assert flag +  end  end  class CallbacksOnMultipleActionsTest < ActiveRecord::TestCase diff --git a/activerecord/test/models/car.rb b/activerecord/test/models/car.rb index c4a15a79e2..db0f93f63b 100644 --- a/activerecord/test/models/car.rb +++ b/activerecord/test/models/car.rb @@ -15,7 +15,6 @@ class Car < ActiveRecord::Base    scope :incl_engines, -> { includes(:engines) }    scope :order_using_new_style,  -> { order('name asc') } -  end  class CoolCar < Car diff --git a/activerecord/test/models/owner.rb b/activerecord/test/models/owner.rb index 1c7ed4aa3e..cf24502d3a 100644 --- a/activerecord/test/models/owner.rb +++ b/activerecord/test/models/owner.rb @@ -2,4 +2,21 @@ class Owner < ActiveRecord::Base    self.primary_key = :owner_id    has_many :pets, -> { order 'pets.name desc' }    has_many :toys, :through => :pets + +  after_commit :execute_blocks + +  def blocks +    @blocks ||= [] +  end + +  def on_after_commit(&block) +    blocks << block +  end + +  def execute_blocks +    blocks.each do |block| +      block.call(self) +    end +    @blocks = [] +  end  end diff --git a/guides/code/getting_started/app/views/layouts/application.html.erb b/guides/code/getting_started/app/views/layouts/application.html.erb index 95368c37a3..d0ba8415e6 100644 --- a/guides/code/getting_started/app/views/layouts/application.html.erb +++ b/guides/code/getting_started/app/views/layouts/application.html.erb @@ -2,8 +2,8 @@  <html>  <head>    <title>Blog</title> -  <%= stylesheet_link_tag    "application", media: "all", "data-turbolinks-track" => true %> -  <%= javascript_include_tag "application", "data-turbolinks-track" => true %> +  <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track' => true %> +  <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>    <%= csrf_meta_tags %>  </head>  <body> diff --git a/guides/code/getting_started/config/environments/test.rb b/guides/code/getting_started/config/environments/test.rb index 00adaa5015..34ab1530d1 100644 --- a/guides/code/getting_started/config/environments/test.rb +++ b/guides/code/getting_started/config/environments/test.rb @@ -14,7 +14,7 @@ Blog::Application.configure do    # Configure static asset server for tests with Cache-Control for performance.    config.serve_static_assets = true -  config.static_cache_control = "public, max-age=3600" +  config.static_cache_control = 'public, max-age=3600'    # Show full error reports and disable caching.    config.consider_all_requests_local       = true diff --git a/guides/source/upgrading_ruby_on_rails.md b/guides/source/upgrading_ruby_on_rails.md index 72a4bb4c2d..ab8cabe48d 100644 --- a/guides/source/upgrading_ruby_on_rails.md +++ b/guides/source/upgrading_ruby_on_rails.md @@ -130,7 +130,7 @@ Rails-specific features. For example:  ```ruby  class FooBar    def as_json(options = nil) -    { foo: "bar" } +    { foo: 'bar' }    end  end @@ -503,13 +503,13 @@ get 'こんにちは', controller: 'welcome', action: 'index'  ```ruby    # Rails 3.x -  match "/" => "root#index" +  match '/' => 'root#index'    # becomes -  match "/" => "root#index", via: :get +  match '/' => 'root#index', via: :get    # or -  get "/" => "root#index" +  get '/' => 'root#index'  ```  * Rails 4.0 has removed `ActionDispatch::BestStandardsSupport` middleware, `<!DOCTYPE html>` already triggers standards mode per http://msdn.microsoft.com/en-us/library/jj676915(v=vs.85).aspx and ChromeFrame header has been moved to `config.action_dispatch.default_headers`. @@ -705,7 +705,7 @@ You can help test performance with these additions to your test environment:  ```ruby  # Configure static asset server for tests with Cache-Control for performance  config.serve_static_assets = true -config.static_cache_control = "public, max-age=3600" +config.static_cache_control = 'public, max-age=3600'  ```  ### config/initializers/wrap_parameters.rb diff --git a/railties/CHANGELOG.md b/railties/CHANGELOG.md index e314ab5637..da7a4ce59a 100644 --- a/railties/CHANGELOG.md +++ b/railties/CHANGELOG.md @@ -1,6 +1,6 @@ -*   Write controller generated routes in routes.rb with single quotes. +*   Use single quotes in generated files. -    *Cristian Mircea Messel* +    *Cristian Mircea Messel*, *Chulki Lee*  *   Only lookup `config.log_level` for stdlib `::Logger` instances.      Assign it as is for third party loggers like `Log4r::Logger`. diff --git a/railties/lib/rails/generators/rails/app/templates/app/views/layouts/application.html.erb.tt b/railties/lib/rails/generators/rails/app/templates/app/views/layouts/application.html.erb.tt index fe71f7122c..75ea52828e 100644 --- a/railties/lib/rails/generators/rails/app/templates/app/views/layouts/application.html.erb.tt +++ b/railties/lib/rails/generators/rails/app/templates/app/views/layouts/application.html.erb.tt @@ -3,14 +3,14 @@  <head>    <title><%= camelized %></title>    <%- if options[:skip_javascript] -%> -  <%%= stylesheet_link_tag    "application", media: "all" %> +  <%%= stylesheet_link_tag    'application', media: 'all' %>    <%- else -%> -    <%- if gemfile_entries.any? { |m| m.name == "turbolinks" } -%> -  <%%= stylesheet_link_tag    "application", media: "all", "data-turbolinks-track" => true %> -  <%%= javascript_include_tag "application", "data-turbolinks-track" => true %> +    <%- if gemfile_entries.any? { |m| m.name == 'turbolinks' } -%> +  <%%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track' => true %> +  <%%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>      <%- else -%> -  <%%= stylesheet_link_tag    "application", media: "all" %> -  <%%= javascript_include_tag "application" %> +  <%%= stylesheet_link_tag    'application', media: 'all' %> +  <%%= javascript_include_tag 'application' %>      <%- end -%>    <%- end -%>    <%%= csrf_meta_tags %> diff --git a/railties/lib/rails/generators/rails/app/templates/config/environments/test.rb.tt b/railties/lib/rails/generators/rails/app/templates/config/environments/test.rb.tt index ba0742f97f..a90361725b 100644 --- a/railties/lib/rails/generators/rails/app/templates/config/environments/test.rb.tt +++ b/railties/lib/rails/generators/rails/app/templates/config/environments/test.rb.tt @@ -14,7 +14,7 @@ Rails.application.configure do    # Configure static asset server for tests with Cache-Control for performance.    config.serve_static_assets  = true -  config.static_cache_control = "public, max-age=3600" +  config.static_cache_control = 'public, max-age=3600'    # Show full error reports and disable caching.    config.consider_all_requests_local       = true diff --git a/railties/lib/rails/generators/rails/app/templates/test/test_helper.rb b/railties/lib/rails/generators/rails/app/templates/test/test_helper.rb index 4ade1a0bdc..6b011e577a 100644 --- a/railties/lib/rails/generators/rails/app/templates/test/test_helper.rb +++ b/railties/lib/rails/generators/rails/app/templates/test/test_helper.rb @@ -1,4 +1,4 @@ -ENV["RAILS_ENV"] ||= "test" +ENV['RAILS_ENV'] ||= 'test'  require File.expand_path('../../config/environment', __FILE__)  require 'rails/test_help' diff --git a/railties/test/generators/app_generator_test.rb b/railties/test/generators/app_generator_test.rb index 8246e76607..ddecee2ca1 100644 --- a/railties/test/generators/app_generator_test.rb +++ b/railties/test/generators/app_generator_test.rb @@ -58,8 +58,8 @@ class AppGeneratorTest < Rails::Generators::TestCase    def test_assets      run_generator -    assert_file("app/views/layouts/application.html.erb", /stylesheet_link_tag\s+"application", media: "all", "data-turbolinks-track" => true/) -    assert_file("app/views/layouts/application.html.erb", /javascript_include_tag\s+"application", "data-turbolinks-track" => true/) +    assert_file("app/views/layouts/application.html.erb", /stylesheet_link_tag\s+'application', media: 'all', 'data-turbolinks-track' => true/) +    assert_file("app/views/layouts/application.html.erb", /javascript_include_tag\s+'application', 'data-turbolinks-track' => true/)      assert_file("app/assets/stylesheets/application.css")      assert_file("app/assets/javascripts/application.js")    end @@ -364,8 +364,8 @@ class AppGeneratorTest < Rails::Generators::TestCase      assert_no_file "vendor/assets/javascripts"      assert_file "app/views/layouts/application.html.erb" do |contents| -      assert_match(/stylesheet_link_tag\s+"application", media: "all" %>/, contents) -      assert_no_match(/javascript_include_tag\s+"application" \%>/, contents) +      assert_match(/stylesheet_link_tag\s+'application', media: 'all' %>/, contents) +      assert_no_match(/javascript_include_tag\s+'application' \%>/, contents)      end      assert_file "Gemfile" do |content| | 
