aboutsummaryrefslogtreecommitdiffstats
path: root/railties
diff options
context:
space:
mode:
authorRizwan Reza <rizwanreza@gmail.com>2010-05-17 02:40:15 +0430
committerRizwan Reza <rizwanreza@gmail.com>2010-05-17 02:40:15 +0430
commitd148a6f6ba5f8ee65905f12cd2601fcc377d4852 (patch)
tree4bcb5e7ad47cfb9a9bb14ffe7c9e003d4646d64c /railties
parente1c773006969abea3c0619fbdc7e32c121b6085f (diff)
parent6b4e0cc526f55b5532cf99292c94f0a4db53b16f (diff)
downloadrails-d148a6f6ba5f8ee65905f12cd2601fcc377d4852.tar.gz
rails-d148a6f6ba5f8ee65905f12cd2601fcc377d4852.tar.bz2
rails-d148a6f6ba5f8ee65905f12cd2601fcc377d4852.zip
Merge branch 'master' of git://github.com/rails/rails
Diffstat (limited to 'railties')
-rw-r--r--railties/guides/source/active_record_basics.textile10
-rw-r--r--railties/guides/source/active_support_core_extensions.textile22
-rw-r--r--railties/guides/source/initialization.textile2
-rw-r--r--railties/lib/rails/application.rb9
-rw-r--r--railties/lib/rails/application/bootstrap.rb8
-rw-r--r--railties/lib/rails/application/configuration.rb6
-rw-r--r--railties/lib/rails/application/finisher.rb11
-rw-r--r--railties/lib/rails/configuration.rb31
-rw-r--r--railties/lib/rails/engine.rb34
-rw-r--r--railties/lib/rails/generators/actions.rb3
-rw-r--r--railties/lib/rails/generators/generated_attribute.rb13
-rw-r--r--railties/lib/rails/generators/rails/app/app_generator.rb2
-rw-r--r--railties/lib/rails/generators/test_case.rb12
-rw-r--r--railties/lib/rails/info.rb33
-rw-r--r--railties/lib/rails/railtie.rb3
-rw-r--r--railties/lib/rails/railtie/configuration.rb25
-rw-r--r--railties/lib/rails/tasks/framework.rake22
-rw-r--r--railties/lib/rails/tasks/routes.rake6
-rw-r--r--railties/test/application/initializers/hooks_test.rb (renamed from railties/test/application/initializers/initializers_test.rb)35
-rw-r--r--railties/test/generators/actions_test.rb14
-rw-r--r--railties/test/generators/app_generator_test.rb9
-rw-r--r--railties/test/generators/generated_attribute_test.rb40
-rw-r--r--railties/test/generators_test.rb13
-rw-r--r--railties/test/rails_info_test.rb21
-rw-r--r--railties/test/railties/engine_test.rb26
25 files changed, 271 insertions, 139 deletions
diff --git a/railties/guides/source/active_record_basics.textile b/railties/guides/source/active_record_basics.textile
index 226f1b134b..d81e461e63 100644
--- a/railties/guides/source/active_record_basics.textile
+++ b/railties/guides/source/active_record_basics.textile
@@ -104,6 +104,14 @@ class Product < ActiveRecord::Base
set_table_name "PRODUCT"
end
</ruby>
+If you do so, you will have to define manually the class name that is hosting the fixtures (class_name.yml) using the +set_fixture_class+ method in your test definition:
+<ruby>
+class FunnyJoke < ActiveSupport::TestCase
+ set_fixture_class :funny_jokes => 'Joke'
+ fixtures :funny_jokes
+ ...
+end
+</ruby>
It's also possible to override the column that should be used as the table's primary key. Use the +ActiveRecord::Base.set_primary_key+ method for that:
<ruby>
@@ -201,4 +209,4 @@ Active Record callbacks allow you to attach code to certain events in the life-c
h3. Migrations
-Rails provides a domain-specific language for managing a database schema called migrations. Migrations are stored in files which are executed against any database that Active Record support using rake. Rails keeps track of which files have been committed to the database and provides rollback features. You can learn more about migrations in the "Active Record Migrations guide":migrations.html \ No newline at end of file
+Rails provides a domain-specific language for managing a database schema called migrations. Migrations are stored in files which are executed against any database that Active Record support using rake. Rails keeps track of which files have been committed to the database and provides rollback features. You can learn more about migrations in the "Active Record Migrations guide":migrations.html
diff --git a/railties/guides/source/active_support_core_extensions.textile b/railties/guides/source/active_support_core_extensions.textile
index 72194e567a..08fddd2926 100644
--- a/railties/guides/source/active_support_core_extensions.textile
+++ b/railties/guides/source/active_support_core_extensions.textile
@@ -2660,13 +2660,13 @@ Active Support defines +Date.current+ to be today in the current time zone. That
h5. Named dates
-h6. +last_year+, +next_year+
+h6. +prev_year+, +next_year+
-The methods +last_year+ and +next_year+ return a date with the same day/month in the last or next year:
+In Ruby 1.9 +prev_year+ and +next_year+ return a date with the same day/month in the last or next year:
<ruby>
d = Date.new(2010, 5, 8) # => Sat, 08 May 2010
-d.last_year # => Fri, 08 May 2009
+d.prev_year # => Fri, 08 May 2009
d.next_year # => Sun, 08 May 2011
</ruby>
@@ -2674,29 +2674,33 @@ If date is the 29th of February of a leap year, you obtain the 28th:
<ruby>
d = Date.new(2000, 2, 29) # => Tue, 29 Feb 2000
-d.last_year # => Sun, 28 Feb 1999
+d.prev_year # => Sun, 28 Feb 1999
d.next_year # => Wed, 28 Feb 2001
</ruby>
-h6. +last_month+, +next_month+
+Active Support defines these methods as well for Ruby 1.8.
-The methods +last_month+ and +next_month+ return the date with the same day in the last or next month:
+h6. +prev_month+, +next_month+
+
+In Ruby 1.9 +prev_month+ and +next_month+ return the date with the same day in the last or next month:
<ruby>
d = Date.new(2010, 5, 8) # => Sat, 08 May 2010
-d.last_month # => Thu, 08 Apr 2010
+d.prev_month # => Thu, 08 Apr 2010
d.next_month # => Tue, 08 Jun 2010
</ruby>
If such a day does not exist, the last day of the corresponding month is returned:
<ruby>
-Date.new(2000, 5, 31).last_month # => Sun, 30 Apr 2000
-Date.new(2000, 3, 31).last_month # => Tue, 29 Feb 2000
+Date.new(2000, 5, 31).prev_month # => Sun, 30 Apr 2000
+Date.new(2000, 3, 31).prev_month # => Tue, 29 Feb 2000
Date.new(2000, 5, 31).next_month # => Fri, 30 Jun 2000
Date.new(2000, 1, 31).next_month # => Tue, 29 Feb 2000
</ruby>
+Active Support defines these methods as well for Ruby 1.8.
+
h6. +beginning_of_week+, +end_of_week+
The methods +beginning_of_week+ and +end_of_week+ return the dates for the beginning and end of week, assuming weeks start on Monday:
diff --git a/railties/guides/source/initialization.textile b/railties/guides/source/initialization.textile
index 9ce27fa331..96d6998e1c 100644
--- a/railties/guides/source/initialization.textile
+++ b/railties/guides/source/initialization.textile
@@ -2379,7 +2379,6 @@ Now that we've referenced that class, it will be required for us. You'll notice
* initialize_subscriber
* set_clear_dependencies_hook
* initialize_dependency_mechanism
-* bootstrap_load_path
These are all defined using the +initializer+ method:
@@ -2930,7 +2929,6 @@ With +@@autoloads+ being
* initialize_subscriber
* set_clear_dependencies_hook
* initialize_dependency_mechanism
-* bootstrap_load_path
h4. Active Support Initializers
diff --git a/railties/lib/rails/application.rb b/railties/lib/rails/application.rb
index d39f9a2ae9..a3b3a56bc8 100644
--- a/railties/lib/rails/application.rb
+++ b/railties/lib/rails/application.rb
@@ -12,7 +12,7 @@ module Rails
# points to it.
#
# In other words, Rails::Application is Singleton and whenever you are accessing
- # Rails::Application.config or YourApplication::Application.config, you are actually
+ # Rails::Application.config or YourApplication::Application.config, you are actually
# accessing YourApplication::Application.instance.config.
#
# == Initialization
@@ -40,7 +40,7 @@ module Rails
#
# The Application is also responsible for building the middleware stack and setting up
# both application and engines metals.
- #
+ #
class Application < Engine
autoload :Bootstrap, 'rails/application/bootstrap'
autoload :Configurable, 'rails/application/configurable'
@@ -69,6 +69,7 @@ module Rails
raise "You cannot have more than one Rails::Application" if Rails.application
super
Rails.application = base.instance
+ ActiveSupport.run_load_hooks(:before_configuration, base.instance)
end
def respond_to?(*args)
@@ -82,7 +83,7 @@ module Rails
end
end
- delegate :metal_loader, :to => :config
+ delegate :middleware, :metal_loader, :to => :config
def require_environment!
environment = paths.config.environment.to_a.first
@@ -125,7 +126,7 @@ module Rails
end
def app
- @app ||= middleware.build(routes)
+ @app ||= config.middleware.build(routes)
end
def call(env)
diff --git a/railties/lib/rails/application/bootstrap.rb b/railties/lib/rails/application/bootstrap.rb
index 022e1a91d8..e62eed8a87 100644
--- a/railties/lib/rails/application/bootstrap.rb
+++ b/railties/lib/rails/application/bootstrap.rb
@@ -10,7 +10,8 @@ module Rails
require environment if environment
end
- initializer :load_all_active_support do
+ initializer :load_active_support do
+ require 'active_support/dependencies'
require "active_support/all" unless config.active_support.bare
end
@@ -18,7 +19,6 @@ module Rails
# Used by Passenger to ensure everything's loaded before forking and
# to avoid autoload race conditions in JRuby.
initializer :preload_frameworks do
- require 'active_support/dependencies'
ActiveSupport::Autoload.eager_autoload! if config.preload_frameworks
end
@@ -66,8 +66,8 @@ module Rails
ActiveSupport::Dependencies.mechanism = config.cache_classes ? :require : :load
end
- initializer :bootstrap_load_path do
- # This is just an initializer used as hook so all load paths are loaded together
+ initializer :bootstrap_hook do |app|
+ ActiveSupport.run_load_hooks(:before_initialize, app)
end
end
end
diff --git a/railties/lib/rails/application/configuration.rb b/railties/lib/rails/application/configuration.rb
index 1ad77fdfec..9353fbefef 100644
--- a/railties/lib/rails/application/configuration.rb
+++ b/railties/lib/rails/application/configuration.rb
@@ -33,7 +33,7 @@ module Rails
end
def middleware
- @middleware ||= default_middleware_stack
+ @middleware ||= app_middleware.merge_into(default_middleware_stack)
end
def metal_loader
@@ -150,10 +150,10 @@ module Rails
middleware.use('::ActionDispatch::Cookies')
middleware.use(lambda { session_store }, lambda { session_options })
middleware.use('::ActionDispatch::Flash', :if => lambda { session_store })
- middleware.use(lambda { metal_loader.build_middleware(metals) }, :if => lambda { metal_loader.metals.any? })
- middleware.use('ActionDispatch::ParamsParser')
+ middleware.use('::ActionDispatch::ParamsParser')
middleware.use('::Rack::MethodOverride')
middleware.use('::ActionDispatch::Head')
+ middleware.use(lambda { metal_loader.build_middleware(metals) }, :if => lambda { metal_loader.metals.any? })
end
end
end
diff --git a/railties/lib/rails/application/finisher.rb b/railties/lib/rails/application/finisher.rb
index 94507bb387..fbab4d5515 100644
--- a/railties/lib/rails/application/finisher.rb
+++ b/railties/lib/rails/application/finisher.rb
@@ -35,12 +35,17 @@ module Rails
app
end
- initializer :after_initialize do
- config.after_initialize_blocks.each do |block|
- block.call(self)
+ initializer :eager_load! do
+ if config.cache_classes && !$rails_rake_task
+ ActiveSupport.run_load_hooks(:before_eager_load, self)
+ railties.all(&:eager_load!)
end
end
+ initializer :finisher_hook do
+ ActiveSupport.run_load_hooks(:after_initialize, self)
+ end
+
# Disable dependency loading during request cycle
initializer :disable_dependency_loading do
if config.cache_classes && !config.dependency_loading
diff --git a/railties/lib/rails/configuration.rb b/railties/lib/rails/configuration.rb
index bd404f4a14..ee0fca6592 100644
--- a/railties/lib/rails/configuration.rb
+++ b/railties/lib/rails/configuration.rb
@@ -5,6 +5,37 @@ require 'rails/rack'
module Rails
module Configuration
+ class MiddlewareStackProxy #:nodoc:
+ def initialize
+ @operations = []
+ end
+
+ def insert_before(*args, &block)
+ @operations << [:insert_before, args, block]
+ end
+
+ alias :insert :insert_before
+
+ def insert_after(*args, &block)
+ @operations << [:insert_after, args, block]
+ end
+
+ def swap(*args, &block)
+ @operations << [:swap, args, block]
+ end
+
+ def use(*args, &block)
+ @operations << [:use, args, block]
+ end
+
+ def merge_into(other)
+ @operations.each do |operation, args, block|
+ other.send(operation, *args, &block)
+ end
+ other
+ end
+ end
+
class Generators #:nodoc:
attr_accessor :aliases, :options, :templates, :fallbacks, :colorize_logging
diff --git a/railties/lib/rails/engine.rb b/railties/lib/rails/engine.rb
index ab0ead65a9..b44755820c 100644
--- a/railties/lib/rails/engine.rb
+++ b/railties/lib/rails/engine.rb
@@ -45,7 +45,7 @@ module Rails
# app.middleware.use MyEngine::Middleware
# end
# end
- #
+ #
# == Paths
#
# Since Rails 3.0, both your Application and Engines do not have hardcoded paths.
@@ -125,15 +125,24 @@ module Rails
end
end
- delegate :middleware, :paths, :root, :to => :config
+ delegate :paths, :root, :to => :config
def load_tasks
super
config.paths.lib.tasks.to_a.sort.each { |ext| load(ext) }
end
+ def eager_load!
+ config.eager_load_paths.each do |load_path|
+ matcher = /\A#{Regexp.escape(load_path)}\/(.*)\.rb\Z/
+ Dir.glob("#{load_path}/**/*.rb").sort.each do |file|
+ require_dependency file.sub(matcher, '\1')
+ end
+ end
+ end
+
# Add configured load paths to ruby load paths and remove duplicates.
- initializer :set_load_path, :before => :bootstrap_load_path do
+ initializer :set_load_path, :before => :bootstrap_hook do
config.load_paths.reverse_each do |path|
$LOAD_PATH.unshift(path) if File.directory?(path)
end
@@ -142,7 +151,10 @@ module Rails
# Set the paths from which Rails will automatically load source files,
# and the load_once paths.
- initializer :set_autoload_paths, :before => :bootstrap_load_path do |app|
+ #
+ # 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|
ActiveSupport::Dependencies.load_paths.unshift(*config.load_paths)
if reloadable?(app)
@@ -200,17 +212,9 @@ module Rails
end
end
- initializer :load_app_classes do |app|
- next if $rails_rake_task
-
- if app.config.cache_classes
- config.eager_load_paths.each do |load_path|
- matcher = /\A#{Regexp.escape(load_path)}\/(.*)\.rb\Z/
- Dir.glob("#{load_path}/**/*.rb").sort.each do |file|
- require_dependency file.sub(matcher, '\1')
- end
- end
- end
+ initializer :engines_blank_point do
+ # We need this initializer so all extra initializers added in engines are
+ # consistently executed after all the initializers above across all engines.
end
protected
diff --git a/railties/lib/rails/generators/actions.rb b/railties/lib/rails/generators/actions.rb
index a31932906d..7af329bbf0 100644
--- a/railties/lib/rails/generators/actions.rb
+++ b/railties/lib/rails/generators/actions.rb
@@ -54,7 +54,8 @@ module Rails
name, version = args
# Deal with deprecated options
- { :env => :only, :lib => :require_as }.each do |old, new|
+ { :env => :group, :only => :group,
+ :lib => :require, :require_as => :require }.each do |old, new|
next unless options[old]
options[new] = options.delete(old)
ActiveSupport::Deprecation.warn "#{old.inspect} option in gem is deprecated, use #{new.inspect} instead"
diff --git a/railties/lib/rails/generators/generated_attribute.rb b/railties/lib/rails/generators/generated_attribute.rb
index e962308585..f01934f946 100644
--- a/railties/lib/rails/generators/generated_attribute.rb
+++ b/railties/lib/rails/generators/generated_attribute.rb
@@ -9,12 +9,13 @@ module Rails
def field_type
@field_type ||= case type
- when :integer, :float, :decimal then :text_field
- when :datetime, :timestamp, :time then :datetime_select
- when :date then :date_select
- when :string then :text_field
- when :text then :text_area
- when :boolean then :check_box
+ when :integer, :float, :decimal then :text_field
+ when :time then :time_select
+ when :datetime, :timestamp then :datetime_select
+ when :date then :date_select
+ when :string then :text_field
+ when :text then :text_area
+ when :boolean then :check_box
else
:text_field
end
diff --git a/railties/lib/rails/generators/rails/app/app_generator.rb b/railties/lib/rails/generators/rails/app/app_generator.rb
index 0a0b033738..ee44acc2fa 100644
--- a/railties/lib/rails/generators/rails/app/app_generator.rb
+++ b/railties/lib/rails/generators/rails/app/app_generator.rb
@@ -149,7 +149,7 @@ module Rails
# can change in Ruby 1.8.7 when we FileUtils.cd.
RAILS_DEV_PATH = File.expand_path("../../../../../..", File.dirname(__FILE__))
- RESERVED_NAMES = %w[generate console server dbconsole
+ RESERVED_NAMES = %w[generate g console c server s dbconsole db
application destroy benchmarker profiler
plugin runner test]
diff --git a/railties/lib/rails/generators/test_case.rb b/railties/lib/rails/generators/test_case.rb
index 6b97c69d8d..952400e049 100644
--- a/railties/lib/rails/generators/test_case.rb
+++ b/railties/lib/rails/generators/test_case.rb
@@ -189,6 +189,18 @@ module Rails
end
alias :assert_method :assert_instance_method
+ # Asserts the given field name gets translated to an attribute type
+ # properly.
+ #
+ # assert_field_type :date, :date_select
+ #
+ def assert_field_type(name, attribute_type)
+ assert_equal(
+ Rails::Generators::GeneratedAttribute.new('test', name.to_s).field_type,
+ attribute_type
+ )
+ end
+
# Runs the generator configured for this class. The first argument is an array like
# command line arguments:
#
diff --git a/railties/lib/rails/info.rb b/railties/lib/rails/info.rb
index 5a496f6536..e9c3ebe685 100644
--- a/railties/lib/rails/info.rb
+++ b/railties/lib/rails/info.rb
@@ -35,20 +35,6 @@ module Rails
end
end
- def edge_rails_revision(info = git_info)
- info[/commit ([a-z0-9-]+)/, 1] || freeze_edge_version
- end
-
- def freeze_edge_version
- if File.exist?(rails_vendor_root)
- begin
- Dir[File.join(rails_vendor_root, 'REVISION_*')].first.scan(/_(\d+)$/).first.first
- rescue
- Dir[File.join(rails_vendor_root, 'TAG_*')].first.scan(/_(.+)$/).first.first rescue 'unknown'
- end
- end
- end
-
def to_s
column_width = properties.names.map {|name| name.length}.max
info = properties.map do |name, value|
@@ -75,20 +61,6 @@ module Rails
table << '</table>'
end
end
-
- protected
- def rails_vendor_root
- @rails_vendor_root ||= "#{Rails.root}/vendor/rails"
- end
-
- def git_info
- env_lang, ENV['LC_ALL'] = ENV['LC_ALL'], 'C'
- Dir.chdir(rails_vendor_root) do
- silence_stderr { `git log -n 1` }
- end
- ensure
- ENV['LC_ALL'] = env_lang
- end
end
# The Ruby version and platform, e.g. "1.8.2 (powerpc-darwin8.2.0)".
@@ -120,11 +92,6 @@ module Rails
Rails.configuration.middleware.active.map(&:inspect)
end
- # The Rails Git revision, if it's checked out into vendor/rails.
- property 'Edge Rails revision' do
- edge_rails_revision
- end
-
# The application's location on the filesystem.
property 'Application root' do
File.expand_path(Rails.root)
diff --git a/railties/lib/rails/railtie.rb b/railties/lib/rails/railtie.rb
index b6b57bc5b5..1dba6e1538 100644
--- a/railties/lib/rails/railtie.rb
+++ b/railties/lib/rails/railtie.rb
@@ -197,6 +197,9 @@ module Rails
end
end
+ def eager_load!
+ end
+
def rake_tasks
self.class.rake_tasks
end
diff --git a/railties/lib/rails/railtie/configuration.rb b/railties/lib/rails/railtie/configuration.rb
index 16eccaccc4..4e6f94c534 100644
--- a/railties/lib/rails/railtie/configuration.rb
+++ b/railties/lib/rails/railtie/configuration.rb
@@ -7,6 +7,15 @@ module Rails
@@options ||= {}
end
+ # This allows you to modify the application's middlewares from Engines.
+ #
+ # All operations you run on the app_middleware will be replayed on the
+ # application once it is defined and the default_middlewares are
+ # created
+ def app_middleware
+ @@app_middleware ||= Rails::Configuration::MiddlewareStackProxy.new
+ end
+
# Holds generators configuration:
#
# config.generators do |g|
@@ -28,12 +37,20 @@ module Rails
end
end
- def after_initialize_blocks
- @@after_initialize_blocks ||= []
+ def before_configuration(&block)
+ ActiveSupport.on_load(:before_configuration, :yield => true, &block)
+ end
+
+ def before_eager_load(&block)
+ ActiveSupport.on_load(:before_eager_load, :yield => true, &block)
+ end
+
+ def before_initialize(&block)
+ ActiveSupport.on_load(:before_initialize, :yield => true, &block)
end
- def after_initialize(&blk)
- after_initialize_blocks << blk if blk
+ def after_initialize(&block)
+ ActiveSupport.on_load(:after_initialize, :yield => true, &block)
end
def to_prepare_blocks
diff --git a/railties/lib/rails/tasks/framework.rake b/railties/lib/rails/tasks/framework.rake
index 738f7f5301..063a393bfc 100644
--- a/railties/lib/rails/tasks/framework.rake
+++ b/railties/lib/rails/tasks/framework.rake
@@ -30,6 +30,28 @@ namespace :rails do
generator.apply template, :verbose => false
end
+ namespace :templates do
+ desc "Copy all the templates from rails to the application directory for customization. Already existing local copies will be overwritten"
+ task :copy do
+ generators_lib = File.expand_path("../../generators", __FILE__)
+ project_templates = "#{Rails.root}/lib/templates"
+
+ default_templates = { "erb" => %w{controller mailer scaffold},
+ "rails" => %w{controller helper metal scaffold_controller stylesheets} }
+
+ default_templates.each do |type, names|
+ local_template_type_dir = File.join(project_templates, type)
+ FileUtils.mkdir_p local_template_type_dir
+
+ names.each do |name|
+ dst_name = File.join(local_template_type_dir, name)
+ src_name = File.join(generators_lib, type, name, "templates")
+ FileUtils.cp_r src_name, dst_name
+ end
+ end
+ end
+ end
+
namespace :update do
def invoke_from_app_generator(method)
app_generator.invoke(method)
diff --git a/railties/lib/rails/tasks/routes.rake b/railties/lib/rails/tasks/routes.rake
index 42e01d5e51..41619bc1f8 100644
--- a/railties/lib/rails/tasks/routes.rake
+++ b/railties/lib/rails/tasks/routes.rake
@@ -3,7 +3,11 @@ task :routes => :environment do
Rails::Application.reload_routes!
all_routes = ENV['CONTROLLER'] ? Rails.application.routes.routes.select { |route| route.defaults[:controller] == ENV['CONTROLLER'] } : Rails.application.routes.routes
routes = all_routes.collect do |route|
- name = Rails.application.routes.named_routes.routes.index(route).to_s
+ # TODO: The :index method is deprecated in 1.9 in favor of :key
+ # but we don't have :key in 1.8.7. We can remove this check when
+ # stop supporting 1.8.x
+ key_method = Hash.method_defined?('key') ? 'key' : 'index'
+ name = Rails.application.routes.named_routes.routes.send(key_method, route).to_s
reqs = route.requirements.empty? ? "" : route.requirements.inspect
{:name => name, :verb => route.verb.to_s, :path => route.path, :reqs => reqs}
end
diff --git a/railties/test/application/initializers/initializers_test.rb b/railties/test/application/initializers/hooks_test.rb
index 2e6a707175..198abbe861 100644
--- a/railties/test/application/initializers/initializers_test.rb
+++ b/railties/test/application/initializers/hooks_test.rb
@@ -16,29 +16,34 @@ module ApplicationTests
assert $foo
end
- test "after_initialize block works correctly" do
+ test "hooks block works correctly without cache classes (before_eager_load is not called)" do
add_to_config <<-RUBY
+ $initialization_callbacks = []
config.root = "#{app_path}"
- config.after_initialize { $test_after_initialize_block1 = "success" }
- config.after_initialize { $test_after_initialize_block2 = "congratulations" }
+ config.cache_classes = false
+ config.before_configuration { $initialization_callbacks << 1 }
+ config.before_initialize { $initialization_callbacks << 2 }
+ config.before_eager_load { Boom }
+ config.after_initialize { $initialization_callbacks << 3 }
RUBY
- require "#{app_path}/config/environment"
- assert_equal "success", $test_after_initialize_block1
- assert_equal "congratulations", $test_after_initialize_block2
+ require "#{app_path}/config/environment"
+ assert_equal [1,2,3], $initialization_callbacks
end
- test "after_initialize block works correctly when no block is passed" do
+ test "hooks block works correctly with cache classes" do
add_to_config <<-RUBY
+ $initialization_callbacks = []
config.root = "#{app_path}"
- config.after_initialize { $test_after_initialize_block1 = "success" }
- config.after_initialize # don't pass a block, this is what we're testing!
- config.after_initialize { $test_after_initialize_block2 = "congratulations" }
+ config.cache_classes = true
+ config.before_configuration { $initialization_callbacks << 1 }
+ config.before_initialize { $initialization_callbacks << 2 }
+ config.before_eager_load { $initialization_callbacks << 3 }
+ config.after_initialize { $initialization_callbacks << 4 }
RUBY
- require "#{app_path}/config/environment"
- assert_equal "success", $test_after_initialize_block1
- assert_equal "congratulations", $test_after_initialize_block2
+ require "#{app_path}/config/environment"
+ assert_equal [1,2,3,4], $initialization_callbacks
end
test "after_initialize runs after frameworks have been initialized" do
@@ -61,7 +66,7 @@ module ApplicationTests
RUBY
require "#{app_path}/config/environment"
- assert [:to_prepare, :after_initialize], $order
+ assert_equal [:to_prepare, :after_initialize], $order
end
test "after_initialize happens after to_prepare in production" do
@@ -75,7 +80,7 @@ module ApplicationTests
require "#{app_path}/config/application"
Rails.env.replace "production"
require "#{app_path}/config/environment"
- assert [:to_prepare, :after_initialize], $order
+ assert_equal [:to_prepare, :after_initialize], $order
end
end
end
diff --git a/railties/test/generators/actions_test.rb b/railties/test/generators/actions_test.rb
index e6fab93a87..65fbf61902 100644
--- a/railties/test/generators/actions_test.rb
+++ b/railties/test/generators/actions_test.rb
@@ -86,8 +86,13 @@ class ActionsTest < Rails::Generators::TestCase
action :gem, 'mislav-will-paginate', :lib => 'will-paginate', :source => 'http://gems.github.com'
end
- assert_file 'Gemfile', /gem "mislav\-will\-paginate", :require_as => "will\-paginate"/
+ assert_deprecated do
+ action :gem, 'thoughtbot-factory_girl', :require_as => 'factory_girl', :source => 'http://gems.github.com'
+ end
+
+ assert_file 'Gemfile', /gem "mislav\-will\-paginate", :require => "will\-paginate"/
assert_file 'Gemfile', /source "http:\/\/gems\.github\.com"/
+ assert_file 'Gemfile', /gem "thoughtbot-factory_girl", :require => "factory_girl"/
end
def test_gem_with_env_should_include_all_dependencies_in_gemfile
@@ -97,7 +102,12 @@ class ActionsTest < Rails::Generators::TestCase
action :gem, 'rspec', :env => %w(development test)
end
- assert_file 'Gemfile', /gem "rspec", :only => \["development", "test"\]/
+ assert_deprecated do
+ action :gem, 'rspec-rails', :only => %w(development test)
+ end
+
+ assert_file 'Gemfile', /gem "rspec", :group => \["development", "test"\]/
+ assert_file 'Gemfile', /gem "rspec-rails", :group => \["development", "test"\]/
end
def test_gem_with_version_should_include_version_in_gemfile
diff --git a/railties/test/generators/app_generator_test.rb b/railties/test/generators/app_generator_test.rb
index 8743defe82..3975a39ab1 100644
--- a/railties/test/generators/app_generator_test.rb
+++ b/railties/test/generators/app_generator_test.rb
@@ -70,8 +70,13 @@ class AppGeneratorTest < Rails::Generators::TestCase
end
def test_name_collision_raises_an_error
- content = capture(:stderr){ run_generator [File.join(destination_root, "generate")] }
- assert_equal "Invalid application name generate. Please give a name which does not match one of the reserved rails words.\n", content
+ reserved_words = %w[generate g console c server s dbconsole db
+ application destroy benchmarker profiler
+ plugin runner test]
+ reserved_words.each do |reserved|
+ content = capture(:stderr){ run_generator [File.join(destination_root, reserved)] }
+ assert_equal "Invalid application name #{reserved}. Please give a name which does not match one of the reserved rails words.\n", content
+ end
end
def test_invalid_database_option_raises_an_error
diff --git a/railties/test/generators/generated_attribute_test.rb b/railties/test/generators/generated_attribute_test.rb
new file mode 100644
index 0000000000..dacb06fb13
--- /dev/null
+++ b/railties/test/generators/generated_attribute_test.rb
@@ -0,0 +1,40 @@
+require 'generators/generators_test_helper'
+require 'rails/generators/generated_attribute'
+
+class GeneratedAttributeTest < Rails::Generators::TestCase
+ include GeneratorsTestHelper
+
+ def test_field_type_returns_text_field
+ %w(integer float decimal string).each do |name|
+ assert_field_type name, :text_field
+ end
+ end
+
+ def test_field_type_returns_datetime_select
+ %w(datetime timestamp).each do |name|
+ assert_field_type name, :datetime_select
+ end
+ end
+
+ def test_field_type_returns_time_select
+ assert_field_type 'time', :time_select
+ end
+
+ def test_field_type_returns_date_select
+ assert_field_type 'date', :date_select
+ end
+
+ def test_field_type_returns_text_area
+ assert_field_type 'text', :text_area
+ end
+
+ def test_field_type_returns_check_box
+ assert_field_type 'boolean', :check_box
+ end
+
+ def test_field_type_with_unknown_type_returns_text_field
+ %w(foo bar baz).each do |name|
+ assert_field_type name, :text_field
+ end
+ end
+end
diff --git a/railties/test/generators_test.rb b/railties/test/generators_test.rb
index 16f8f43b99..74a09d4bde 100644
--- a/railties/test/generators_test.rb
+++ b/railties/test/generators_test.rb
@@ -108,21 +108,10 @@ class GeneratorsTest < Rails::Generators::TestCase
assert_match /^ fixjour$/, output
end
- def test_rails_generators_does_not_show_activerecord_info_if_its_the_default
- output = capture(:stdout){ Rails::Generators.help }
- assert_no_match /ActiveRecord:/, output
- assert_no_match /^ active_record:model$/, output
- assert_no_match /^ active_record:fixjour$/, output
- end
-
- def test_rails_generators_shows_activerecord_info_if_its_not_the_default
- Rails::Generators.options[:rails][:orm] = :data_mapper
+ def test_rails_generators_does_not_show_activerecord_hooks
output = capture(:stdout){ Rails::Generators.help }
assert_match /ActiveRecord:/, output
- assert_match /^ active_record:model$/, output
assert_match /^ active_record:fixjour$/, output
- ensure
- Rails::Generators.options[:rails][:orm] = :active_record
end
def test_no_color_sets_proper_shell
diff --git a/railties/test/rails_info_test.rb b/railties/test/rails_info_test.rb
index fc28d7e912..1da66062aa 100644
--- a/railties/test/rails_info_test.rb
+++ b/railties/test/rails_info_test.rb
@@ -14,27 +14,6 @@ class InfoTest < ActiveSupport::TestCase
silence_warnings { load 'rails/info.rb' }
end
- def test_edge_rails_revision_not_set_when_svn_info_is_empty
- Rails::Info.property 'Test that this will not be defined' do
- Rails::Info.edge_rails_revision ''
- end
- assert !property_defined?('Test that this will not be defined')
- end
-
- def test_edge_rails_revision_extracted_from_svn_info
- Rails::Info.property 'Test Edge Rails revision' do
- Rails::Info.edge_rails_revision <<-EOS
- commit 420c4b3d8878156d04f45e47050ddc62ae00c68c
- Author: David Heinemeier Hansson <david@loudthinking.com>
- Date: Sun Apr 13 17:33:27 2008 -0500
-
- Added Rails.public_path to control where HTML and assets are expected to be loaded from
-EOS
- end
-
- assert_property 'Test Edge Rails revision', '420c4b3d8878156d04f45e47050ddc62ae00c68c'
- end
-
def test_property_with_block_swallows_exceptions_and_ignores_property
assert_nothing_raised do
Rails::Info.module_eval do
diff --git a/railties/test/railties/engine_test.rb b/railties/test/railties/engine_test.rb
index 40ac11fa03..b3f65fd00d 100644
--- a/railties/test/railties/engine_test.rb
+++ b/railties/test/railties/engine_test.rb
@@ -28,5 +28,31 @@ module RailtiesTest
boot_rails
assert !Rails::Engine.respond_to?(:config)
end
+
+ test "initializers are executed after application configuration initializers" do
+ @plugin.write "lib/bukkits.rb", <<-RUBY
+ class Bukkits
+ class Engine < ::Rails::Engine
+ initializer "dummy_initializer" do
+ end
+ end
+ end
+ RUBY
+
+ boot_rails
+
+ initializers = Rails.application.initializers
+ index = initializers.index { |i| i.name == "dummy_initializer" }
+ selection = initializers[(index-3)..(index)].map(&:name).map(&:to_s)
+
+ assert_equal %w(
+ load_config_initializers
+ load_config_initializers
+ engines_blank_point
+ dummy_initializer
+ ), selection
+
+ assert index < initializers.index { |i| i.name == :build_middleware_stack }
+ end
end
end