diff options
Diffstat (limited to 'railties/lib')
26 files changed, 159 insertions, 82 deletions
diff --git a/railties/lib/rails/application/bootstrap.rb b/railties/lib/rails/application/bootstrap.rb index 0f4d932749..9baf8aa742 100644 --- a/railties/lib/rails/application/bootstrap.rb +++ b/railties/lib/rails/application/bootstrap.rb @@ -63,7 +63,7 @@ INFO            Rails.cache = ActiveSupport::Cache.lookup_store(config.cache_store)            if Rails.cache.respond_to?(:middleware) -            config.middleware.insert_before("Rack::Runtime", Rails.cache.middleware) +            config.middleware.insert_before(::Rack::Runtime, Rails.cache.middleware)            end          end        end diff --git a/railties/lib/rails/application_controller.rb b/railties/lib/rails/application_controller.rb index 9a29ec21cf..618a09a5b3 100644 --- a/railties/lib/rails/application_controller.rb +++ b/railties/lib/rails/application_controller.rb @@ -6,7 +6,7 @@ class Rails::ApplicationController < ActionController::Base # :nodoc:    def require_local!      unless local_request? -      render text: '<p>For security purposes, this information is only available to local requests.</p>', status: :forbidden +      render html: '<p>For security purposes, this information is only available to local requests.</p>'.html_safe, status: :forbidden      end    end diff --git a/railties/lib/rails/commands/server.rb b/railties/lib/rails/commands/server.rb index d1e445ac70..c8fb58ab05 100644 --- a/railties/lib/rails/commands/server.rb +++ b/railties/lib/rails/commands/server.rb @@ -34,6 +34,9 @@ module Rails            opts.on("-P", "--pid=pid", String,                    "Specifies the PID file.",                    "Default: tmp/pids/server.pid") { |v| options[:pid] = v } +          opts.on("-C", "--[no-]dev-caching", +                  "Specifies whether to perform caching in development.", +                  "true or false") { |v| options[:caching] = v }            opts.separator "" @@ -67,6 +70,7 @@ module Rails        print_boot_information        trap(:INT) { exit }        create_tmp_directories +      setup_dev_caching        log_to_stdout if options[:log_stdout]        super @@ -86,12 +90,23 @@ module Rails          DoNotReverseLookup: true,          environment:        (ENV['RAILS_ENV'] || ENV['RACK_ENV'] || "development").dup,          daemonize:          false, +        caching:            false,          pid:                File.expand_path("tmp/pids/server.pid")        })      end      private +      def setup_dev_caching +        return unless options[:environment] == "development" + +        if options[:caching] == false +          delete_cache_file +        elsif options[:caching] +          create_cache_file +        end +      end +        def print_boot_information          url = "#{options[:SSLEnable] ? 'https' : 'http'}://#{options[:Host]}:#{options[:Port]}"          puts "=> Booting #{ActiveSupport::Inflector.demodulize(server)}" @@ -101,6 +116,14 @@ module Rails          puts "=> Ctrl-C to shutdown server" unless options[:daemonize]        end +      def create_cache_file +        FileUtils.touch("tmp/caching-dev.txt") +      end + +      def delete_cache_file +        FileUtils.rm("tmp/caching-dev.txt") if File.exist?("tmp/caching-dev.txt") +      end +        def create_tmp_directories          %w(cache pids sockets).each do |dir_to_make|            FileUtils.mkdir_p(File.join(Rails.root, 'tmp', dir_to_make)) diff --git a/railties/lib/rails/engine.rb b/railties/lib/rails/engine.rb index 1dede32dd4..e90d41cbec 100644 --- a/railties/lib/rails/engine.rb +++ b/railties/lib/rails/engine.rb @@ -519,17 +519,15 @@ module Rails      # Define the Rack API for this engine.      def call(env)        env.merge!(env_config) -      if env['SCRIPT_NAME'] -        env[routes.env_key] = env['SCRIPT_NAME'].dup -      end +      req = ActionDispatch::Request.new env +      req.routes = routes +      req.engine_script_name = req.script_name        app.call(env)      end      # Defines additional Rack env configuration that is added on each call.      def env_config -      @env_config ||= { -        'action_dispatch.routes' => routes -      } +      @env_config ||= {}      end      # Defines the routes for this engine. If a block is given to @@ -589,7 +587,7 @@ module Rails      # I18n load paths are a special case since the ones added      # later have higher priority.      initializer :add_locales do -      config.i18n.railties_load_path.concat(paths["config/locales"].existent) +      config.i18n.railties_load_path << paths["config/locales"]      end      initializer :add_view_paths do diff --git a/railties/lib/rails/generators/app_base.rb b/railties/lib/rails/generators/app_base.rb index 249fe96772..38074e80e0 100644 --- a/railties/lib/rails/generators/app_base.rb +++ b/railties/lib/rails/generators/app_base.rb @@ -209,13 +209,19 @@ module Rails            [              GemfileEntry.path('rails', Rails::Generators::RAILS_DEV_PATH),              GemfileEntry.github('sprockets-rails', 'rails/sprockets-rails'), -            GemfileEntry.github('arel', 'rails/arel') +            GemfileEntry.github('sprockets', 'rails/sprockets'), +            GemfileEntry.github('sass-rails', 'rails/sass-rails'), +            GemfileEntry.github('arel', 'rails/arel'), +            GemfileEntry.github('rack', 'rack/rack')            ]          elsif options.edge?            [              GemfileEntry.github('rails', 'rails/rails'),              GemfileEntry.github('sprockets-rails', 'rails/sprockets-rails'), -            GemfileEntry.github('arel', 'rails/arel') +            GemfileEntry.github('sprockets', 'rails/sprockets'), +            GemfileEntry.github('sass-rails', 'rails/sass-rails'), +            GemfileEntry.github('arel', 'rails/arel'), +            GemfileEntry.github('rack', 'rack/rack')            ]          else            [GemfileEntry.version('rails', @@ -255,8 +261,6 @@ module Rails          return [] if options[:skip_sprockets]          gems = [] -        gems << GemfileEntry.version('sass-rails', '~> 5.0', -                                     'Use SCSS for stylesheets')          gems << GemfileEntry.version('uglifier',                                     '>= 1.3.0', diff --git a/railties/lib/rails/generators/rails/app/templates/app/assets/javascripts/application.js.tt b/railties/lib/rails/generators/rails/app/templates/app/assets/javascripts/application.js.tt index cb86978d4c..c88426ec06 100644 --- a/railties/lib/rails/generators/rails/app/templates/app/assets/javascripts/application.js.tt +++ b/railties/lib/rails/generators/rails/app/templates/app/assets/javascripts/application.js.tt @@ -5,7 +5,7 @@  // or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.  //  // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the -// compiled file. +// compiled file. JavaScript code in this file should be added after the last require_* statement.  //  // Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details  // about supported directives. diff --git a/railties/lib/rails/generators/rails/app/templates/app/assets/manifest.js.tt b/railties/lib/rails/generators/rails/app/templates/app/assets/manifest.js.tt new file mode 100644 index 0000000000..3325553f57 --- /dev/null +++ b/railties/lib/rails/generators/rails/app/templates/app/assets/manifest.js.tt @@ -0,0 +1,8 @@ + +<% unless options.api? -%> +//= link_tree ./images +<% end -%> +<% unless options.skip_javascript -%> +//= link ./javascripts/application.js +<% end -%> +//= link ./stylesheets/application.css diff --git a/railties/lib/rails/generators/rails/app/templates/app/assets/stylesheets/application.css b/railties/lib/rails/generators/rails/app/templates/app/assets/stylesheets/application.css index 0cdd2788d0..0ebd7fe829 100644 --- a/railties/lib/rails/generators/rails/app/templates/app/assets/stylesheets/application.css +++ b/railties/lib/rails/generators/rails/app/templates/app/assets/stylesheets/application.css @@ -7,7 +7,8 @@   *   * You're free to add application-wide styles to this file and they'll appear at the bottom of the   * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS - * files in this directory. It is generally better to create a new file per style scope. + * files in this directory. Styles in this file should be added after the last require_* statement. + * It is generally better to create a new file per style scope.   *   *= require_tree .   *= require_self diff --git a/railties/lib/rails/generators/rails/app/templates/bin/update b/railties/lib/rails/generators/rails/app/templates/bin/update new file mode 100644 index 0000000000..9830e6b29a --- /dev/null +++ b/railties/lib/rails/generators/rails/app/templates/bin/update @@ -0,0 +1,28 @@ +require 'pathname' +require 'fileutils' +include FileUtils + +# path to your application root. +APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) + +def system!(*args) +  system(*args) || abort("\n== Command #{args} failed ==") +end + +chdir APP_ROOT do +  # This script is a way to update your development environment automatically. +  # Add necessary update steps to this file. + +  puts '== Installing dependencies ==' +  system! 'gem install bundler --conservative' +  system 'bundle check' or system! 'bundle install' + +  puts "\n== Updating database ==" +  system! 'bin/rake db:migrate' + +  puts "\n== Removing old logs and tempfiles ==" +  system! 'bin/rake log:clear tmp:clear' + +  puts "\n== Restarting application server ==" +  system! 'bin/rake restart' +end diff --git a/railties/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt b/railties/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt index ecb5d4170f..e29f0bacaa 100644 --- a/railties/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt +++ b/railties/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt @@ -9,9 +9,19 @@ Rails.application.configure do    # Do not eager load code on boot.    config.eager_load = false -  # Show full error reports and disable caching. +  # Show full error reports.    config.consider_all_requests_local       = true -  config.action_controller.perform_caching = false + +  # Enable/disable caching. By default caching is disabled. +  if Rails.root.join('tmp/caching-dev.txt').exist? +    config.action_controller.perform_caching = true +    config.static_cache_control = "public, max-age=172800" +    config.cache_store = :memory_store +  else +    config.action_controller.perform_caching = false +    config.cache_store = :null_store +  end +    <%- unless options.skip_action_mailer? -%>    # Don't care if the mailer can't send. diff --git a/railties/lib/rails/generators/rails/app/templates/config/environments/production.rb.tt b/railties/lib/rails/generators/rails/app/templates/config/environments/production.rb.tt index 8c09396fc1..0297ab75f6 100644 --- a/railties/lib/rails/generators/rails/app/templates/config/environments/production.rb.tt +++ b/railties/lib/rails/generators/rails/app/templates/config/environments/production.rb.tt @@ -51,7 +51,8 @@ Rails.application.configure do    # config.log_tags = [ :subdomain, :request_id ]    # Use a different logger for distributed setups. -  # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) +  # require 'syslog/logger' +  # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name')    # Use a different cache store in production.    # config.cache_store = :mem_cache_store diff --git a/railties/lib/rails/generators/rails/app/templates/config/routes.rb b/railties/lib/rails/generators/rails/app/templates/config/routes.rb index 3f66539d54..787824f888 100644 --- a/railties/lib/rails/generators/rails/app/templates/config/routes.rb +++ b/railties/lib/rails/generators/rails/app/templates/config/routes.rb @@ -1,56 +1,3 @@  Rails.application.routes.draw do -  # The priority is based upon order of creation: first created -> highest priority. -  # See how all your routes lay out with "rake routes". - -  # You can have the root of your site routed with "root" -  # root 'welcome#index' - -  # Example of regular route: -  #   get 'products/:id' => 'catalog#view' - -  # Example of named route that can be invoked with purchase_url(id: product.id) -  #   get 'products/:id/purchase' => 'catalog#purchase', as: :purchase - -  # Example resource route (maps HTTP verbs to controller actions automatically): -  #   resources :products - -  # Example resource route with options: -  #   resources :products do -  #     member do -  #       get 'short' -  #       post 'toggle' -  #     end -  # -  #     collection do -  #       get 'sold' -  #     end -  #   end - -  # Example resource route with sub-resources: -  #   resources :products do -  #     resources :comments, :sales -  #     resource :seller -  #   end - -  # Example resource route with more complex sub-resources: -  #   resources :products do -  #     resources :comments -  #     resources :sales do -  #       get 'recent', on: :collection -  #     end -  #   end - -  # Example resource route with concerns: -  #   concern :toggleable do -  #     post 'toggle' -  #   end -  #   resources :posts, concerns: :toggleable -  #   resources :photos, concerns: :toggleable - -  # Example resource route within a namespace: -  #   namespace :admin do -  #     # Directs /admin/products/* to Admin::ProductsController -  #     # (app/controllers/admin/products_controller.rb) -  #     resources :products -  #   end +  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html  end diff --git a/railties/lib/rails/generators/rails/plugin/plugin_generator.rb b/railties/lib/rails/generators/rails/plugin/plugin_generator.rb index 0e1326ce4f..8fea30189e 100644 --- a/railties/lib/rails/generators/rails/plugin/plugin_generator.rb +++ b/railties/lib/rails/generators/rails/plugin/plugin_generator.rb @@ -104,8 +104,9 @@ task default: :test      end      def test_dummy_assets -      template "rails/javascripts.js",  "#{dummy_path}/app/assets/javascripts/application.js", force: true -      template "rails/stylesheets.css", "#{dummy_path}/app/assets/stylesheets/application.css", force: true +      template "rails/javascripts.js",    "#{dummy_path}/app/assets/javascripts/application.js", force: true +      template "rails/stylesheets.css",   "#{dummy_path}/app/assets/stylesheets/application.css", force: true +      template "rails/dummy_manifest.js", "#{dummy_path}/app/assets/manifest.js", force: true      end      def test_dummy_clean @@ -122,6 +123,10 @@ task default: :test        end      end +    def assets_manifest +      template "rails/engine_manifest.js", "app/assets/#{underscored_name}_manifest.js" +    end +      def stylesheets        if mountable?          copy_file "rails/stylesheets.css", @@ -220,6 +225,10 @@ task default: :test          build(:lib)        end +      def create_assets_manifest_file +        build(:assets_manifest) unless api? +      end +        def create_public_stylesheets_files          build(:stylesheets) unless api?        end diff --git a/railties/lib/rails/generators/rails/plugin/templates/lib/%namespaced_name%/version.rb b/railties/lib/rails/generators/rails/plugin/templates/lib/%namespaced_name%/version.rb index d257295988..b08f4ef9ae 100644 --- a/railties/lib/rails/generators/rails/plugin/templates/lib/%namespaced_name%/version.rb +++ b/railties/lib/rails/generators/rails/plugin/templates/lib/%namespaced_name%/version.rb @@ -1 +1 @@ -<%= wrap_in_modules 'VERSION = "0.0.1"' %> +<%= wrap_in_modules "VERSION = '0.1.0'" %> diff --git a/railties/lib/rails/generators/rails/plugin/templates/rails/dummy_manifest.js b/railties/lib/rails/generators/rails/plugin/templates/rails/dummy_manifest.js new file mode 100644 index 0000000000..ace695a811 --- /dev/null +++ b/railties/lib/rails/generators/rails/plugin/templates/rails/dummy_manifest.js @@ -0,0 +1,11 @@ + +<% unless api? -%> +//= link_tree ./images +<% end -%> +<% unless options.skip_javascript -%> +//= link ./javascripts/application.js +<% end -%> +//= link ./stylesheets/application.css +<% if mountable? && !api? -%> +//= link <%= underscored_name %>_manifest.js +<% end -%> diff --git a/railties/lib/rails/generators/rails/plugin/templates/rails/engine_manifest.js b/railties/lib/rails/generators/rails/plugin/templates/rails/engine_manifest.js new file mode 100644 index 0000000000..f8ef26982a --- /dev/null +++ b/railties/lib/rails/generators/rails/plugin/templates/rails/engine_manifest.js @@ -0,0 +1,6 @@ +<% if mountable? -%> +<% unless options.skip_javascript -%> +//= link ./javascripts/<%= namespaced_name %>/application.js +<% end -%> +//= link ./stylesheets/<%= namespaced_name %>/application.css +<% end -%> diff --git a/railties/lib/rails/generators/rails/plugin/templates/rails/javascripts.js b/railties/lib/rails/generators/rails/plugin/templates/rails/javascripts.js index 8913b40f69..e54c6461cc 100644 --- a/railties/lib/rails/generators/rails/plugin/templates/rails/javascripts.js +++ b/railties/lib/rails/generators/rails/plugin/templates/rails/javascripts.js @@ -5,7 +5,7 @@  // or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.  //  // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the -// compiled file. +// compiled file. JavaScript code in this file should be added after the last require_* statement.  //  // Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details  // about supported directives. diff --git a/railties/lib/rails/generators/rails/plugin/templates/rails/stylesheets.css b/railties/lib/rails/generators/rails/plugin/templates/rails/stylesheets.css index 0cdd2788d0..0ebd7fe829 100644 --- a/railties/lib/rails/generators/rails/plugin/templates/rails/stylesheets.css +++ b/railties/lib/rails/generators/rails/plugin/templates/rails/stylesheets.css @@ -7,7 +7,8 @@   *   * You're free to add application-wide styles to this file and they'll appear at the bottom of the   * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS - * files in this directory. It is generally better to create a new file per style scope. + * files in this directory. Styles in this file should be added after the last require_* statement. + * It is generally better to create a new file per style scope.   *   *= require_tree .   *= require_self diff --git a/railties/lib/rails/generators/rails/plugin/templates/test/test_helper.rb b/railties/lib/rails/generators/rails/plugin/templates/test/test_helper.rb index 95adcc06ff..b1b77629d4 100644 --- a/railties/lib/rails/generators/rails/plugin/templates/test/test_helper.rb +++ b/railties/lib/rails/generators/rails/plugin/templates/test/test_helper.rb @@ -20,6 +20,7 @@ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }  # Load fixtures from the engine  if ActiveSupport::TestCase.respond_to?(:fixture_path=)    ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__) +  ActionDispatch::IntegrationTest.fixture_path = ActiveSupport::TestCase.fixture_path    ActiveSupport::TestCase.file_fixture_path = ActiveSupport::TestCase.fixture_path + "/files"    ActiveSupport::TestCase.fixtures :all  end diff --git a/railties/lib/rails/generators/test_unit/scaffold/templates/api_functional_test.rb b/railties/lib/rails/generators/test_unit/scaffold/templates/api_functional_test.rb index 896b38bc8f..f302cd6c3d 100644 --- a/railties/lib/rails/generators/test_unit/scaffold/templates/api_functional_test.rb +++ b/railties/lib/rails/generators/test_unit/scaffold/templates/api_functional_test.rb @@ -3,7 +3,10 @@ require 'test_helper'  <% module_namespacing do -%>  class <%= controller_class_name %>ControllerTest < ActionController::TestCase    setup do -    @<%= singular_table_name %> = <%= table_name %>(:one) +    @<%= singular_table_name %> = <%= fixture_name %>(:one) +<% if mountable_engine? -%> +    @routes = Engine.routes +<% end -%>    end    test "should get index" do diff --git a/railties/lib/rails/mailers_controller.rb b/railties/lib/rails/mailers_controller.rb index 41422a656c..78a857e0f1 100644 --- a/railties/lib/rails/mailers_controller.rb +++ b/railties/lib/rails/mailers_controller.rb @@ -26,7 +26,7 @@ class Rails::MailersController < Rails::ApplicationController # :nodoc:            if part = find_part(part_type)              response.content_type = part_type -            render text: part.respond_to?(:decoded) ? part.decoded : part +            render plain: part.respond_to?(:decoded) ? part.decoded : part            else              raise AbstractController::ActionNotFound, "Email part '#{part_type}' not found in #{@preview.name}##{@email_action}"            end diff --git a/railties/lib/rails/paths.rb b/railties/lib/rails/paths.rb index ebcaaaba46..e47616a87f 100644 --- a/railties/lib/rails/paths.rb +++ b/railties/lib/rails/paths.rb @@ -123,6 +123,10 @@ module Rails          options[:load_path]     ? load_path!     : skip_load_path!        end +      def absolute_current # :nodoc: +        File.expand_path(@current, @root.path) +      end +        def children          keys = @root.keys.find_all { |k|            k.start_with?(@current) && k != @current @@ -175,6 +179,10 @@ module Rails          @paths        end +      def extensions # :nodoc: +        $1.split(',') if @glob =~ /\{([\S]+)\}/ +      end +        # Expands all paths against the root and return all unique values.        def expanded          raise "You need to set a path root" unless @root.path diff --git a/railties/lib/rails/source_annotation_extractor.rb b/railties/lib/rails/source_annotation_extractor.rb index 9b058a1848..8dd87b6cc5 100644 --- a/railties/lib/rails/source_annotation_extractor.rb +++ b/railties/lib/rails/source_annotation_extractor.rb @@ -3,7 +3,7 @@  #   rake notes  #   rake notes:optimize  # -# and friends. See <tt>rake -T notes</tt> and <tt>railties/lib/tasks/annotations.rake</tt>. +# and friends. See <tt>rake -T notes</tt> and <tt>railties/lib/rails/tasks/annotations.rake</tt>.  #  # Annotation objects are triplets <tt>:line</tt>, <tt>:tag</tt>, <tt>:text</tt> that  # represent the line where the annotation lives, its tag, and its text. Note diff --git a/railties/lib/rails/tasks.rb b/railties/lib/rails/tasks.rb index 2c3d278eca..d3e33584d7 100644 --- a/railties/lib/rails/tasks.rb +++ b/railties/lib/rails/tasks.rb @@ -3,6 +3,7 @@ require 'rake'  # Load Rails Rakefile extensions  %w(    annotations +  dev    framework    initializers    log @@ -10,8 +11,9 @@ require 'rake'    misc    restart    routes -  statistics    tmp -).each do |task| +).tap { |arr| +  arr << 'statistics' if Rake.application.current_scope.empty? +}.each do |task|    load "rails/tasks/#{task}.rake"  end diff --git a/railties/lib/rails/tasks/dev.rake b/railties/lib/rails/tasks/dev.rake new file mode 100644 index 0000000000..e949172d3f --- /dev/null +++ b/railties/lib/rails/tasks/dev.rake @@ -0,0 +1,15 @@ +namespace :dev do +  task :cache do +    desc 'Toggle development mode caching on/off' + +    if File.exist? 'tmp/caching-dev.txt' +      File.delete 'tmp/caching-dev.txt' +      puts 'Development mode is no longer being cached.' +    else +      FileUtils.touch 'tmp/caching-dev.txt' +      puts 'Development mode is now being cached.' +    end + +    FileUtils.touch 'tmp/restart.txt' +  end +end diff --git a/railties/lib/rails/test_unit/minitest_plugin.rb b/railties/lib/rails/test_unit/minitest_plugin.rb index ab71298509..5552779ef1 100644 --- a/railties/lib/rails/test_unit/minitest_plugin.rb +++ b/railties/lib/rails/test_unit/minitest_plugin.rb @@ -48,4 +48,5 @@ module Minitest    mattr_accessor(:run_with_rails_extension) { false }  end +Minitest.load_plugins  Minitest.extensions << 'rails'  | 
