diff options
Diffstat (limited to 'railties/lib/rails')
91 files changed, 541 insertions, 452 deletions
diff --git a/railties/lib/rails/all.rb b/railties/lib/rails/all.rb index eabe566829..6c9c53fc69 100644 --- a/railties/lib/rails/all.rb +++ b/railties/lib/rails/all.rb @@ -5,7 +5,7 @@ require "rails" action_controller action_mailer rails/test_unit - sprockets/rails + sprockets ).each do |framework| begin require "#{framework}/railtie" diff --git a/railties/lib/rails/application.rb b/railties/lib/rails/application.rb index 050190cba6..9ef001c7d0 100644 --- a/railties/lib/rails/application.rb +++ b/railties/lib/rails/application.rb @@ -71,7 +71,7 @@ module Rails attr_reader :reloaders attr_writer :queue - delegate :default_url_options, :default_url_options=, :to => :routes + delegate :default_url_options, :default_url_options=, to: :routes def initialize super @@ -101,6 +101,14 @@ module Rails routes_reloader.reload! end + + # Return the application's KeyGenerator + def key_generator + # number of iterations selected based on consultation with the google security + # team. Details at https://github.com/rails/rails/pull/6952#issuecomment-7661220 + @key_generator ||= ActiveSupport::KeyGenerator.new(config.secret_token, iterations: 1000) + end + # Stores some of the Rails initial environment parameters which # will be used by middlewares and engines to configure themselves. # Currently stores: @@ -121,7 +129,8 @@ module Rails "action_dispatch.show_exceptions" => config.action_dispatch.show_exceptions, "action_dispatch.show_detailed_exceptions" => config.consider_all_requests_local, "action_dispatch.logger" => Rails.logger, - "action_dispatch.backtrace_cleaner" => Rails.backtrace_cleaner + "action_dispatch.backtrace_cleaner" => Rails.backtrace_cleaner, + "action_dispatch.key_generator" => key_generator }) end @@ -189,11 +198,7 @@ module Rails end def queue #:nodoc: - @queue ||= ActiveSupport::QueueContainer.new(build_queue) - end - - def build_queue #:nodoc: - config.queue.new + @queue ||= config.queue || ActiveSupport::Queue.new end def to_app #:nodoc: @@ -281,7 +286,22 @@ module Rails def default_middleware_stack #:nodoc: ActionDispatch::MiddlewareStack.new.tap do |middleware| app = self - if rack_cache = config.action_controller.perform_caching && config.action_dispatch.rack_cache + if rack_cache = config.action_dispatch.rack_cache + begin + require 'rack/cache' + rescue LoadError => error + error.message << ' Be sure to add rack-cache to your Gemfile' + raise + end + + if rack_cache == true + rack_cache = { + metastore: "rails:/", + entitystore: "rails:/", + verbose: false + } + end + require "action_dispatch/http/rack_cache" middleware.use ::Rack::Cache, rack_cache end diff --git a/railties/lib/rails/application/bootstrap.rb b/railties/lib/rails/application/bootstrap.rb index a1bc95550b..62d57c0cc6 100644 --- a/railties/lib/rails/application/bootstrap.rb +++ b/railties/lib/rails/application/bootstrap.rb @@ -7,13 +7,13 @@ module Rails module Bootstrap include Initializable - initializer :load_environment_hook, :group => :all do end + initializer :load_environment_hook, group: :all do end - initializer :load_active_support, :group => :all do + initializer :load_active_support, group: :all do require "active_support/all" unless config.active_support.bare end - initializer :set_eager_load, :group => :all do + initializer :set_eager_load, group: :all do if config.eager_load.nil? warn <<-INFO config.eager_load is set to nil. Please update your config/environments/*.rb files accordingly: @@ -28,7 +28,7 @@ INFO end # Initialize the logger early in the stack in case we need to log some deprecation. - initializer :initialize_logger, :group => :all do + initializer :initialize_logger, group: :all do Rails.logger ||= config.logger || begin path = config.paths["log"].first unless File.exist? File.dirname path @@ -56,7 +56,7 @@ INFO end # Initialize cache early in the stack so railties can make use of it. - initializer :initialize_cache, :group => :all do + initializer :initialize_cache, group: :all do unless Rails.cache Rails.cache = ActiveSupport::Cache.lookup_store(config.cache_store) @@ -67,11 +67,11 @@ INFO end # Sets the dependency loading mechanism. - initializer :initialize_dependency_mechanism, :group => :all do + initializer :initialize_dependency_mechanism, group: :all do ActiveSupport::Dependencies.mechanism = config.cache_classes ? :require : :load end - initializer :bootstrap_hook, :group => :all do |app| + initializer :bootstrap_hook, group: :all do |app| ActiveSupport.run_load_hooks(:before_initialize, app) end end diff --git a/railties/lib/rails/application/configuration.rb b/railties/lib/rails/application/configuration.rb index a7a35c2685..7df517de71 100644 --- a/railties/lib/rails/application/configuration.rb +++ b/railties/lib/rails/application/configuration.rb @@ -6,7 +6,7 @@ require 'rails/engine/configuration' module Rails class Application class Configuration < ::Rails::Engine::Configuration - attr_accessor :asset_host, :asset_path, :assets, :autoflush_log, + attr_accessor :asset_host, :assets, :autoflush_log, :cache_classes, :cache_store, :consider_all_requests_local, :console, :eager_load, :exceptions_app, :file_watcher, :filter_parameters, :force_ssl, :helpers_paths, :logger, :log_formatter, :log_tags, @@ -43,14 +43,14 @@ module Rails @exceptions_app = nil @autoflush_log = true @log_formatter = ActiveSupport::Logger::SimpleFormatter.new - @queue = ActiveSupport::SynchronousQueue - @queue_consumer = ActiveSupport::ThreadedQueueConsumer + @queue = ActiveSupport::SynchronousQueue.new + @queue_consumer = nil @eager_load = nil @assets = ActiveSupport::OrderedOptions.new @assets.enabled = false @assets.paths = [] - @assets.precompile = [ Proc.new { |path| !%w(.js .css).include?(File.extname(path)) }, + @assets.precompile = [ Proc.new { |path, fn| fn =~ /app\/assets/ && !%w(.js .css).include?(File.extname(path)) }, /(?:\/|\\|\A)application\.(css|js)$/ ] @assets.prefix = "/assets" @assets.version = '' @@ -64,10 +64,6 @@ module Rails @assets.logger = nil end - def compiled_asset_path - "/" - end - def encoding=(value) @encoding = value silence_warnings do @@ -79,10 +75,10 @@ module Rails def paths @paths ||= begin paths = super - paths.add "config/database", :with => "config/database.yml" - paths.add "config/environment", :with => "config/environment.rb" + paths.add "config/database", with: "config/database.yml" + paths.add "config/environment", with: "config/environment.rb" paths.add "lib/templates" - paths.add "log", :with => "log/#{Rails.env}.log" + paths.add "log", with: "log/#{Rails.env}.log" paths.add "public" paths.add "public/javascripts" paths.add "public/stylesheets" diff --git a/railties/lib/rails/application/finisher.rb b/railties/lib/rails/application/finisher.rb index d2a402aa51..c520f7af9d 100644 --- a/railties/lib/rails/application/finisher.rb +++ b/railties/lib/rails/application/finisher.rb @@ -72,7 +72,7 @@ module Rails # Set app reload just after the finisher hook to ensure # paths added in the hook are still loaded. - initializer :set_clear_dependencies_hook, :group => :all do + initializer :set_clear_dependencies_hook, group: :all do callback = lambda do ActiveSupport::DescendantsTracker.clear ActiveSupport::Dependencies.clear @@ -83,7 +83,7 @@ module Rails self.reloaders << reloader # We need to set a to_prepare callback regardless of the reloader result, i.e. # models should be reloaded if any of the reloaders (i18n, routes) were updated. - ActionDispatch::Reloader.to_prepare(:prepend => true){ reloader.execute } + ActionDispatch::Reloader.to_prepare(prepend: true){ reloader.execute } else ActionDispatch::Reloader.to_cleanup(&callback) end @@ -97,8 +97,9 @@ module Rails end initializer :activate_queue_consumer do |app| - if config.queue == ActiveSupport::Queue - app.queue_consumer = config.queue_consumer.start(app.queue, {logger: Rails.logger}) + if config.queue.class == ActiveSupport::Queue + app.queue_consumer = config.queue_consumer || config.queue.consumer + app.queue_consumer.start at_exit { app.queue_consumer.shutdown } end end diff --git a/railties/lib/rails/application/routes_reloader.rb b/railties/lib/rails/application/routes_reloader.rb index 6f9a200aa9..737977adf9 100644 --- a/railties/lib/rails/application/routes_reloader.rb +++ b/railties/lib/rails/application/routes_reloader.rb @@ -4,7 +4,7 @@ module Rails class Application class RoutesReloader attr_reader :route_sets, :paths - delegate :execute_if_updated, :execute, :updated?, :to => :updater + delegate :execute_if_updated, :execute, :updated?, to: :updater def initialize @paths = [] diff --git a/railties/lib/rails/commands.rb b/railties/lib/rails/commands.rb index 9c5dc8f188..b0fae13192 100644 --- a/railties/lib/rails/commands.rb +++ b/railties/lib/rails/commands.rb @@ -9,6 +9,30 @@ aliases = { "r" => "runner" } +help_message = <<-EOT +Usage: rails COMMAND [ARGS] + +The most common rails commands are: + generate Generate new code (short-cut alias: "g") + console Start the Rails console (short-cut alias: "c") + server Start the Rails server (short-cut alias: "s") + dbconsole Start a console for the database specified in config/database.yml + (short-cut alias: "db") + new Create a new Rails application. "rails new my_app" creates a + new application called MyApp in "./my_app" + +In addition to those, there are: + application Generate the Rails application code + destroy Undo code generated with "generate" (short-cut alias: "d") + benchmarker See how fast a piece of code runs + profiler Get profile information from a piece of code + plugin new Generates skeleton for developing a Rails plugin + runner Run a piece of code in the application environment (short-cut alias: "r") + +All commands can be run with -h (or --help) for more information. +EOT + + command = ARGV.shift command = aliases[command] || command @@ -81,29 +105,14 @@ when '--version', '-v' ARGV.unshift '--version' require 'rails/commands/application' -else - puts "Error: Command not recognized" unless %w(-h --help).include?(command) - puts <<-EOT -Usage: rails COMMAND [ARGS] - -The most common rails commands are: - generate Generate new code (short-cut alias: "g") - console Start the Rails console (short-cut alias: "c") - server Start the Rails server (short-cut alias: "s") - dbconsole Start a console for the database specified in config/database.yml - (short-cut alias: "db") - new Create a new Rails application. "rails new my_app" creates a - new application called MyApp in "./my_app" +when '-h', '--help' + puts help_message -In addition to those, there are: - application Generate the Rails application code - destroy Undo code generated with "generate" (short-cut alias: "d") - benchmarker See how fast a piece of code runs - profiler Get profile information from a piece of code - plugin new Generates skeleton for developing a Rails plugin - runner Run a piece of code in the application environment (short-cut alias: "r") - -All commands can be run with -h (or --help) for more information. - EOT +else + puts "Error: Command '#{command}' not recognized" + if %x{rake #{command} --dry-run 2>&1 } && $?.success? + puts "Did you mean: `$ rake #{command}` ?\n\n" + end + puts help_message exit(1) end diff --git a/railties/lib/rails/commands/application.rb b/railties/lib/rails/commands/application.rb index 2cb6d5ca2e..ff0eda3413 100644 --- a/railties/lib/rails/commands/application.rb +++ b/railties/lib/rails/commands/application.rb @@ -24,7 +24,7 @@ require 'rails/generators/rails/app/app_generator' module Rails module Generators - class AppGenerator + class AppGenerator # :nodoc: # We want to exit on failure to be kind to other libraries # This is only when accessing via CLI def self.exit_on_failure? diff --git a/railties/lib/rails/commands/destroy.rb b/railties/lib/rails/commands/destroy.rb index 9023c61bf2..5479da86a0 100644 --- a/railties/lib/rails/commands/destroy.rb +++ b/railties/lib/rails/commands/destroy.rb @@ -6,4 +6,4 @@ if [nil, "-h", "--help"].include?(ARGV.first) end name = ARGV.shift -Rails::Generators.invoke name, ARGV, :behavior => :revoke, :destination_root => Rails.root +Rails::Generators.invoke name, ARGV, behavior: :revoke, destination_root: Rails.root diff --git a/railties/lib/rails/commands/generate.rb b/railties/lib/rails/commands/generate.rb index 9f13cb0513..351c59c645 100644 --- a/railties/lib/rails/commands/generate.rb +++ b/railties/lib/rails/commands/generate.rb @@ -8,4 +8,4 @@ end name = ARGV.shift root = defined?(ENGINE_ROOT) ? ENGINE_ROOT : Rails.root -Rails::Generators.invoke name, ARGV, :behavior => :invoke, :destination_root => root +Rails::Generators.invoke name, ARGV, behavior: :invoke, destination_root: root diff --git a/railties/lib/rails/commands/runner.rb b/railties/lib/rails/commands/runner.rb index a672258aa6..0cc672e01c 100644 --- a/railties/lib/rails/commands/runner.rb +++ b/railties/lib/rails/commands/runner.rb @@ -1,7 +1,7 @@ require 'optparse' require 'rbconfig' -options = { :environment => (ENV['RAILS_ENV'] || "development").dup } +options = { environment: (ENV['RAILS_ENV'] || "development").dup } code_or_file = nil if ARGV.first.nil? diff --git a/railties/lib/rails/commands/server.rb b/railties/lib/rails/commands/server.rb index a684129353..80fdc06cd2 100644 --- a/railties/lib/rails/commands/server.rb +++ b/railties/lib/rails/commands/server.rb @@ -105,13 +105,13 @@ module Rails def default_options super.merge({ - :Port => 3000, - :DoNotReverseLookup => true, - :environment => (ENV['RAILS_ENV'] || "development").dup, - :daemonize => false, - :debugger => false, - :pid => File.expand_path("tmp/pids/server.pid"), - :config => File.expand_path("config.ru") + Port: 3000, + DoNotReverseLookup: true, + environment: (ENV['RAILS_ENV'] || "development").dup, + daemonize: false, + debugger: false, + pid: File.expand_path("tmp/pids/server.pid"), + config: File.expand_path("config.ru") }) end end diff --git a/railties/lib/rails/commands/update.rb b/railties/lib/rails/commands/update.rb index 85a81cddf0..59fae5c337 100644 --- a/railties/lib/rails/commands/update.rb +++ b/railties/lib/rails/commands/update.rb @@ -6,4 +6,4 @@ if ARGV.size == 0 end name = ARGV.shift -Rails::Generators.invoke name, ARGV, :behavior => :skip +Rails::Generators.invoke name, ARGV, behavior: :skip diff --git a/railties/lib/rails/engine.rb b/railties/lib/rails/engine.rb index 7afb599910..2c2bb1c714 100644 --- a/railties/lib/rails/engine.rb +++ b/railties/lib/rails/engine.rb @@ -251,7 +251,7 @@ module Rails # # # config/routes.rb # MyApplication::Application.routes.draw do - # mount MyEngine::Engine => "/my_engine", :as => "my_engine" + # mount MyEngine::Engine => "/my_engine", as: "my_engine" # get "/foo" => "foo#index" # end # @@ -368,7 +368,7 @@ module Rails def isolate_namespace(mod) engine_name(generate_railtie_name(mod)) - self.routes.default_scope = { :module => ActiveSupport::Inflector.underscore(mod.name) } + self.routes.default_scope = { module: ActiveSupport::Inflector.underscore(mod.name) } self.isolated = true unless mod.respond_to?(:railtie_namespace) @@ -407,8 +407,8 @@ module Rails end end - delegate :middleware, :root, :paths, :to => :config - delegate :engine_name, :isolated?, :to => "self.class" + delegate :middleware, :root, :paths, to: :config + delegate :engine_name, :isolated?, to: "self.class" def initialize @_all_autoload_paths = nil @@ -536,7 +536,7 @@ module Rails end # Add configured load paths to ruby load paths and remove duplicates. - initializer :set_load_path, :before => :bootstrap_hook do + initializer :set_load_path, before: :bootstrap_hook do _all_load_paths.reverse_each do |path| $LOAD_PATH.unshift(path) if File.directory?(path) end @@ -548,7 +548,7 @@ module Rails # # This needs to be an initializer, since it needs to run once # per engine and get the engine as a block parameter - initializer :set_autoload_paths, :before => :bootstrap_hook do |app| + initializer :set_autoload_paths, before: :bootstrap_hook do |app| ActiveSupport::Dependencies.autoload_paths.unshift(*_all_autoload_paths) ActiveSupport::Dependencies.autoload_once_paths.unshift(*_all_autoload_once_paths) @@ -581,13 +581,13 @@ module Rails end end - initializer :load_environment_config, :before => :load_environment_hook, :group => :all do + initializer :load_environment_config, before: :load_environment_hook, group: :all do paths["config/environments"].existent.each do |environment| require environment end end - initializer :append_assets_path, :group => :all do |app| + initializer :append_assets_path, group: :all do |app| app.config.assets.paths.unshift(*paths["vendor/assets"].existent_directories) app.config.assets.paths.unshift(*paths["lib/assets"].existent_directories) app.config.assets.paths.unshift(*paths["app/assets"].existent_directories) diff --git a/railties/lib/rails/engine/configuration.rb b/railties/lib/rails/engine/configuration.rb index 6b18b1e249..22e885a3a6 100644 --- a/railties/lib/rails/engine/configuration.rb +++ b/railties/lib/rails/engine/configuration.rb @@ -20,7 +20,7 @@ module Rails # Holds generators configuration: # # config.generators do |g| - # g.orm :data_mapper, :migration => true + # g.orm :data_mapper, migration: true # g.template_engine :haml # g.test_framework :rspec # end @@ -38,26 +38,26 @@ module Rails def paths @paths ||= begin paths = Rails::Paths::Root.new(@root) - paths.add "app", :eager_load => true, :glob => "*" - paths.add "app/assets", :glob => "*" - paths.add "app/controllers", :eager_load => true - paths.add "app/helpers", :eager_load => true - paths.add "app/models", :eager_load => true - paths.add "app/mailers", :eager_load => true + paths.add "app", eager_load: true, glob: "*" + paths.add "app/assets", glob: "*" + paths.add "app/controllers", eager_load: true + paths.add "app/helpers", eager_load: true + paths.add "app/models", eager_load: true + paths.add "app/mailers", eager_load: true paths.add "app/views" - paths.add "lib", :load_path => true - paths.add "lib/assets", :glob => "*" - paths.add "lib/tasks", :glob => "**/*.rake" + paths.add "lib", load_path: true + paths.add "lib/assets", glob: "*" + paths.add "lib/tasks", glob: "**/*.rake" paths.add "config" - paths.add "config/environments", :glob => "#{Rails.env}.rb" - paths.add "config/initializers", :glob => "**/*.rb" - paths.add "config/locales", :glob => "*.{rb,yml}" + paths.add "config/environments", glob: "#{Rails.env}.rb" + paths.add "config/initializers", glob: "**/*.rb" + paths.add "config/locales", glob: "*.{rb,yml}" paths.add "config/routes.rb" paths.add "db" paths.add "db/migrate" paths.add "db/seeds.rb" - paths.add "vendor", :load_path => true - paths.add "vendor/assets", :glob => "*" + paths.add "vendor", load_path: true + paths.add "vendor/assets", glob: "*" paths end end diff --git a/railties/lib/rails/generators.rb b/railties/lib/rails/generators.rb index a8c0626a41..367f9288b8 100644 --- a/railties/lib/rails/generators.rb +++ b/railties/lib/rails/generators.rb @@ -23,41 +23,41 @@ module Rails mattr_accessor :namespace DEFAULT_ALIASES = { - :rails => { - :actions => '-a', - :orm => '-o', - :javascripts => '-j', - :javascript_engine => '-je', - :resource_controller => '-c', - :scaffold_controller => '-c', - :stylesheets => '-y', - :stylesheet_engine => '-se', - :template_engine => '-e', - :test_framework => '-t' + rails: { + actions: '-a', + orm: '-o', + javascripts: '-j', + javascript_engine: '-je', + resource_controller: '-c', + scaffold_controller: '-c', + stylesheets: '-y', + stylesheet_engine: '-se', + template_engine: '-e', + test_framework: '-t' }, - :test_unit => { - :fixture_replacement => '-r', + test_unit: { + fixture_replacement: '-r', } } DEFAULT_OPTIONS = { - :rails => { - :assets => true, - :force_plural => false, - :helper => true, - :integration_tool => nil, - :javascripts => true, - :javascript_engine => :js, - :orm => false, - :performance_tool => nil, - :resource_controller => :controller, - :resource_route => true, - :scaffold_controller => :scaffold_controller, - :stylesheets => true, - :stylesheet_engine => :css, - :test_framework => false, - :template_engine => :erb + rails: { + assets: true, + force_plural: false, + helper: true, + integration_tool: nil, + javascripts: true, + javascript_engine: :js, + orm: false, + performance_tool: nil, + resource_controller: :controller, + resource_route: true, + scaffold_controller: :scaffold_controller, + stylesheets: true, + stylesheet_engine: :css, + test_framework: false, + template_engine: :erb } } diff --git a/railties/lib/rails/generators/actions.rb b/railties/lib/rails/generators/actions.rb index c41acc7841..5c4e81431c 100644 --- a/railties/lib/rails/generators/actions.rb +++ b/railties/lib/rails/generators/actions.rb @@ -7,9 +7,9 @@ module Rails # Adds an entry into Gemfile for the supplied gem. # - # gem "rspec", :group => :test - # gem "technoweenie-restful-authentication", :lib => "restful-authentication", :source => "http://gems.github.com/" - # gem "rails", "3.0", :git => "git://github.com/rails/rails" + # gem "rspec", group: :test + # gem "technoweenie-restful-authentication", lib: "restful-authentication", source: "http://gems.github.com/" + # gem "rails", "3.0", git: "git://github.com/rails/rails" def gem(*args) options = args.extract_options! name, version = args @@ -33,7 +33,7 @@ module Rails str = "gem #{parts.join(", ")}" str = " " + str if @in_group str = "\n" + str - append_file "Gemfile", str, :verbose => false + append_file "Gemfile", str, verbose: false end end @@ -47,13 +47,13 @@ module Rails log :gemfile, "group #{name}" in_root do - append_file "Gemfile", "\ngroup #{name} do", :force => true + append_file "Gemfile", "\ngroup #{name} do", force: true @in_group = true instance_eval(&block) @in_group = false - append_file "Gemfile", "\nend\n", :force => true + append_file "Gemfile", "\nend\n", force: true end end @@ -64,7 +64,7 @@ module Rails log :source, source in_root do - prepend_file "Gemfile", "source #{source.inspect}\n", :verbose => false + prepend_file "Gemfile", "source #{source.inspect}\n", verbose: false end end @@ -77,7 +77,7 @@ module Rails # "config.autoload_paths += %W(#{config.root}/extras)" # end # - # environment(nil, :env => "development") do + # environment(nil, env: "development") do # "config.active_record.observers = :cacher" # end def environment(data=nil, options={}, &block) @@ -87,10 +87,10 @@ module Rails in_root do if options[:env].nil? - inject_into_file 'config/application.rb', "\n #{data}", :after => sentinel, :verbose => false + inject_into_file 'config/application.rb', "\n #{data}", after: sentinel, verbose: false else Array(options[:env]).each do |env| - inject_into_file "config/environments/#{env}.rb", "\n #{data}", :after => env_file_sentinel, :verbose => false + inject_into_file "config/environments/#{env}.rb", "\n #{data}", after: env_file_sentinel, verbose: false end end end @@ -100,8 +100,8 @@ module Rails # Run a command in git. # # git :init - # git :add => "this.file that.rb" - # git :add => "onefile.rb", :rm => "badfile.cxx" + # git add: "this.file that.rb" + # git add: "onefile.rb", rm: "badfile.cxx" def git(commands={}) if commands.is_a?(Symbol) run "git #{commands}" @@ -123,7 +123,7 @@ module Rails # vendor("foreign.rb", "# Foreign code is fun") def vendor(filename, data=nil, &block) log :vendor, filename - create_file("vendor/#{filename}", data, :verbose => false, &block) + create_file("vendor/#{filename}", data, verbose: false, &block) end # Create a new file in the lib/ directory. Code can be specified @@ -136,7 +136,7 @@ module Rails # lib("foreign.rb", "# Foreign code is fun") def lib(filename, data=nil, &block) log :lib, filename - create_file("lib/#{filename}", data, :verbose => false, &block) + create_file("lib/#{filename}", data, verbose: false, &block) end # Create a new Rakefile with the provided code (either in a block or a string). @@ -156,7 +156,7 @@ module Rails # rakefile('seed.rake', 'puts "Planting seeds"') def rakefile(filename, data=nil, &block) log :rakefile, filename - create_file("lib/tasks/#{filename}", data, :verbose => false, &block) + create_file("lib/tasks/#{filename}", data, verbose: false, &block) end # Create a new initializer with the provided code (either in a block or a string). @@ -174,7 +174,7 @@ module Rails # initializer("api.rb", "API_KEY = '123456'") def initializer(filename, data=nil, &block) log :initializer, filename - create_file("config/initializers/#{filename}", data, :verbose => false, &block) + create_file("config/initializers/#{filename}", data, verbose: false, &block) end # Generate something using a generator from Rails or a plugin. @@ -186,19 +186,19 @@ module Rails log :generate, what argument = args.map {|arg| arg.to_s }.flatten.join(" ") - in_root { run_ruby_script("script/rails generate #{what} #{argument}", :verbose => false) } + in_root { run_ruby_script("script/rails generate #{what} #{argument}", verbose: false) } end # Runs the supplied rake task # # rake("db:migrate") - # rake("db:migrate", :env => "production") - # rake("gems:install", :sudo => true) + # rake("db:migrate", env: "production") + # rake("gems:install", sudo: true) def rake(command, options={}) log :rake, command env = options[:env] || ENV["RAILS_ENV"] || 'development' sudo = options[:sudo] && RbConfig::CONFIG['host_os'] !~ /mswin|mingw/ ? 'sudo ' : '' - in_root { run("#{sudo}#{extify(:rake)} #{command} RAILS_ENV=#{env}", :verbose => false) } + in_root { run("#{sudo}#{extify(:rake)} #{command} RAILS_ENV=#{env}", verbose: false) } end # Just run the capify command in root @@ -206,7 +206,7 @@ module Rails # capify! def capify! log :capify, "" - in_root { run("#{extify(:capify)} .", :verbose => false) } + in_root { run("#{extify(:capify)} .", verbose: false) } end # Make an entry in Rails routing file config/routes.rb @@ -217,7 +217,7 @@ module Rails sentinel = /\.routes\.draw do\s*$/ in_root do - inject_into_file 'config/routes.rb', "\n #{routing_code}", { :after => sentinel, :verbose => false } + inject_into_file 'config/routes.rb', "\n #{routing_code}", { after: sentinel, verbose: false } end end diff --git a/railties/lib/rails/generators/app_base.rb b/railties/lib/rails/generators/app_base.rb index 184c59cb90..e761e26b04 100644 --- a/railties/lib/rails/generators/app_base.rb +++ b/railties/lib/rails/generators/app_base.rb @@ -8,7 +8,7 @@ require 'uri' module Rails module Generators - class AppBase < Base + class AppBase < Base # :nodoc: DATABASES = %w( mysql oracle postgresql sqlite3 frontbase ibm_db sqlserver ) JDBC_DATABASES = %w( jdbcmysql jdbcsqlite3 jdbcpostgresql jdbc ) DATABASES.concat(JDBC_DATABASES) @@ -154,10 +154,8 @@ module Rails GEMFILE else <<-GEMFILE.strip_heredoc + # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '#{Rails::VERSION::STRING}' - - # Bundle edge Rails instead: - # gem 'rails', github: 'rails/rails' GEMFILE end end @@ -226,7 +224,14 @@ module Rails end def javascript_gemfile_entry - "gem '#{options[:javascript]}-rails'" unless options[:skip_javascript] + unless options[:skip_javascript] + <<-GEMFILE.strip_heredoc + gem '#{options[:javascript]}-rails' + + # Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks + gem 'turbolinks' + GEMFILE + end end def javascript_runtime_gemfile_entry diff --git a/railties/lib/rails/generators/base.rb b/railties/lib/rails/generators/base.rb index c2accf0387..7e938fab47 100644 --- a/railties/lib/rails/generators/base.rb +++ b/railties/lib/rails/generators/base.rb @@ -11,7 +11,7 @@ require 'rails/generators/actions' module Rails module Generators - class Error < Thor::Error + class Error < Thor::Error # :nodoc: end class Base < Thor::Group @@ -61,7 +61,7 @@ module Rails # # module Rails::Generators # class ControllerGenerator < Base - # hook_for :test_framework, :aliases => "-t" + # hook_for :test_framework, aliases: "-t" # end # end # @@ -102,7 +102,7 @@ module Rails # :as option: # # class AwesomeGenerator < Rails::Generators::Base - # hook_for :test_framework, :as => :controller + # hook_for :test_framework, as: :controller # end # # And now it will lookup at: @@ -113,7 +113,7 @@ module Rails # need to provide the :base value: # # class AwesomeGenerator < Rails::Generators::Base - # hook_for :test_framework, :in => :rails, :as => :controller + # hook_for :test_framework, in: :rails, as: :controller # end # # And the lookup is exactly the same as previously: @@ -137,7 +137,7 @@ module Rails # developers might want to have webrat available on controller generator. # This can be achieved as: # - # Rails::Generators::ControllerGenerator.hook_for :webrat, :type => :boolean + # Rails::Generators::ControllerGenerator.hook_for :webrat, type: :boolean # # Then, if you want webrat to be invoked, just supply: # @@ -171,9 +171,9 @@ module Rails defaults = if options[:type] == :boolean { } elsif [true, false].include?(default_value_for_option(name, options)) - { :banner => "" } + { banner: "" } else - { :desc => "#{name.to_s.humanize} to be invoked", :banner => "NAME" } + { desc: "#{name.to_s.humanize} to be invoked", banner: "NAME" } end unless class_options.key?(name) @@ -343,8 +343,8 @@ module Rails # Small macro to add ruby as an option to the generator with proper # default value plus an instance helper method called shebang. def self.add_shebang_option! - class_option :ruby, :type => :string, :aliases => "-r", :default => Thor::Util.ruby_command, - :desc => "Path to the Ruby binary of your choice", :banner => "PATH" + class_option :ruby, type: :string, aliases: "-r", default: Thor::Util.ruby_command, + desc: "Path to the Ruby binary of your choice", banner: "PATH" no_tasks { define_method :shebang do diff --git a/railties/lib/rails/generators/css/assets/assets_generator.rb b/railties/lib/rails/generators/css/assets/assets_generator.rb index 492177ca2e..e4a305f4b3 100644 --- a/railties/lib/rails/generators/css/assets/assets_generator.rb +++ b/railties/lib/rails/generators/css/assets/assets_generator.rb @@ -1,8 +1,8 @@ require "rails/generators/named_base" -module Css - module Generators - class AssetsGenerator < Rails::Generators::NamedBase +module Css # :nodoc: + module Generators # :nodoc: + class AssetsGenerator < Rails::Generators::NamedBase # :nodoc: source_root File.expand_path("../templates", __FILE__) def copy_stylesheet diff --git a/railties/lib/rails/generators/css/scaffold/scaffold_generator.rb b/railties/lib/rails/generators/css/scaffold/scaffold_generator.rb index 1d7fe9fac0..cf534030f9 100644 --- a/railties/lib/rails/generators/css/scaffold/scaffold_generator.rb +++ b/railties/lib/rails/generators/css/scaffold/scaffold_generator.rb @@ -1,8 +1,8 @@ require "rails/generators/named_base" -module Css - module Generators - class ScaffoldGenerator < Rails::Generators::NamedBase +module Css # :nodoc: + module Generators # :nodoc: + class ScaffoldGenerator < Rails::Generators::NamedBase # :nodoc: # In order to allow the Sass generators to pick up the default Rails CSS and # transform it, we leave it in a standard location for the CSS stylesheet # generators to handle. For the simple, default case, just copy it over. diff --git a/railties/lib/rails/generators/erb.rb b/railties/lib/rails/generators/erb.rb index 3e6371268f..73e986ee7f 100644 --- a/railties/lib/rails/generators/erb.rb +++ b/railties/lib/rails/generators/erb.rb @@ -1,7 +1,7 @@ require 'rails/generators/named_base' -module Erb - module Generators +module Erb # :nodoc: + module Generators # :nodoc: class Base < Rails::Generators::NamedBase #:nodoc: protected diff --git a/railties/lib/rails/generators/erb/controller/controller_generator.rb b/railties/lib/rails/generators/erb/controller/controller_generator.rb index ac57140c23..5f06734ab8 100644 --- a/railties/lib/rails/generators/erb/controller/controller_generator.rb +++ b/railties/lib/rails/generators/erb/controller/controller_generator.rb @@ -1,9 +1,9 @@ require 'rails/generators/erb' -module Erb - module Generators - class ControllerGenerator < Base - argument :actions, :type => :array, :default => [], :banner => "action action" +module Erb # :nodoc: + module Generators # :nodoc: + class ControllerGenerator < Base # :nodoc: + argument :actions, type: :array, default: [], banner: "action action" def copy_view_files base_path = File.join("app/views", class_path, file_name) diff --git a/railties/lib/rails/generators/erb/mailer/mailer_generator.rb b/railties/lib/rails/generators/erb/mailer/mailer_generator.rb index 943d0c9f8d..7bcac30dde 100644 --- a/railties/lib/rails/generators/erb/mailer/mailer_generator.rb +++ b/railties/lib/rails/generators/erb/mailer/mailer_generator.rb @@ -1,8 +1,8 @@ require 'rails/generators/erb/controller/controller_generator' -module Erb - module Generators - class MailerGenerator < ControllerGenerator +module Erb # :nodoc: + module Generators # :nodoc: + class MailerGenerator < ControllerGenerator # :nodoc: protected def format diff --git a/railties/lib/rails/generators/erb/scaffold/scaffold_generator.rb b/railties/lib/rails/generators/erb/scaffold/scaffold_generator.rb index b2c8d7051b..bacbc2d280 100644 --- a/railties/lib/rails/generators/erb/scaffold/scaffold_generator.rb +++ b/railties/lib/rails/generators/erb/scaffold/scaffold_generator.rb @@ -1,12 +1,12 @@ require 'rails/generators/erb' require 'rails/generators/resource_helpers' -module Erb - module Generators - class ScaffoldGenerator < Base +module Erb # :nodoc: + module Generators # :nodoc: + class ScaffoldGenerator < Base # :nodoc: include Rails::Generators::ResourceHelpers - argument :attributes, :type => :array, :default => [], :banner => "field:type field:type" + argument :attributes, type: :array, default: [], banner: "field:type field:type" def create_root_folder empty_directory File.join("app/views", controller_file_path) diff --git a/railties/lib/rails/generators/generated_attribute.rb b/railties/lib/rails/generators/generated_attribute.rb index d2c2abf40c..d8a4f15b4b 100644 --- a/railties/lib/rails/generators/generated_attribute.rb +++ b/railties/lib/rails/generators/generated_attribute.rb @@ -2,7 +2,7 @@ require 'active_support/time' module Rails module Generators - class GeneratedAttribute + class GeneratedAttribute # :nodoc: INDEX_OPTIONS = %w(index uniq) UNIQ_INDEX_OPTIONS = %w(uniq) @@ -23,7 +23,7 @@ module Rails type = type.to_sym if type if type && reference?(type) - references_index = UNIQ_INDEX_OPTIONS.include?(has_index) ? { :unique => true } : true + references_index = UNIQ_INDEX_OPTIONS.include?(has_index) ? { unique: true } : true attr_options[:index] = references_index end @@ -41,11 +41,11 @@ module Rails def parse_type_and_options(type) case type when /(string|text|binary|integer)\{(\d+)\}/ - return $1, :limit => $2.to_i + return $1, limit: $2.to_i when /decimal\{(\d+)[,.-](\d+)\}/ - return :decimal, :precision => $1.to_i, :scale => $2.to_i + return :decimal, precision: $1.to_i, scale: $2.to_i when /(references|belongs_to)\{polymorphic\}/ - return $1, :polymorphic => true + return $1, polymorphic: true else return type, {} end diff --git a/railties/lib/rails/generators/js/assets/assets_generator.rb b/railties/lib/rails/generators/js/assets/assets_generator.rb index d134a9e392..1e925b2cd2 100644 --- a/railties/lib/rails/generators/js/assets/assets_generator.rb +++ b/railties/lib/rails/generators/js/assets/assets_generator.rb @@ -1,8 +1,8 @@ require "rails/generators/named_base" -module Js - module Generators - class AssetsGenerator < Rails::Generators::NamedBase +module Js # :nodoc: + module Generators # :nodoc: + class AssetsGenerator < Rails::Generators::NamedBase # :nodoc: source_root File.expand_path("../templates", __FILE__) def copy_javascript diff --git a/railties/lib/rails/generators/named_base.rb b/railties/lib/rails/generators/named_base.rb index b61a5fc69d..84f8f76838 100644 --- a/railties/lib/rails/generators/named_base.rb +++ b/railties/lib/rails/generators/named_base.rb @@ -5,9 +5,9 @@ require 'rails/generators/generated_attribute' module Rails module Generators class NamedBase < Base - argument :name, :type => :string - class_option :skip_namespace, :type => :boolean, :default => false, - :desc => "Skip namespace (affects only isolated applications)" + argument :name, type: :string + class_option :skip_namespace, type: :boolean, default: false, + desc: "Skip namespace (affects only isolated applications)" def initialize(args, *options) #:nodoc: @inside_template = nil @@ -169,7 +169,7 @@ module Rails # # ==== Examples # - # check_class_collision :suffix => "Observer" + # check_class_collision suffix: "Observer" # # If the generator is invoked with class name Admin, it will check for # the presence of "AdminObserver". diff --git a/railties/lib/rails/generators/rails/app/app_generator.rb b/railties/lib/rails/generators/rails/app/app_generator.rb index b71b16b043..18637451ac 100644 --- a/railties/lib/rails/generators/rails/app/app_generator.rb +++ b/railties/lib/rails/generators/rails/app/app_generator.rb @@ -1,7 +1,7 @@ require 'rails/generators/app_base' module Rails - module ActionMethods + module ActionMethods # :nodoc: attr_reader :options def initialize(generator) @@ -96,7 +96,7 @@ module Rails end def public_directory - directory "public", "public", :recursive => false + directory "public", "public", recursive: false if options[:skip_index_html] remove_file "public/index.html" remove_file 'app/assets/images/rails.png' @@ -108,14 +108,16 @@ module Rails directory "script" do |content| "#{shebang}\n" + content end - chmod "script", 0755, :verbose => false + chmod "script", 0755, verbose: false end def test empty_directory_with_keep_file 'test/fixtures' - empty_directory_with_keep_file 'test/functional' + empty_directory_with_keep_file 'test/controllers' + empty_directory_with_keep_file 'test/mailers' + empty_directory_with_keep_file 'test/models' + empty_directory_with_keep_file 'test/helpers' empty_directory_with_keep_file 'test/integration' - empty_directory_with_keep_file 'test/unit' template 'test/performance/browsing_test.rb' template 'test/test_helper.rb' @@ -146,12 +148,12 @@ module Rails RAILS_DEV_PATH = File.expand_path("../../../../../..", File.dirname(__FILE__)) RESERVED_NAMES = %w[application destroy benchmarker profiler plugin runner test] - class AppGenerator < AppBase + class AppGenerator < AppBase # :nodoc: add_shared_options_for "application" # Add bin/rails options - class_option :version, :type => :boolean, :aliases => "-v", :group => :rails, - :desc => "Show Rails version number and quit" + class_option :version, type: :boolean, aliases: "-v", group: :rails, + desc: "Show Rails version number and quit" def initialize(*args) raise Error, "Options should be given after the application name. For details run: rails --help" if args[0].blank? diff --git a/railties/lib/rails/generators/rails/app/templates/Gemfile b/railties/lib/rails/generators/rails/app/templates/Gemfile index 55a6b3f4f2..30f8a5f75e 100644 --- a/railties/lib/rails/generators/rails/app/templates/Gemfile +++ b/railties/lib/rails/generators/rails/app/templates/Gemfile @@ -12,7 +12,7 @@ source 'https://rubygems.org' # To use ActiveModel has_secure_password # gem 'bcrypt-ruby', '~> 3.0.0' -# To use Jbuilder templates for JSON +# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder # gem 'jbuilder' # Use unicorn as the app server 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 f33a7f4ac2..7342bffd9d 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 vendor/assets/javascripts of plugins, if any, 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 -// the compiled file. +// compiled file. // // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD // GO AFTER THE REQUIRES BELOW. @@ -13,5 +13,6 @@ <% unless options[:skip_javascript] -%> //= require <%= options[:javascript] %> //= require <%= options[:javascript] %>_ujs +//= require turbolinks <% end -%> //= require_tree . diff --git a/railties/lib/rails/generators/rails/app/templates/config/application.rb b/railties/lib/rails/generators/rails/app/templates/config/application.rb index 39275e4285..5f15c973c6 100644 --- a/railties/lib/rails/generators/rails/app/templates/config/application.rb +++ b/railties/lib/rails/generators/rails/app/templates/config/application.rb @@ -7,16 +7,12 @@ require 'rails/all' <%= comment_if :skip_active_record %>require "active_record/railtie" require "action_controller/railtie" require "action_mailer/railtie" -<%= comment_if :skip_sprockets %>require "sprockets/rails/railtie" +<%= comment_if :skip_sprockets %>require "sprockets/railtie" <%= comment_if :skip_test_unit %>require "rails/test_unit/railtie" <% end -%> -if defined?(Bundler) - # If you precompile assets before deploying to production, use this line. - Bundler.require(*Rails.groups(assets: %w(development test))) - # If you want your assets lazily compiled in production, use this line. - # Bundler.require(:default, :assets, Rails.env) -end +# Assets should be precompiled for production (so we don't need the gems loaded then) +Bundler.require(*Rails.groups(assets: %w(development test))) module <%= app_const_base %> class Application < Rails::Application @@ -27,17 +23,6 @@ module <%= app_const_base %> # Custom directories with classes and modules you want to be autoloadable. # config.autoload_paths += %W(#{config.root}/extras) - # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. - # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. - # config.time_zone = 'Central Time (US & Canada)' - - # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. - # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] - # config.i18n.default_locale = :de - - # Configure the default encoding used in templates for Ruby 1.9. - config.encoding = "utf-8" - # Configure sensitive parameters which will be filtered from the log file. config.filter_parameters += [:password] diff --git a/railties/lib/rails/generators/rails/app/templates/config/databases/postgresql.yml b/railties/lib/rails/generators/rails/app/templates/config/databases/postgresql.yml index 07223a71c9..22c9194fad 100644 --- a/railties/lib/rails/generators/rails/app/templates/config/databases/postgresql.yml +++ b/railties/lib/rails/generators/rails/app/templates/config/databases/postgresql.yml @@ -2,7 +2,9 @@ # # Install the pg driver: # gem install pg -# On Mac OS X with macports: +# On OS X with Homebrew: +# gem install pg -- --with-pg-config=/usr/local/bin/pg_config +# On OS X with MacPorts: # gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config # On Windows: # gem install pg 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 6b5b3a0b1f..bd0a0d44b8 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 @@ -32,9 +32,6 @@ <%- end -%> <%- unless options.skip_sprockets? -%> - # Do not compress assets. - config.assets.compress = false - # Debug mode disables concatenation and preprocessing of assets. config.assets.debug = true <%- end -%> 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 cb3e8b123e..14422e275e 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 @@ -14,12 +14,18 @@ config.consider_all_requests_local = false config.action_controller.perform_caching = true + # Enable Rack::Cache to put a simple HTTP cache in front of your application + # Add `rack-cache` to your Gemfile before enabling this. + # For large-scale production use, consider using a caching reverse proxy like nginx, varnish or squid. + # config.action_dispatch.rack_cache = true + # Disable Rails's static asset server (Apache or nginx will already do this). config.serve_static_assets = false <%- unless options.skip_sprockets? -%> # Compress JavaScripts and CSS. - config.assets.compress = true + config.assets.js_compressor = :uglifier + # config.assets.css_compressor = :sass # Don't fallback to assets pipeline if a precompiled asset is missed. config.assets.compile = false @@ -55,7 +61,8 @@ # config.assets.precompile += %w( search.js ) <%- end -%> - # Disable delivery errors, bad email addresses will be ignored. + # Ignore bad email addresses and do not raise email delivery errors. + # Set this to true and configure the email server for immediate delivery to raise delivery errors. # config.action_mailer.raise_delivery_errors = false # Enable threaded mode. @@ -82,5 +89,5 @@ # Default the production mode queue to an synchronous queue. You will probably # want to replace this with an out-of-process queueing solution. - # config.queue = ActiveSupport::SynchronousQueue + # config.queue = ActiveSupport::SynchronousQueue.new end 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 202fc98adf..a5ef0cd9cd 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 @@ -34,6 +34,6 @@ # Print deprecation notices to the stderr. config.active_support.deprecation = :stderr - # Use the testing queue. - config.queue = ActiveSupport::TestQueue + # Use the synchronous queue to run jobs immediately. + config.queue = ActiveSupport::SynchronousQueue.new end diff --git a/railties/lib/rails/generators/rails/app/templates/config/initializers/locale.rb b/railties/lib/rails/generators/rails/app/templates/config/initializers/locale.rb new file mode 100644 index 0000000000..a8285f88ca --- /dev/null +++ b/railties/lib/rails/generators/rails/app/templates/config/initializers/locale.rb @@ -0,0 +1,7 @@ +# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. +# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. +# Rails.application.config.time_zone = 'Central Time (US & Canada)' + +# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. +# Rails.application.config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] +# Rails.application.config.i18n.default_locale = :de 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 f6b1ef1feb..631543c705 100644 --- a/railties/lib/rails/generators/rails/app/templates/config/routes.rb +++ b/railties/lib/rails/generators/rails/app/templates/config/routes.rb @@ -1,23 +1,20 @@ <%= app_const %>.routes.draw do - # The priority is based upon order of creation: - # first created -> highest priority. + # 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" - # just remember to delete public/index.html. + # You can have the root of your site routed with "root" just remember to delete public/index.html. # root to: 'welcome#index' - # Sample of regular route: + # Example of regular route: # get 'products/:id' => 'catalog#view' - # Keep in mind you can assign values other than :controller and :action. - # Sample of named route: + # Example of named route that can be invoked with purchase_url(id: product.id) # get 'products/:id/purchase' => 'catalog#purchase', as: :purchase - # This route can be invoked with purchase_url(id: product.id). - # Sample resource route (maps HTTP verbs to controller actions automatically): + # Example resource route (maps HTTP verbs to controller actions automatically): # resources :products - # Sample resource route with options: + # Example resource route with options: # resources :products do # member do # get 'short' @@ -29,13 +26,13 @@ # end # end - # Sample resource route with sub-resources: + # Example resource route with sub-resources: # resources :products do # resources :comments, :sales # resource :seller # end - # Sample resource route with more complex sub-resources: + # Example resource route with more complex sub-resources: # resources :products do # resources :comments # resources :sales do @@ -43,13 +40,10 @@ # end # end - # Sample resource route within a namespace: + # Example resource route within a namespace: # namespace :admin do # # Directs /admin/products/* to Admin::ProductsController # # (app/controllers/admin/products_controller.rb) # resources :products # end - - - # See how all your routes lay out with "rake routes". end diff --git a/railties/lib/rails/generators/rails/assets/assets_generator.rb b/railties/lib/rails/generators/rails/assets/assets_generator.rb index 2e7f25a0b7..6f4b86e708 100644 --- a/railties/lib/rails/generators/rails/assets/assets_generator.rb +++ b/railties/lib/rails/generators/rails/assets/assets_generator.rb @@ -1,11 +1,11 @@ module Rails module Generators - class AssetsGenerator < NamedBase - class_option :javascripts, :type => :boolean, :desc => "Generate JavaScripts" - class_option :stylesheets, :type => :boolean, :desc => "Generate Stylesheets" + class AssetsGenerator < NamedBase # :nodoc: + class_option :javascripts, type: :boolean, desc: "Generate JavaScripts" + class_option :stylesheets, type: :boolean, desc: "Generate Stylesheets" - class_option :javascript_engine, :desc => "Engine for JavaScripts" - class_option :stylesheet_engine, :desc => "Engine for Stylesheets" + class_option :javascript_engine, desc: "Engine for JavaScripts" + class_option :stylesheet_engine, desc: "Engine for Stylesheets" protected diff --git a/railties/lib/rails/generators/rails/controller/USAGE b/railties/lib/rails/generators/rails/controller/USAGE index b658777b12..9def4af65c 100644 --- a/railties/lib/rails/generators/rails/controller/USAGE +++ b/railties/lib/rails/generators/rails/controller/USAGE @@ -12,7 +12,7 @@ Example: `rails generate controller CreditCards open debit credit close` CreditCards controller with URLs like /credit_cards/debit. - Controller: app/controllers/credit_cards_controller.rb - Functional Test: test/functional/credit_cards_controller_test.rb - Views: app/views/credit_cards/debit.html.erb [...] - Helper: app/helpers/credit_cards_helper.rb + Controller: app/controllers/credit_cards_controller.rb + Test: test/controllers/credit_cards_controller_test.rb + Views: app/views/credit_cards/debit.html.erb [...] + Helper: app/helpers/credit_cards_helper.rb diff --git a/railties/lib/rails/generators/rails/controller/controller_generator.rb b/railties/lib/rails/generators/rails/controller/controller_generator.rb index 74aa0432a8..bae54623c6 100644 --- a/railties/lib/rails/generators/rails/controller/controller_generator.rb +++ b/railties/lib/rails/generators/rails/controller/controller_generator.rb @@ -1,8 +1,8 @@ module Rails module Generators - class ControllerGenerator < NamedBase - argument :actions, :type => :array, :default => [], :banner => "action action" - check_class_collision :suffix => "Controller" + class ControllerGenerator < NamedBase # :nodoc: + argument :actions, type: :array, default: [], banner: "action action" + check_class_collision suffix: "Controller" def create_controller_files template 'controller.rb', File.join('app/controllers', class_path, "#{file_name}_controller.rb") diff --git a/railties/lib/rails/generators/rails/generator/generator_generator.rb b/railties/lib/rails/generators/rails/generator/generator_generator.rb index 3e0a442bda..9a7a516b5b 100644 --- a/railties/lib/rails/generators/rails/generator/generator_generator.rb +++ b/railties/lib/rails/generators/rails/generator/generator_generator.rb @@ -1,10 +1,10 @@ module Rails module Generators - class GeneratorGenerator < NamedBase - check_class_collision :suffix => "Generator" + class GeneratorGenerator < NamedBase # :nodoc: + check_class_collision suffix: "Generator" - class_option :namespace, :type => :boolean, :default => true, - :desc => "Namespace generator under lib/generators/name" + class_option :namespace, type: :boolean, default: true, + desc: "Namespace generator under lib/generators/name" def create_generator_files directory '.', generator_dir diff --git a/railties/lib/rails/generators/rails/helper/USAGE b/railties/lib/rails/generators/rails/helper/USAGE index c0ddb0f606..30e323a858 100644 --- a/railties/lib/rails/generators/rails/helper/USAGE +++ b/railties/lib/rails/generators/rails/helper/USAGE @@ -13,5 +13,5 @@ Example: Credit card helper. Helper: app/helpers/credit_card_helper.rb - Test: test/unit/helpers/credit_card_helper_test.rb + Test: test/helpers/credit_card_helper_test.rb diff --git a/railties/lib/rails/generators/rails/helper/helper_generator.rb b/railties/lib/rails/generators/rails/helper/helper_generator.rb index ad66388591..5ff38e4111 100644 --- a/railties/lib/rails/generators/rails/helper/helper_generator.rb +++ b/railties/lib/rails/generators/rails/helper/helper_generator.rb @@ -1,7 +1,7 @@ module Rails module Generators - class HelperGenerator < NamedBase - check_class_collision :suffix => "Helper" + class HelperGenerator < NamedBase # :nodoc: + check_class_collision suffix: "Helper" def create_helper_files template 'helper.rb', File.join('app/helpers', class_path, "#{file_name}_helper.rb") diff --git a/railties/lib/rails/generators/rails/integration_test/integration_test_generator.rb b/railties/lib/rails/generators/rails/integration_test/integration_test_generator.rb index 363a327fcb..70770ddcb8 100644 --- a/railties/lib/rails/generators/rails/integration_test/integration_test_generator.rb +++ b/railties/lib/rails/generators/rails/integration_test/integration_test_generator.rb @@ -1,7 +1,7 @@ module Rails module Generators - class IntegrationTestGenerator < NamedBase - hook_for :integration_tool, :as => :integration + class IntegrationTestGenerator < NamedBase # :nodoc: + hook_for :integration_tool, as: :integration end end end diff --git a/railties/lib/rails/generators/rails/migration/migration_generator.rb b/railties/lib/rails/generators/rails/migration/migration_generator.rb index f87dce1502..965c42db36 100644 --- a/railties/lib/rails/generators/rails/migration/migration_generator.rb +++ b/railties/lib/rails/generators/rails/migration/migration_generator.rb @@ -1,8 +1,8 @@ module Rails module Generators - class MigrationGenerator < NamedBase #metagenerator - argument :attributes, :type => :array, :default => [], :banner => "field[:type][:index] field[:type][:index]" - hook_for :orm, :required => true + class MigrationGenerator < NamedBase # :nodoc: + argument :attributes, type: :array, default: [], banner: "field[:type][:index] field[:type][:index]" + hook_for :orm, required: true end end end diff --git a/railties/lib/rails/generators/rails/model/USAGE b/railties/lib/rails/generators/rails/model/USAGE index c46c86076e..e29e19490e 100644 --- a/railties/lib/rails/generators/rails/model/USAGE +++ b/railties/lib/rails/generators/rails/model/USAGE @@ -74,7 +74,7 @@ Examples: For ActiveRecord and TestUnit it creates: Model: app/models/account.rb - Test: test/unit/account_test.rb + Test: test/models/account_test.rb Fixtures: test/fixtures/accounts.yml Migration: db/migrate/XXX_add_accounts.rb @@ -88,7 +88,7 @@ Examples: Module: app/models/admin.rb Model: app/models/admin/account.rb - Test: test/unit/admin/account_test.rb + Test: test/models/admin/account_test.rb Fixtures: test/fixtures/admin/accounts.yml Migration: db/migrate/XXX_add_admin_accounts.rb diff --git a/railties/lib/rails/generators/rails/model/model_generator.rb b/railties/lib/rails/generators/rails/model/model_generator.rb index 9bb29b784e..ea3d69d7c9 100644 --- a/railties/lib/rails/generators/rails/model/model_generator.rb +++ b/railties/lib/rails/generators/rails/model/model_generator.rb @@ -1,8 +1,8 @@ module Rails module Generators - class ModelGenerator < NamedBase #metagenerator - argument :attributes, :type => :array, :default => [], :banner => "field[:type][:index] field[:type][:index]" - hook_for :orm, :required => true + class ModelGenerator < NamedBase # :nodoc: + argument :attributes, type: :array, default: [], banner: "field[:type][:index] field[:type][:index]" + hook_for :orm, required: true end end end diff --git a/railties/lib/rails/generators/rails/observer/USAGE b/railties/lib/rails/generators/rails/observer/USAGE index d8f32a6a48..177ff49e4a 100644 --- a/railties/lib/rails/generators/rails/observer/USAGE +++ b/railties/lib/rails/generators/rails/observer/USAGE @@ -9,4 +9,4 @@ Example: For ActiveRecord and TestUnit it creates: Observer: app/models/account_observer.rb - TestUnit: test/unit/account_observer_test.rb + TestUnit: test/models/account_observer_test.rb diff --git a/railties/lib/rails/generators/rails/observer/observer_generator.rb b/railties/lib/rails/generators/rails/observer/observer_generator.rb index f5cedee91f..7a4d701ac6 100644 --- a/railties/lib/rails/generators/rails/observer/observer_generator.rb +++ b/railties/lib/rails/generators/rails/observer/observer_generator.rb @@ -1,7 +1,7 @@ module Rails module Generators - class ObserverGenerator < NamedBase #metagenerator - hook_for :orm, :required => true + class ObserverGenerator < NamedBase # :nodoc: + hook_for :orm, required: true end end end diff --git a/railties/lib/rails/generators/rails/performance_test/performance_test_generator.rb b/railties/lib/rails/generators/rails/performance_test/performance_test_generator.rb index d1c71ab8ed..56cd562f3d 100644 --- a/railties/lib/rails/generators/rails/performance_test/performance_test_generator.rb +++ b/railties/lib/rails/generators/rails/performance_test/performance_test_generator.rb @@ -1,7 +1,7 @@ module Rails module Generators - class PerformanceTestGenerator < NamedBase - hook_for :performance_tool, :as => :performance + class PerformanceTestGenerator < NamedBase # :nodoc: + hook_for :performance_tool, as: :performance end end end diff --git a/railties/lib/rails/generators/rails/plugin_new/plugin_new_generator.rb b/railties/lib/rails/generators/rails/plugin_new/plugin_new_generator.rb index c77b3450a3..4a0bcc35a4 100644 --- a/railties/lib/rails/generators/rails/plugin_new/plugin_new_generator.rb +++ b/railties/lib/rails/generators/rails/plugin_new/plugin_new_generator.rb @@ -3,6 +3,13 @@ require "rails/generators/rails/app/app_generator" require 'date' module Rails + # The plugin builder allows you to override elements of the plugin + # generator without being forced to reverse the operations of the default + # generator. + # + # This allows you to override entire operations, like the creation of the + # Gemfile, README, or JavaScript files, without needing to know exactly + # what those operations do so you can create another template action. class PluginBuilder def rakefile template "Rakefile" @@ -61,7 +68,7 @@ module Rails append_file "Rakefile", <<-EOF #{rakefile_test_tasks} -task :default => :test +task default: :test EOF if full? template "test/integration/navigation_test.rb" @@ -82,10 +89,10 @@ task :default => :test end def test_dummy_config - template "rails/boot.rb", "#{dummy_path}/config/boot.rb", :force => true - template "rails/application.rb", "#{dummy_path}/config/application.rb", :force => true + template "rails/boot.rb", "#{dummy_path}/config/boot.rb", force: true + template "rails/application.rb", "#{dummy_path}/config/application.rb", force: true if mountable? - template "rails/routes.rb", "#{dummy_path}/config/routes.rb", :force => true + template "rails/routes.rb", "#{dummy_path}/config/routes.rb", force: true end end @@ -128,10 +135,10 @@ task :default => :test def script(force = false) return unless full? - directory "script", :force => force do |content| + directory "script", force: force do |content| "#{shebang}\n" + content end - chmod "script", 0755, :verbose => false + chmod "script", 0755, verbose: false end def gemfile_entry @@ -146,25 +153,25 @@ task :default => :test end module Generators - class PluginNewGenerator < AppBase + class PluginNewGenerator < AppBase # :nodoc: add_shared_options_for "plugin" alias_method :plugin_path, :app_path - class_option :dummy_path, :type => :string, :default => "test/dummy", - :desc => "Create dummy application at given path" + class_option :dummy_path, type: :string, default: "test/dummy", + desc: "Create dummy application at given path" - class_option :full, :type => :boolean, :default => false, - :desc => "Generate a rails engine with bundled Rails application for testing" + class_option :full, type: :boolean, default: false, + desc: "Generate a rails engine with bundled Rails application for testing" - class_option :mountable, :type => :boolean, :default => false, - :desc => "Generate mountable isolated application" + class_option :mountable, type: :boolean, default: false, + desc: "Generate mountable isolated application" - class_option :skip_gemspec, :type => :boolean, :default => false, - :desc => "Skip gemspec file" + class_option :skip_gemspec, type: :boolean, default: false, + desc: "Skip gemspec file" - class_option :skip_gemfile_entry, :type => :boolean, :default => false, - :desc => "If creating plugin in application's directory " + + class_option :skip_gemfile_entry, type: :boolean, default: false, + desc: "If creating plugin in application's directory " + "skip adding entry to Gemfile" def initialize(*args) diff --git a/railties/lib/rails/generators/rails/plugin_new/templates/app/views/layouts/%name%/application.html.erb.tt b/railties/lib/rails/generators/rails/plugin_new/templates/app/views/layouts/%name%/application.html.erb.tt index bd983fb90f..1d380420b4 100644 --- a/railties/lib/rails/generators/rails/plugin_new/templates/app/views/layouts/%name%/application.html.erb.tt +++ b/railties/lib/rails/generators/rails/plugin_new/templates/app/views/layouts/%name%/application.html.erb.tt @@ -2,7 +2,7 @@ <html> <head> <title><%= camelized %></title> - <%%= stylesheet_link_tag "<%= name %>/application", :media => "all" %> + <%%= stylesheet_link_tag "<%= name %>/application", media: "all" %> <%%= javascript_include_tag "<%= name %>/application" %> <%%= csrf_meta_tags %> </head> diff --git a/railties/lib/rails/generators/rails/plugin_new/templates/rails/application.rb b/railties/lib/rails/generators/rails/plugin_new/templates/rails/application.rb index 2f9b7fc962..8a8ba04a70 100644 --- a/railties/lib/rails/generators/rails/plugin_new/templates/rails/application.rb +++ b/railties/lib/rails/generators/rails/plugin_new/templates/rails/application.rb @@ -7,7 +7,7 @@ require 'rails/all' <%= comment_if :skip_active_record %>require "active_record/railtie" require "action_controller/railtie" require "action_mailer/railtie" -<%= comment_if :skip_sprockets %>require "sprockets/rails/railtie" +<%= comment_if :skip_sprockets %>require "sprockets/railtie" <%= comment_if :skip_test_unit %>require "rails/test_unit/railtie" <% end -%> diff --git a/railties/lib/rails/generators/rails/resource/resource_generator.rb b/railties/lib/rails/generators/rails/resource/resource_generator.rb index 3a0586ee43..8014feb75f 100644 --- a/railties/lib/rails/generators/rails/resource/resource_generator.rb +++ b/railties/lib/rails/generators/rails/resource/resource_generator.rb @@ -4,17 +4,17 @@ require 'active_support/core_ext/object/blank' module Rails module Generators - class ResourceGenerator < ModelGenerator #metagenerator + class ResourceGenerator < ModelGenerator # :nodoc: include ResourceHelpers - hook_for :resource_controller, :required => true do |controller| + hook_for :resource_controller, required: true do |controller| invoke controller, [ controller_name, options[:actions] ] end - class_option :actions, :type => :array, :banner => "ACTION ACTION", :default => [], - :desc => "Actions for the resource controller" + class_option :actions, type: :array, banner: "ACTION ACTION", default: [], + desc: "Actions for the resource controller" - hook_for :resource_route, :required => true + hook_for :resource_route, required: true end end end diff --git a/railties/lib/rails/generators/rails/resource_route/resource_route_generator.rb b/railties/lib/rails/generators/rails/resource_route/resource_route_generator.rb index 6a5d62803c..121205b254 100644 --- a/railties/lib/rails/generators/rails/resource_route/resource_route_generator.rb +++ b/railties/lib/rails/generators/rails/resource_route/resource_route_generator.rb @@ -1,13 +1,50 @@ module Rails module Generators - class ResourceRouteGenerator < NamedBase + class ResourceRouteGenerator < NamedBase # :nodoc: + + # Properly nests namespaces passed into a generator + # + # $ rails generate resource admin/users/products + # + # should give you + # + # namespace :admin do + # namespace :users + # resources :products + # end + # end def add_resource_route return if options[:actions].present? - route_config = regular_class_path.collect{ |namespace| "namespace :#{namespace} do " }.join(" ") - route_config << "resources :#{file_name.pluralize}" - route_config << " end" * regular_class_path.size - route route_config + + # iterates over all namespaces and opens up blocks + regular_class_path.each_with_index do |namespace, index| + write("namespace :#{namespace} do", index + 1) + end + + # inserts the primary resource + write("resources :#{file_name.pluralize}", route_length + 1) + + # ends blocks + regular_class_path.each_index do |index| + write("end", route_length - index) + end + + # route prepends two spaces onto the front of the string that is passed, this corrects that + route route_string[2..-1] end + + private + def route_string + @route_string ||= "" + end + + def write(str, indent) + route_string << "#{" " * indent}#{str}\n" + end + + def route_length + regular_class_path.length + end end end end diff --git a/railties/lib/rails/generators/rails/scaffold/scaffold_generator.rb b/railties/lib/rails/generators/rails/scaffold/scaffold_generator.rb index 03a61a035e..b4f466fbd8 100644 --- a/railties/lib/rails/generators/rails/scaffold/scaffold_generator.rb +++ b/railties/lib/rails/generators/rails/scaffold/scaffold_generator.rb @@ -2,14 +2,14 @@ require 'rails/generators/rails/resource/resource_generator' module Rails module Generators - class ScaffoldGenerator < ResourceGenerator #metagenerator + class ScaffoldGenerator < ResourceGenerator #Â :nodoc: remove_hook_for :resource_controller remove_class_option :actions - class_option :stylesheets, :type => :boolean, :desc => "Generate Stylesheets" - class_option :stylesheet_engine, :desc => "Engine for Stylesheets" + class_option :stylesheets, type: :boolean, desc: "Generate Stylesheets" + class_option :stylesheet_engine, desc: "Engine for Stylesheets" - hook_for :scaffold_controller, :required => true + hook_for :scaffold_controller, required: true hook_for :assets do |assets| invoke assets, [controller_name] diff --git a/railties/lib/rails/generators/rails/scaffold_controller/USAGE b/railties/lib/rails/generators/rails/scaffold_controller/USAGE index 5cd51b62d4..8ba4c5ccbc 100644 --- a/railties/lib/rails/generators/rails/scaffold_controller/USAGE +++ b/railties/lib/rails/generators/rails/scaffold_controller/USAGE @@ -13,7 +13,7 @@ Example: `rails generate scaffold_controller CreditCard` Credit card controller with URLs like /credit_card/debit. - Controller: app/controllers/credit_cards_controller.rb - Functional Test: test/functional/credit_cards_controller_test.rb - Views: app/views/credit_cards/index.html.erb [...] - Helper: app/helpers/credit_cards_helper.rb + Controller: app/controllers/credit_cards_controller.rb + Test: test/controllers/credit_cards_controller_test.rb + Views: app/views/credit_cards/index.html.erb [...] + Helper: app/helpers/credit_cards_helper.rb diff --git a/railties/lib/rails/generators/rails/scaffold_controller/scaffold_controller_generator.rb b/railties/lib/rails/generators/rails/scaffold_controller/scaffold_controller_generator.rb index f30ad6e20d..4f36b612ae 100644 --- a/railties/lib/rails/generators/rails/scaffold_controller/scaffold_controller_generator.rb +++ b/railties/lib/rails/generators/rails/scaffold_controller/scaffold_controller_generator.rb @@ -2,24 +2,24 @@ require 'rails/generators/resource_helpers' module Rails module Generators - class ScaffoldControllerGenerator < NamedBase + class ScaffoldControllerGenerator < NamedBase # :nodoc: include ResourceHelpers - check_class_collision :suffix => "Controller" + check_class_collision suffix: "Controller" - class_option :orm, :banner => "NAME", :type => :string, :required => true, - :desc => "ORM to generate the controller for" + class_option :orm, banner: "NAME", type: :string, required: true, + desc: "ORM to generate the controller for" - argument :attributes, :type => :array, :default => [], :banner => "field:type field:type" + argument :attributes, type: :array, default: [], banner: "field:type field:type" def create_controller_files template "controller.rb", File.join('app/controllers', class_path, "#{controller_file_name}_controller.rb") end - hook_for :template_engine, :test_framework, :as => :scaffold + hook_for :template_engine, :test_framework, as: :scaffold # Invoke the helper using the controller name (pluralized) - hook_for :helper, :as => :scaffold do |invoked| + hook_for :helper, as: :scaffold do |invoked| invoke invoked, [ controller_name ] end end diff --git a/railties/lib/rails/generators/rails/task/task_generator.rb b/railties/lib/rails/generators/rails/task/task_generator.rb index 8a62d9e8eb..754824ca0c 100644 --- a/railties/lib/rails/generators/rails/task/task_generator.rb +++ b/railties/lib/rails/generators/rails/task/task_generator.rb @@ -1,7 +1,7 @@ module Rails module Generators - class TaskGenerator < NamedBase - argument :actions, :type => :array, :default => [], :banner => "action action" + class TaskGenerator < NamedBase # :nodoc: + argument :actions, type: :array, default: [], banner: "action action" def create_task_files template 'task.rb', File.join('lib/tasks', "#{file_name}.rake") diff --git a/railties/lib/rails/generators/rails/task/templates/task.rb b/railties/lib/rails/generators/rails/task/templates/task.rb index b7407bd6dc..1e3ed5f158 100644 --- a/railties/lib/rails/generators/rails/task/templates/task.rb +++ b/railties/lib/rails/generators/rails/task/templates/task.rb @@ -1,7 +1,7 @@ namespace :<%= file_name %> do <% actions.each do |action| -%> desc "TODO" - task :<%= action %> => :environment do + task <%= action %>: :environment do end <% end -%> diff --git a/railties/lib/rails/generators/resource_helpers.rb b/railties/lib/rails/generators/resource_helpers.rb index 48833869e5..7fd5c00768 100644 --- a/railties/lib/rails/generators/resource_helpers.rb +++ b/railties/lib/rails/generators/resource_helpers.rb @@ -4,16 +4,14 @@ module Rails module Generators # Deal with controller names on scaffold and add some helpers to deal with # ActiveModel. - # - module ResourceHelpers + module ResourceHelpers # :nodoc: mattr_accessor :skip_warn def self.included(base) #:nodoc: - base.class_option :force_plural, :type => :boolean, :desc => "Forces the use of a plural ModelName" + base.class_option :force_plural, type: :boolean, desc: "Forces the use of a plural ModelName" end # Set controller variables on initialization. - # def initialize(*args) #:nodoc: super diff --git a/railties/lib/rails/generators/test_case.rb b/railties/lib/rails/generators/test_case.rb index 2ff340755a..24308dcf6c 100644 --- a/railties/lib/rails/generators/test_case.rb +++ b/railties/lib/rails/generators/test_case.rb @@ -26,7 +26,6 @@ module Rails # destination File.expand_path("../tmp", File.dirname(__FILE__)) # setup :prepare_destination # end - # class TestCase < ActiveSupport::TestCase include FileUtils @@ -37,13 +36,13 @@ module Rails self.current_path = File.expand_path(Dir.pwd) self.default_arguments = [] - def setup + def setup # :nodoc: destination_root_is_set? ensure_current_path super end - def teardown + def teardown # :nodoc: ensure_current_path super end @@ -51,7 +50,6 @@ module Rails # Sets which generator should be tested: # # tests AppGenerator - # def self.tests(klass) self.generator_class = klass end @@ -60,7 +58,6 @@ module Rails # invoking it. # # arguments %w(app_name --skip-active-record) - # def self.arguments(array) self.default_arguments = array end @@ -68,7 +65,6 @@ module Rails # Sets the destination of generator files: # # destination File.expand_path("../tmp", File.dirname(__FILE__)) - # def self.destination(path) self.destination_root = path end @@ -91,7 +87,6 @@ module Rails # assert_match(/Product\.all/, index) # end # end - # def assert_file(relative, *contents) absolute = File.expand_path(relative, destination_root) assert File.exists?(absolute), "Expected file #{relative.inspect} to exist, but does not" @@ -114,7 +109,6 @@ module Rails # path relative to the configured destination: # # assert_no_file "config/random.rb" - # def assert_no_file(relative) absolute = File.expand_path(relative, destination_root) assert !File.exists?(absolute), "Expected file #{relative.inspect} to not exist, but does" @@ -132,7 +126,6 @@ module Rails # assert_file "db/migrate/003_create_products.rb" # # Consequently, assert_migration accepts the same arguments has assert_file. - # def assert_migration(relative, *contents, &block) file_name = migration_file_name(relative) assert file_name, "Expected migration #{relative} to exist, but was not found" @@ -143,7 +136,6 @@ module Rails # path relative to the configured destination: # # assert_no_migration "db/migrate/create_products.rb" - # def assert_no_migration(relative) file_name = migration_file_name(relative) assert_nil file_name, "Expected migration #{relative} to not exist, but found #{file_name}" @@ -158,7 +150,6 @@ module Rails # assert_match(/create_table/, up) # end # end - # def assert_class_method(method, content, &block) assert_instance_method "self.#{method}", content, &block end @@ -171,7 +162,6 @@ module Rails # assert_match(/Product\.all/, index) # end # end - # def assert_instance_method(method, content) assert content =~ /def #{method}(\(.+\))?(.*?)\n end/m, "Expected to have method #{method}" yield $2.strip if block_given? @@ -182,7 +172,6 @@ module Rails # properly: # # assert_field_type :date, :date_select - # def assert_field_type(attribute_type, field_type) assert_equal(field_type, create_generated_attribute(attribute_type).field_type) end @@ -190,7 +179,6 @@ module Rails # Asserts the given attribute type gets a proper default value: # # assert_field_default_value :string, "MyString" - # def assert_field_default_value(attribute_type, value) assert_equal(value, create_generated_attribute(attribute_type).default) end @@ -212,39 +200,38 @@ module Rails # You can provide a configuration hash as second argument. This method returns the output # printed by the generator. def run_generator(args=self.default_arguments, config={}) - capture(:stdout) { self.generator_class.start(args, config.reverse_merge(:destination_root => destination_root)) } + capture(:stdout) { self.generator_class.start(args, config.reverse_merge(destination_root: destination_root)) } end # Instantiate the generator. def generator(args=self.default_arguments, options={}, config={}) - @generator ||= self.generator_class.new(args, options, config.reverse_merge(:destination_root => destination_root)) + @generator ||= self.generator_class.new(args, options, config.reverse_merge(destination_root: destination_root)) end # Create a Rails::Generators::GeneratedAttribute by supplying the # attribute type and, optionally, the attribute name: # # create_generated_attribute(:string, 'name') - # def create_generated_attribute(attribute_type, name = 'test', index = nil) Rails::Generators::GeneratedAttribute.parse([name, attribute_type, index].compact.join(':')) end protected - def destination_root_is_set? #:nodoc: + def destination_root_is_set? # :nodoc: raise "You need to configure your Rails::Generators::TestCase destination root." unless destination_root end - def ensure_current_path #:nodoc: + def ensure_current_path # :nodoc: cd current_path end - def prepare_destination + def prepare_destination # :nodoc: rm_rf(destination_root) mkdir_p(destination_root) end - def migration_file_name(relative) #:nodoc: + def migration_file_name(relative) # :nodoc: absolute = File.expand_path(relative, destination_root) dirname, file_name = File.dirname(absolute), File.basename(absolute).sub(/\.rb$/, '') Dir.glob("#{dirname}/[0-9]*_*.rb").grep(/\d+_#{file_name}.rb$/).first diff --git a/railties/lib/rails/generators/test_unit.rb b/railties/lib/rails/generators/test_unit.rb index 62b9afaa2c..fe45c9e15d 100644 --- a/railties/lib/rails/generators/test_unit.rb +++ b/railties/lib/rails/generators/test_unit.rb @@ -1,8 +1,8 @@ require 'rails/generators/named_base' -module TestUnit - module Generators - class Base < Rails::Generators::NamedBase #:nodoc: +module TestUnit # :nodoc: + module Generators # :nodoc: + class Base < Rails::Generators::NamedBase # :nodoc: end end end diff --git a/railties/lib/rails/generators/test_unit/controller/controller_generator.rb b/railties/lib/rails/generators/test_unit/controller/controller_generator.rb index 20f3bd8965..b5aa581769 100644 --- a/railties/lib/rails/generators/test_unit/controller/controller_generator.rb +++ b/railties/lib/rails/generators/test_unit/controller/controller_generator.rb @@ -1,14 +1,14 @@ require 'rails/generators/test_unit' -module TestUnit - module Generators - class ControllerGenerator < Base - argument :actions, :type => :array, :default => [], :banner => "action action" - check_class_collision :suffix => "ControllerTest" +module TestUnit # :nodoc: + module Generators # :nodoc: + class ControllerGenerator < Base # :nodoc: + argument :actions, type: :array, default: [], banner: "action action" + check_class_collision suffix: "ControllerTest" def create_test_files template 'functional_test.rb', - File.join('test/functional', class_path, "#{file_name}_controller_test.rb") + File.join('test/controllers', class_path, "#{file_name}_controller_test.rb") end end end diff --git a/railties/lib/rails/generators/test_unit/helper/helper_generator.rb b/railties/lib/rails/generators/test_unit/helper/helper_generator.rb index 4ea80bf7be..0db76f9eaf 100644 --- a/railties/lib/rails/generators/test_unit/helper/helper_generator.rb +++ b/railties/lib/rails/generators/test_unit/helper/helper_generator.rb @@ -1,12 +1,12 @@ require 'rails/generators/test_unit' -module TestUnit - module Generators - class HelperGenerator < Base - check_class_collision :suffix => "HelperTest" +module TestUnit # :nodoc: + module Generators # :nodoc: + class HelperGenerator < Base # :nodoc: + check_class_collision suffix: "HelperTest" def create_helper_files - template 'helper_test.rb', File.join('test/unit/helpers', class_path, "#{file_name}_helper_test.rb") + template 'helper_test.rb', File.join('test/helpers', class_path, "#{file_name}_helper_test.rb") end end end diff --git a/railties/lib/rails/generators/test_unit/integration/integration_generator.rb b/railties/lib/rails/generators/test_unit/integration/integration_generator.rb index 32d0fac029..e004835bd5 100644 --- a/railties/lib/rails/generators/test_unit/integration/integration_generator.rb +++ b/railties/lib/rails/generators/test_unit/integration/integration_generator.rb @@ -1,9 +1,9 @@ require 'rails/generators/test_unit' -module TestUnit - module Generators - class IntegrationGenerator < Base - check_class_collision :suffix => "Test" +module TestUnit # :nodoc: + module Generators # :nodoc: + class IntegrationGenerator < Base # :nodoc: + check_class_collision suffix: "Test" def create_test_files template 'integration_test.rb', File.join('test/integration', class_path, "#{file_name}_test.rb") diff --git a/railties/lib/rails/generators/test_unit/mailer/mailer_generator.rb b/railties/lib/rails/generators/test_unit/mailer/mailer_generator.rb index 1a49286d41..3334b189bf 100644 --- a/railties/lib/rails/generators/test_unit/mailer/mailer_generator.rb +++ b/railties/lib/rails/generators/test_unit/mailer/mailer_generator.rb @@ -1,13 +1,13 @@ require 'rails/generators/test_unit' -module TestUnit - module Generators - class MailerGenerator < Base - argument :actions, :type => :array, :default => [], :banner => "method method" - check_class_collision :suffix => "Test" +module TestUnit # :nodoc: + module Generators # :nodoc: + class MailerGenerator < Base # :nodoc: + argument :actions, type: :array, default: [], banner: "method method" + check_class_collision suffix: "Test" def create_test_files - template "functional_test.rb", File.join('test/functional', class_path, "#{file_name}_test.rb") + template "functional_test.rb", File.join('test/mailers', class_path, "#{file_name}_test.rb") end end end diff --git a/railties/lib/rails/generators/test_unit/model/model_generator.rb b/railties/lib/rails/generators/test_unit/model/model_generator.rb index c1dd535dd3..2801749ffe 100644 --- a/railties/lib/rails/generators/test_unit/model/model_generator.rb +++ b/railties/lib/rails/generators/test_unit/model/model_generator.rb @@ -1,15 +1,15 @@ require 'rails/generators/test_unit' -module TestUnit - module Generators - class ModelGenerator < Base - argument :attributes, :type => :array, :default => [], :banner => "field:type field:type" - class_option :fixture, :type => :boolean +module TestUnit # :nodoc: + module Generators # :nodoc: + class ModelGenerator < Base # :nodoc: + argument :attributes, type: :array, default: [], banner: "field:type field:type" + class_option :fixture, type: :boolean - check_class_collision :suffix => "Test" + check_class_collision suffix: "Test" def create_test_file - template 'unit_test.rb', File.join('test/unit', class_path, "#{file_name}_test.rb") + template 'unit_test.rb', File.join('test/models', class_path, "#{file_name}_test.rb") end hook_for :fixture_replacement diff --git a/railties/lib/rails/generators/test_unit/observer/observer_generator.rb b/railties/lib/rails/generators/test_unit/observer/observer_generator.rb index 6cc1158c21..64fe694a8b 100644 --- a/railties/lib/rails/generators/test_unit/observer/observer_generator.rb +++ b/railties/lib/rails/generators/test_unit/observer/observer_generator.rb @@ -1,12 +1,12 @@ require 'rails/generators/test_unit' -module TestUnit - module Generators - class ObserverGenerator < Base - check_class_collision :suffix => "ObserverTest" +module TestUnit # :nodoc: + module Generators # :nodoc: + class ObserverGenerator < Base # :nodoc: + check_class_collision suffix: "ObserverTest" def create_test_files - template 'unit_test.rb', File.join('test/unit', class_path, "#{file_name}_observer_test.rb") + template 'unit_test.rb', File.join('test/models', class_path, "#{file_name}_observer_test.rb") end end end diff --git a/railties/lib/rails/generators/test_unit/performance/performance_generator.rb b/railties/lib/rails/generators/test_unit/performance/performance_generator.rb index 99edda5461..5552edeee4 100644 --- a/railties/lib/rails/generators/test_unit/performance/performance_generator.rb +++ b/railties/lib/rails/generators/test_unit/performance/performance_generator.rb @@ -1,9 +1,9 @@ require 'rails/generators/test_unit' -module TestUnit - module Generators - class PerformanceGenerator < Base - check_class_collision :suffix => "Test" +module TestUnit # :nodoc: + module Generators # :nodoc: + class PerformanceGenerator < Base # :nodoc: + check_class_collision suffix: "Test" def create_test_files template 'performance_test.rb', File.join('test/performance', class_path, "#{file_name}_test.rb") diff --git a/railties/lib/rails/generators/test_unit/performance/templates/performance_test.rb b/railties/lib/rails/generators/test_unit/performance/templates/performance_test.rb index 2f25dcf832..2bcb482d68 100644 --- a/railties/lib/rails/generators/test_unit/performance/templates/performance_test.rb +++ b/railties/lib/rails/generators/test_unit/performance/templates/performance_test.rb @@ -3,8 +3,8 @@ require 'rails/performance_test_help' class <%= class_name %>Test < ActionDispatch::PerformanceTest # Refer to the documentation for all available options - # self.profile_options = { :runs => 5, :metrics => [:wall_time, :memory], - # :output => 'tmp/performance', :formats => [:flat] } + # self.profile_options = { runs: 5, metrics: [:wall_time, :memory], + # output: 'tmp/performance', formats: [:flat] } test "homepage" do get '/' diff --git a/railties/lib/rails/generators/test_unit/plugin/plugin_generator.rb b/railties/lib/rails/generators/test_unit/plugin/plugin_generator.rb index 4d65cd7d89..b5d4f38444 100644 --- a/railties/lib/rails/generators/test_unit/plugin/plugin_generator.rb +++ b/railties/lib/rails/generators/test_unit/plugin/plugin_generator.rb @@ -1,9 +1,9 @@ require 'rails/generators/test_unit' -module TestUnit - module Generators - class PluginGenerator < Base - check_class_collision :suffix => "Test" +module TestUnit # :nodoc: + module Generators # :nodoc: + class PluginGenerator < Base # :nodoc: + check_class_collision suffix: "Test" def create_test_files directory '.', 'test' diff --git a/railties/lib/rails/generators/test_unit/scaffold/scaffold_generator.rb b/railties/lib/rails/generators/test_unit/scaffold/scaffold_generator.rb index ca7fee3b6e..3b4fec2e83 100644 --- a/railties/lib/rails/generators/test_unit/scaffold/scaffold_generator.rb +++ b/railties/lib/rails/generators/test_unit/scaffold/scaffold_generator.rb @@ -1,18 +1,18 @@ require 'rails/generators/test_unit' require 'rails/generators/resource_helpers' -module TestUnit - module Generators - class ScaffoldGenerator < Base +module TestUnit # :nodoc: + module Generators # :nodoc: + class ScaffoldGenerator < Base # :nodoc: include Rails::Generators::ResourceHelpers - check_class_collision :suffix => "ControllerTest" + check_class_collision suffix: "ControllerTest" - argument :attributes, :type => :array, :default => [], :banner => "field:type field:type" + argument :attributes, type: :array, default: [], banner: "field:type field:type" def create_test_files template "functional_test.rb", - File.join("test/functional", controller_class_path, "#{controller_file_name}_controller_test.rb") + File.join("test/controllers", controller_class_path, "#{controller_file_name}_controller_test.rb") end private diff --git a/railties/lib/rails/info_controller.rb b/railties/lib/rails/info_controller.rb index 512803aeac..e94c6a2030 100644 --- a/railties/lib/rails/info_controller.rb +++ b/railties/lib/rails/info_controller.rb @@ -23,7 +23,7 @@ class Rails::InfoController < ActionController::Base def require_local! unless local_request? - render :text => '<p>For security purposes, this information is only available to local requests.</p>', :status => :forbidden + render text: '<p>For security purposes, this information is only available to local requests.</p>', status: :forbidden end end diff --git a/railties/lib/rails/paths.rb b/railties/lib/rails/paths.rb index 3c2210aaf9..8af4130e87 100644 --- a/railties/lib/rails/paths.rb +++ b/railties/lib/rails/paths.rb @@ -5,7 +5,7 @@ module Rails # paths by a Hash like API. It requires you to give a physical path on initialization. # # root = Root.new "/rails" - # root.add "app/controllers", :eager_load => true + # root.add "app/controllers", eager_load: true # # The command above creates a new root object and add "app/controllers" as a path. # This means we can get a <tt>Rails::Paths::Path</tt> object back like below: @@ -26,7 +26,7 @@ module Rails # contains the path with the same path value given to +add+. In some situations, # you may not want this behavior, so you can give :with as option. # - # root.add "config/routes", :with => "config/routes.rb" + # root.add "config/routes", with: "config/routes.rb" # root["config/routes"].inspect # => ["config/routes.rb"] # # The +add+ method accepts the following options as arguments: @@ -52,7 +52,7 @@ module Rails def []=(path, value) glob = self[path] ? self[path].glob : nil - add(path, :with => value, :glob => glob) + add(path, with: value, glob: glob) end def add(path, options={}) @@ -115,7 +115,6 @@ module Rails class Path include Enumerable - attr_reader :path attr_accessor :glob def initialize(root, current, paths, options = {}) diff --git a/railties/lib/rails/rack/logger.rb b/railties/lib/rails/rack/logger.rb index d0d053e7ed..3f59bb8733 100644 --- a/railties/lib/rails/rack/logger.rb +++ b/railties/lib/rails/rack/logger.rb @@ -12,9 +12,6 @@ module Rails def call(env) request = ActionDispatch::Request.new(env) - # Put some space between requests in development logs. - Rails.logger.info "\n\n" if Rails.env.development? - if Rails.logger.respond_to?(:tagged) Rails.logger.tagged(compute_tags(request)) { call_app(request, env) } else @@ -25,6 +22,12 @@ module Rails protected def call_app(request, env) + # Put some space between requests in development logs. + if Rails.env.development? + Rails.logger.info '' + Rails.logger.info '' + end + Rails.logger.info started_request_message(request) @app.call(env) ensure diff --git a/railties/lib/rails/railtie.rb b/railties/lib/rails/railtie.rb index fba685c769..5b454e7f20 100644 --- a/railties/lib/rails/railtie.rb +++ b/railties/lib/rails/railtie.rb @@ -172,7 +172,7 @@ module Rails end end - delegate :railtie_name, :to => "self.class" + delegate :railtie_name, to: "self.class" def config @config ||= Railtie::Configuration.new diff --git a/railties/lib/rails/railtie/configurable.rb b/railties/lib/rails/railtie/configurable.rb index 53796c74cf..1572af0b2a 100644 --- a/railties/lib/rails/railtie/configurable.rb +++ b/railties/lib/rails/railtie/configurable.rb @@ -6,7 +6,7 @@ module Rails extend ActiveSupport::Concern module ClassMethods - delegate :config, :to => :instance + delegate :config, to: :instance def inherited(base) raise "You cannot inherit from a #{self.superclass.name} child" diff --git a/railties/lib/rails/railtie/configuration.rb b/railties/lib/rails/railtie/configuration.rb index 9dc8843887..0cbbf04da2 100644 --- a/railties/lib/rails/railtie/configuration.rb +++ b/railties/lib/rails/railtie/configuration.rb @@ -50,23 +50,23 @@ module Rails # First configurable block to run. Called before any initializers are run. def before_configuration(&block) - ActiveSupport.on_load(:before_configuration, :yield => true, &block) + ActiveSupport.on_load(:before_configuration, yield: true, &block) end # Third configurable block to run. Does not run if +config.cache_classes+ # set to false. def before_eager_load(&block) - ActiveSupport.on_load(:before_eager_load, :yield => true, &block) + ActiveSupport.on_load(:before_eager_load, yield: true, &block) end # Second configurable block to run. Called before frameworks initialize. def before_initialize(&block) - ActiveSupport.on_load(:before_initialize, :yield => true, &block) + ActiveSupport.on_load(:before_initialize, yield: true, &block) end # Last configurable block to run. Called after frameworks initialize. def after_initialize(&block) - ActiveSupport.on_load(:after_initialize, :yield => true, &block) + ActiveSupport.on_load(:after_initialize, yield: true, &block) end # Array of callbacks defined by #to_prepare. diff --git a/railties/lib/rails/source_annotation_extractor.rb b/railties/lib/rails/source_annotation_extractor.rb index 31e34023c0..3474b02af4 100644 --- a/railties/lib/rails/source_annotation_extractor.rb +++ b/railties/lib/rails/source_annotation_extractor.rb @@ -32,9 +32,9 @@ class SourceAnnotationExtractor end # Prints all annotations with tag +tag+ under the root directories +app+, +config+, +lib+, - # +script+, and +test+ (recursively). Only filenames with extension - # +.builder+, +.rb+, +.erb+, +.haml+, +.slim+, +.css+, +.scss+, +.js+, and - # +.coffee+ are taken into account. The +options+ hash is passed to each + # +script+, and +test+ (recursively). Filenames with extension + # +.builder+, +.rb+, +.erb+, +.haml+, +.slim+, +.css+, +.scss+, +.js+, + # +.coffee+, and +.rake+ are taken into account. The +options+ hash is passed to each # annotation's +to_s+. # # This class method is the single entry point for the rake tasks. @@ -56,9 +56,9 @@ class SourceAnnotationExtractor end # Returns a hash that maps filenames under +dir+ (recursively) to arrays - # with their annotations. Only files with annotations are included, and only - # those with extension +.builder+, +.rb+, +.erb+, +.haml+, +.slim+, +.css+, - # +.scss+, +.js+, and +.coffee+ + # with their annotations. Only files with annotations are included. Files + # with extension +.builder+, +.rb+, +.erb+, +.haml+, +.slim+, +.css+, + # +.scss+, +.js+, +.coffee+, and +.rake+ # are taken into account. def find_in(dir) results = {} @@ -68,7 +68,7 @@ class SourceAnnotationExtractor if File.directory?(item) results.update(find_in(item)) - elsif item =~ /\.(builder|rb|coffee)$/ + elsif item =~ /\.(builder|rb|coffee|rake)$/ results.update(extract_annotations_from(item, /#\s*(#{tag}):?\s*(.*)$/)) elsif item =~ /\.(css|scss|js)$/ results.update(extract_annotations_from(item, /\/\/\s*(#{tag}):?\s*(.*)$/)) diff --git a/railties/lib/rails/tasks/annotations.rake b/railties/lib/rails/tasks/annotations.rake index 9067b03d00..386ecf44be 100644 --- a/railties/lib/rails/tasks/annotations.rake +++ b/railties/lib/rails/tasks/annotations.rake @@ -2,7 +2,7 @@ require 'rails/source_annotation_extractor' desc "Enumerate all annotations (use notes:optimize, :fixme, :todo for focus)" task :notes do - SourceAnnotationExtractor.enumerate "OPTIMIZE|FIXME|TODO", :tag => true + SourceAnnotationExtractor.enumerate "OPTIMIZE|FIXME|TODO", tag: true end namespace :notes do diff --git a/railties/lib/rails/tasks/framework.rake b/railties/lib/rails/tasks/framework.rake index f9cff5b627..50499304cb 100644 --- a/railties/lib/rails/tasks/framework.rake +++ b/railties/lib/rails/tasks/framework.rake @@ -1,6 +1,6 @@ namespace :rails do desc "Update configs and some other initially generated files (or use just update:configs, update:scripts, or update:application_controller)" - task :update => [ "update:configs", "update:scripts", "update:application_controller" ] + task update: [ "update:configs", "update:scripts", "update:application_controller" ] desc "Applies the template supplied by LOCATION=(/path/to/template) or URL" task :template do @@ -9,8 +9,8 @@ namespace :rails do template = File.expand_path(template) if template !~ %r{\A[A-Za-z][A-Za-z0-9+\-\.]*://} require 'rails/generators' require 'rails/generators/rails/app/app_generator' - generator = Rails::Generators::AppGenerator.new [Rails.root], {}, :destination_root => Rails.root - generator.apply template, :verbose => false + generator = Rails::Generators::AppGenerator.new [Rails.root], {}, destination_root: Rails.root + generator.apply template, verbose: false end namespace :templates do @@ -44,8 +44,8 @@ namespace :rails do @app_generator ||= begin require 'rails/generators' require 'rails/generators/rails/app/app_generator' - gen = Rails::Generators::AppGenerator.new ["rails"], { :with_dispatchers => true }, - :destination_root => Rails.root + gen = Rails::Generators::AppGenerator.new ["rails"], { with_dispatchers: true }, + destination_root: Rails.root File.exists?(Rails.root.join("config", "application.rb")) ? gen.send(:app_const) : gen.send(:valid_app_const?) gen diff --git a/railties/lib/rails/tasks/middleware.rake b/railties/lib/rails/tasks/middleware.rake index cd35ffb19a..31e961b483 100644 --- a/railties/lib/rails/tasks/middleware.rake +++ b/railties/lib/rails/tasks/middleware.rake @@ -1,5 +1,5 @@ desc 'Prints out your Rack middleware stack' -task :middleware => :environment do +task middleware: :environment do Rails.configuration.middleware.each do |middleware| puts "use #{middleware.inspect}" end diff --git a/railties/lib/rails/tasks/misc.rake b/railties/lib/rails/tasks/misc.rake index 0a9b9ff4ff..4195106961 100644 --- a/railties/lib/rails/tasks/misc.rake +++ b/railties/lib/rails/tasks/misc.rake @@ -5,7 +5,7 @@ task :secret do end desc 'List versions of all Rails frameworks and the environment' -task :about => :environment do +task about: :environment do puts Rails::Info end @@ -26,7 +26,7 @@ namespace :time do require 'active_support' require 'active_support/time' jan_offset = Time.now.beginning_of_year.utc_offset - jul_offset = Time.now.beginning_of_year.change(:month => 7).utc_offset + jul_offset = Time.now.beginning_of_year.change(month: 7).utc_offset offset = jan_offset < jul_offset ? jan_offset : jul_offset build_time_zone_list(:all, offset) end diff --git a/railties/lib/rails/tasks/routes.rake b/railties/lib/rails/tasks/routes.rake index 95f47566ef..676b475640 100644 --- a/railties/lib/rails/tasks/routes.rake +++ b/railties/lib/rails/tasks/routes.rake @@ -1,5 +1,5 @@ desc 'Print out all defined routes in match order, with names. Target specific controller with CONTROLLER=x.' -task :routes => :environment do +task routes: :environment do all_routes = Rails.application.routes.routes require 'action_dispatch/routing/inspector' inspector = ActionDispatch::Routing::RoutesInspector.new diff --git a/railties/lib/rails/tasks/statistics.rake b/railties/lib/rails/tasks/statistics.rake index 67a6d2d2ac..c1674c72ad 100644 --- a/railties/lib/rails/tasks/statistics.rake +++ b/railties/lib/rails/tasks/statistics.rake @@ -6,9 +6,13 @@ STATS_DIRECTORIES = [ %w(Javascripts app/assets/javascripts), %w(Libraries lib/), %w(APIs app/apis), + %w(Controller\ tests test/controllers), + %w(Helper\ tests test/helpers), + %w(Model\ tests test/models), + %w(Mailer\ tests test/mailers), %w(Integration\ tests test/integration), - %w(Functional\ tests test/functional), - %w(Unit\ tests test/unit) + %w(Functional\ tests\ (old) test/functional), + %w(Unit\ tests \ (old) test/unit) ].collect { |name, dir| [ name, "#{Rails.root}/#{dir}" ] }.select { |name, dir| File.directory?(dir) } desc "Report code statistics (KLOCs, etc) from the application" diff --git a/railties/lib/rails/tasks/tmp.rake b/railties/lib/rails/tasks/tmp.rake index 0bb64ced95..116988665f 100644 --- a/railties/lib/rails/tasks/tmp.rake +++ b/railties/lib/rails/tasks/tmp.rake @@ -1,6 +1,6 @@ namespace :tmp do desc "Clear session, cache, and socket files from tmp/ (narrow w/ tmp:sessions:clear, tmp:cache:clear, tmp:sockets:clear)" - task :clear => [ "tmp:sessions:clear", "tmp:cache:clear", "tmp:sockets:clear"] + task clear: [ "tmp:sessions:clear", "tmp:cache:clear", "tmp:sockets:clear"] tmp_dirs = [ 'tmp/sessions', 'tmp/cache', @@ -13,7 +13,7 @@ namespace :tmp do tmp_dirs.each { |d| directory d } desc "Creates tmp directories for sessions, cache, sockets, and pids" - task :create => tmp_dirs + task create: tmp_dirs namespace :sessions do # desc "Clears all files in tmp/sessions" diff --git a/railties/lib/rails/test_help.rb b/railties/lib/rails/test_help.rb index 581ceaf9ce..aed7fd4b14 100644 --- a/railties/lib/rails/test_help.rb +++ b/railties/lib/rails/test_help.rb @@ -7,6 +7,10 @@ require 'active_support/test_case' require 'action_controller/test_case' require 'action_dispatch/testing/integration' +# Config Rails backtrace in tests. +require 'rails/backtrace_cleaner' +MiniTest.backtrace_filter = Rails.backtrace_cleaner + # Enable turn if it is available begin require 'turn' @@ -25,8 +29,8 @@ if defined?(ActiveRecord::Base) ActionDispatch::IntegrationTest.fixture_path = ActiveSupport::TestCase.fixture_path - def create_fixtures(*table_names, &block) - Fixtures.create_fixtures(ActiveSupport::TestCase.fixture_path, table_names, {}, &block) + def create_fixtures(*fixture_set_names, &block) + FixtureSet.create_fixtures(ActiveSupport::TestCase.fixture_path, fixture_set_names, {}, &block) end end diff --git a/railties/lib/rails/test_unit/railtie.rb b/railties/lib/rails/test_unit/railtie.rb index 2b6170ebfb..ed89ce4128 100644 --- a/railties/lib/rails/test_unit/railtie.rb +++ b/railties/lib/rails/test_unit/railtie.rb @@ -1,8 +1,8 @@ module Rails class TestUnitRailtie < Rails::Railtie config.app_generators do |c| - c.test_framework :test_unit, :fixture => true, - :fixture_replacement => nil + c.test_framework :test_unit, fixture: true, + fixture_replacement: nil c.integration_tool :test_unit c.performance_tool :test_unit diff --git a/railties/lib/rails/test_unit/testing.rake b/railties/lib/rails/test_unit/testing.rake index 0de4afe905..cd59fbe599 100644 --- a/railties/lib/rails/test_unit/testing.rake +++ b/railties/lib/rails/test_unit/testing.rake @@ -15,11 +15,11 @@ def recent_tests(source_pattern, test_path, touched_since = 10.minutes.ago) # Support subdirs in app/models and app/controllers modified_test_path = source_dir.length > 2 ? "#{test_path}/" << source_dir[1..source_dir.length].join('/') : test_path - # For modified files in app/ run the tests for it. ex. /test/functional/account_controller.rb + # For modified files in app/ run the tests for it. ex. /test/controllers/account_controller.rb test = "#{modified_test_path}/#{source_file}_test.rb" tests.push test if File.exist?(test) - # For modified files in app, run tests in subdirs too. ex. /test/functional/account/*_test.rb + # For modified files in app, run tests in subdirs too. ex. /test/controllers/account/*_test.rb test = "#{modified_test_path}/#{File.basename(path, '.rb').sub("_controller","")}" FileList["#{test}/*_test.rb"].each { |f| tests.push f } if File.exist?(test) @@ -43,7 +43,7 @@ module Kernel end end -task :default => :test +task default: :test desc 'Runs test:units, test:functionals, test:integration together (also available: test:benchmark, test:profile)' task :test do @@ -61,7 +61,7 @@ namespace :test do Rake::Task[task].invoke nil rescue => e - { :task => task, :exception => e } + { task: task, exception: e } end end.compact @@ -71,10 +71,12 @@ namespace :test do end end - Rake::TestTask.new(:recent => "test:prepare") do |t| + Rake::TestTask.new(recent: "test:prepare") do |t| since = TEST_CHANGES_SINCE touched = FileList['test/**/*_test.rb'].select { |path| File.mtime(path) > since } + + recent_tests('app/models/**/*.rb', 'test/models', since) + recent_tests('app/models/**/*.rb', 'test/unit', since) + + recent_tests('app/controllers/**/*.rb', 'test/controllers', since) + recent_tests('app/controllers/**/*.rb', 'test/functional', since) t.libs << 'test' @@ -82,7 +84,7 @@ namespace :test do end Rake::Task['test:recent'].comment = "Test recent changes" - Rake::TestTask.new(:uncommitted => "test:prepare") do |t| + Rake::TestTask.new(uncommitted: "test:prepare") do |t| def t.file_list if File.directory?(".svn") changed_since_checkin = silence_stderr { `svn status` }.split.map { |path| path.chomp[7 .. -1] } @@ -95,8 +97,10 @@ namespace :test do models = changed_since_checkin.select { |path| path =~ /app[\\\/]models[\\\/].*\.rb$/ } controllers = changed_since_checkin.select { |path| path =~ /app[\\\/]controllers[\\\/].*\.rb$/ } - unit_tests = models.map { |model| "test/unit/#{File.basename(model, '.rb')}_test.rb" } - functional_tests = controllers.map { |controller| "test/functional/#{File.basename(controller, '.rb')}_test.rb" } + unit_tests = models.map { |model| "test/models/#{File.basename(model, '.rb')}_test.rb" } + + models.map { |model| "test/unit/#{File.basename(model, '.rb')}_test.rb" } + + functional_tests = controllers.map { |controller| "test/controllers/#{File.basename(controller, '.rb')}_test.rb" } + + controllers.map { |controller| "test/functional/#{File.basename(controller, '.rb')}_test.rb" } (unit_tests + functional_tests).uniq.select { |file| File.exist?(file) } end @@ -104,32 +108,52 @@ namespace :test do end Rake::Task['test:uncommitted'].comment = "Test changes since last checkin (only Subversion and Git)" - Rake::TestTask.new(:single => "test:prepare") do |t| + Rake::TestTask.new(single: "test:prepare") do |t| t.libs << "test" end - Rails::SubTestTask.new(:units => "test:prepare") do |t| + Rails::SubTestTask.new(models: "test:prepare") do |t| t.libs << "test" - t.pattern = 'test/unit/**/*_test.rb' + t.pattern = 'test/models/**/*_test.rb' end - Rails::SubTestTask.new(:functionals => "test:prepare") do |t| + Rails::SubTestTask.new(helpers: "test:prepare") do |t| t.libs << "test" - t.pattern = 'test/functional/**/*_test.rb' + t.pattern = 'test/helpers/**/*_test.rb' end - Rails::SubTestTask.new(:integration => "test:prepare") do |t| + Rails::SubTestTask.new(units: "test:prepare") do |t| + t.libs << "test" + t.pattern = 'test/{models,helpers,unit}/**/*_test.rb' + end + + Rails::SubTestTask.new(controllers: "test:prepare") do |t| + t.libs << "test" + t.pattern = 'test/controllers/**/*_test.rb' + end + + Rails::SubTestTask.new(mailers: "test:prepare") do |t| + t.libs << "test" + t.pattern = 'test/mailers/**/*_test.rb' + end + + Rails::SubTestTask.new(functionals: "test:prepare") do |t| + t.libs << "test" + t.pattern = 'test/{controllers,mailers,functional}/**/*_test.rb' + end + + Rails::SubTestTask.new(integration: "test:prepare") do |t| t.libs << "test" t.pattern = 'test/integration/**/*_test.rb' end - Rails::SubTestTask.new(:benchmark => 'test:prepare') do |t| + Rails::SubTestTask.new(benchmark: 'test:prepare') do |t| t.libs << 'test' t.pattern = 'test/performance/**/*_test.rb' t.options = '-- --benchmark' end - Rails::SubTestTask.new(:profile => 'test:prepare') do |t| + Rails::SubTestTask.new(profile: 'test:prepare') do |t| t.libs << 'test' t.pattern = 'test/performance/**/*_test.rb' end |