diff options
Diffstat (limited to 'railties/lib')
-rw-r--r-- | railties/lib/commands/plugin.rb | 4 | ||||
-rw-r--r-- | railties/lib/console_app.rb | 1 | ||||
-rw-r--r-- | railties/lib/initializer.rb | 24 | ||||
-rw-r--r-- | railties/lib/rails/backtrace_cleaner.rb | 23 | ||||
-rw-r--r-- | railties/lib/rails/gem_dependency.rb | 11 | ||||
-rw-r--r-- | railties/lib/rails/plugin.rb | 8 | ||||
-rw-r--r-- | railties/lib/rails/plugin/loader.rb | 7 | ||||
-rw-r--r-- | railties/lib/rails/rack/metal.rb | 27 | ||||
-rw-r--r-- | railties/lib/rails/version.rb | 2 | ||||
-rw-r--r-- | railties/lib/rails_generator/commands.rb | 8 | ||||
-rw-r--r-- | railties/lib/rails_generator/generators/applications/app/template_runner.rb | 30 | ||||
-rw-r--r-- | railties/lib/tasks/gems.rake | 7 | ||||
-rw-r--r-- | railties/lib/tasks/testing.rake | 2 |
13 files changed, 120 insertions, 34 deletions
diff --git a/railties/lib/commands/plugin.rb b/railties/lib/commands/plugin.rb index 9ff4739562..a67c2ab447 100644 --- a/railties/lib/commands/plugin.rb +++ b/railties/lib/commands/plugin.rb @@ -278,8 +278,8 @@ class Plugin base_cmd += " #{options[:revision]}" if options[:revision] puts base_cmd if $verbose if system(base_cmd) - puts "removing: .git" if $verbose - rm_rf ".git" + puts "removing: .git .gitignore" if $verbose + rm_rf %w(.git .gitignore) else rm_rf install_path end diff --git a/railties/lib/console_app.rb b/railties/lib/console_app.rb index d7cd57564f..d7d01d703f 100644 --- a/railties/lib/console_app.rb +++ b/railties/lib/console_app.rb @@ -24,6 +24,7 @@ end #reloads the environment def reload! puts "Reloading..." + Dispatcher.cleanup_application Dispatcher.reload_application true end diff --git a/railties/lib/initializer.rb b/railties/lib/initializer.rb index a31ae9422e..edea4e513a 100644 --- a/railties/lib/initializer.rb +++ b/railties/lib/initializer.rb @@ -176,6 +176,9 @@ module Rails # the framework is now fully initialized after_initialize + # Setup database middleware after initializers have run + initialize_database_middleware + # Prepare dispatcher callbacks and run 'prepare' callbacks prepare_dispatcher @@ -410,7 +413,18 @@ Run `rake gems:install` to install the missing gems. if configuration.frameworks.include?(:active_record) ActiveRecord::Base.configurations = configuration.database_configuration ActiveRecord::Base.establish_connection - configuration.middleware.use ActiveRecord::QueryCache + end + end + + def initialize_database_middleware + if configuration.frameworks.include?(:active_record) + if ActionController::Base.session_store == ActiveRecord::SessionStore + configuration.middleware.insert_before :"ActiveRecord::SessionStore", ActiveRecord::ConnectionAdapters::ConnectionManagement + configuration.middleware.insert_before :"ActiveRecord::SessionStore", ActiveRecord::QueryCache + else + configuration.middleware.use ActiveRecord::ConnectionAdapters::ConnectionManagement + configuration.middleware.use ActiveRecord::QueryCache + end end end @@ -545,6 +559,9 @@ Run `rake gems:install` to install the missing gems. end def initialize_metal + Rails::Rack::Metal.requested_metals = configuration.metals + Rails::Rack::Metal.metal_paths += plugin_loader.engine_metal_paths + configuration.middleware.insert_before( :"ActionController::RewindableInput", Rails::Rack::Metal, :if => Rails::Rack::Metal.metals.any?) @@ -699,6 +716,11 @@ Run `rake gems:install` to install the missing gems. @plugins = plugins.nil? ? nil : plugins.map { |p| p.to_sym } end + # The list of metals to load. If this is set to <tt>nil</tt>, all metals will + # be loaded in alphabetical order. If this is set to <tt>[]</tt>, no metals will + # be loaded. Otherwise metals will be loaded in the order specified + attr_accessor :metals + # The path to the root of the plugins directory. By default, it is in # <tt>vendor/plugins</tt>. attr_accessor :plugin_paths diff --git a/railties/lib/rails/backtrace_cleaner.rb b/railties/lib/rails/backtrace_cleaner.rb index e1b422716d..923ed8b31d 100644 --- a/railties/lib/rails/backtrace_cleaner.rb +++ b/railties/lib/rails/backtrace_cleaner.rb @@ -2,15 +2,15 @@ module Rails class BacktraceCleaner < ActiveSupport::BacktraceCleaner ERB_METHOD_SIG = /:in `_run_erb_.*/ - VENDOR_DIRS = %w( vendor/gems vendor/rails ) + RAILS_GEMS = %w( actionpack activerecord actionmailer activesupport activeresource rails ) + + VENDOR_DIRS = %w( vendor/rails ) SERVER_DIRS = %w( lib/mongrel bin/mongrel lib/passenger bin/passenger-spawn-server lib/rack ) RAILS_NOISE = %w( script/server ) RUBY_NOISE = %w( rubygems/custom_require benchmark.rb ) - GEMS_DIR = Gem.default_dir - ALL_NOISE = VENDOR_DIRS + SERVER_DIRS + RAILS_NOISE + RUBY_NOISE def initialize @@ -18,10 +18,25 @@ module Rails add_filter { |line| line.sub("#{RAILS_ROOT}/", '') } add_filter { |line| line.sub(ERB_METHOD_SIG, '') } add_filter { |line| line.sub('./', '/') } # for tests - add_filter { |line| line.sub(/(#{GEMS_DIR})\/gems\/([a-z]+)-([0-9.]+)\/(.*)/, '\2 (\3) \4')} # http://gist.github.com/30430 + + add_gem_filters + add_silencer { |line| ALL_NOISE.any? { |dir| line.include?(dir) } } + add_silencer { |line| RAILS_GEMS.any? { |gem| line =~ /^#{gem} / } } add_silencer { |line| line =~ %r(vendor/plugins/[^\/]+/lib) } end + + + private + def add_gem_filters + Gem.path.each do |path| + # http://gist.github.com/30430 + add_filter { |line| line.sub(/(#{path})\/gems\/([a-z]+)-([0-9.]+)\/(.*)/, '\2 (\3) \4')} + end + + vendor_gems_path = Rails::GemDependency.unpacked_path.sub("#{RAILS_ROOT}/",'') + add_filter { |line| line.sub(/(#{vendor_gems_path})\/([a-z]+)-([0-9.]+)\/(.*)/, '\2 (\3) [v] \4')} + end end # For installing the BacktraceCleaner in the test/unit diff --git a/railties/lib/rails/gem_dependency.rb b/railties/lib/rails/gem_dependency.rb index 5a07841be8..2dd659032f 100644 --- a/railties/lib/rails/gem_dependency.rb +++ b/railties/lib/rails/gem_dependency.rb @@ -72,13 +72,14 @@ module Rails rescue Gem::LoadError end - def dependencies - return [] if framework_gem? - return [] if specification.nil? + def dependencies(options = {}) + return [] if framework_gem? || specification.nil? + all_dependencies = specification.dependencies.map do |dependency| GemDependency.new(dependency.name, :requirement => dependency.version_requirements) end - all_dependencies += all_dependencies.map(&:dependencies).flatten + + all_dependencies += all_dependencies.map { |d| d.dependencies(options) }.flatten if options[:flatten] all_dependencies.uniq end @@ -149,6 +150,8 @@ module Rails end def unpack_to(directory) + return if specification.nil? || File.directory?(gem_dir(directory)) || framework_gem? + FileUtils.mkdir_p directory Dir.chdir directory do Gem::GemRunner.new.run(unpack_command) diff --git a/railties/lib/rails/plugin.rb b/railties/lib/rails/plugin.rb index 4901abe808..80deb73bbb 100644 --- a/railties/lib/rails/plugin.rb +++ b/railties/lib/rails/plugin.rb @@ -80,6 +80,10 @@ module Rails File.join(directory, 'app', 'controllers') end + def metal_path + File.join(directory, 'app', 'metal') + end + def routing_file File.join(directory, 'config', 'routes.rb') end @@ -100,7 +104,7 @@ module Rails def app_paths - [ File.join(directory, 'app', 'models'), File.join(directory, 'app', 'helpers'), controller_path ] + [ File.join(directory, 'app', 'models'), File.join(directory, 'app', 'helpers'), controller_path, metal_path ] end def lib_path @@ -160,4 +164,4 @@ module Rails File.join(directory, 'rails', 'init.rb') end end -end
\ No newline at end of file +end diff --git a/railties/lib/rails/plugin/loader.rb b/railties/lib/rails/plugin/loader.rb index 7f85bb8966..66e01d70da 100644 --- a/railties/lib/rails/plugin/loader.rb +++ b/railties/lib/rails/plugin/loader.rb @@ -65,6 +65,9 @@ module Rails $LOAD_PATH.uniq! end + def engine_metal_paths + engines.collect(&:metal_path) + end protected def configure_engines @@ -178,11 +181,11 @@ module Rails if explicit_plugin_loading_order? if configuration.plugins.detect {|plugin| plugin != :all && !loaded?(plugin) } missing_plugins = configuration.plugins - (plugins.map{|p| p.name.to_sym} + [:all]) - raise LoadError, "Could not locate the following plugins: #{missing_plugins.to_sentence}" + raise LoadError, "Could not locate the following plugins: #{missing_plugins.to_sentence(:locale => :en)}" end end end end end -end
\ No newline at end of file +end diff --git a/railties/lib/rails/rack/metal.rb b/railties/lib/rails/rack/metal.rb index b185227234..78b8a01449 100644 --- a/railties/lib/rails/rack/metal.rb +++ b/railties/lib/rails/rack/metal.rb @@ -6,15 +6,30 @@ module Rails NotFoundResponse = [404, {}, []].freeze NotFound = lambda { NotFoundResponse } + cattr_accessor :metal_paths + self.metal_paths = ["#{Rails.root}/app/metal"] + cattr_accessor :requested_metals + def self.metals - base = "#{Rails.root}/app/metal" - matcher = /\A#{Regexp.escape(base)}\/(.*)\.rb\Z/ + matcher = /#{Regexp.escape('/app/metal/')}(.*)\.rb\Z/ + metal_glob = metal_paths.map{ |base| "#{base}/**/*.rb" } + all_metals = {} - Dir["#{base}/**/*.rb"].sort.map do |file| - file.sub!(matcher, '\1') - require file - file.classify.constantize + metal_glob.each do |glob| + Dir[glob].sort.map do |file| + file = file.match(matcher)[1] + all_metals[file.classify] = file + end end + + load_list = requested_metals || all_metals.keys + + load_list.map do |requested_metal| + if metal = all_metals[requested_metal] + require metal + requested_metal.constantize + end + end.compact end def initialize(app) diff --git a/railties/lib/rails/version.rb b/railties/lib/rails/version.rb index 9bb4b2a96d..fd38705e75 100644 --- a/railties/lib/rails/version.rb +++ b/railties/lib/rails/version.rb @@ -2,7 +2,7 @@ module Rails module VERSION #:nodoc: MAJOR = 2 MINOR = 3 - TINY = 0 + TINY = 1 STRING = [MAJOR, MINOR, TINY].join('.') end diff --git a/railties/lib/rails_generator/commands.rb b/railties/lib/rails_generator/commands.rb index 299044c3d7..b684dc92be 100644 --- a/railties/lib/rails_generator/commands.rb +++ b/railties/lib/rails_generator/commands.rb @@ -182,15 +182,19 @@ HELP nesting = class_name.split('::') name = nesting.pop + # Hack to limit const_defined? to non-inherited on 1.9. + extra = [] + extra << false unless Object.method(:const_defined?).arity == 1 + # Extract the last Module in the nesting. last = nesting.inject(Object) { |last, nest| - break unless last.const_defined?(nest) + break unless last.const_defined?(nest, *extra) last.const_get(nest) } # If the last Module exists, check whether the given # class exists and raise a collision if so. - if last and last.const_defined?(name.camelize) + if last and last.const_defined?(name.camelize, *extra) raise_class_collision(class_name) end end diff --git a/railties/lib/rails_generator/generators/applications/app/template_runner.rb b/railties/lib/rails_generator/generators/applications/app/template_runner.rb index eeb6b17661..73ab57d4f0 100644 --- a/railties/lib/rails_generator/generators/applications/app/template_runner.rb +++ b/railties/lib/rails_generator/generators/applications/app/template_runner.rb @@ -85,6 +85,7 @@ module Rails # Adds an entry into config/environment.rb for the supplied gem : def gem(name, options = {}) log 'gem', name + env = options.delete(:env) gems_code = "config.gem '#{name}'" @@ -93,18 +94,26 @@ module Rails gems_code << ", #{opts}" end - environment gems_code + environment gems_code, :env => env end # Adds a line inside the Initializer block for config/environment.rb. Used by #gem - def environment(data = nil, &block) + # If options :env is specified, the line is appended to the corresponding + # file in config/environments/#{env}.rb + def environment(data = nil, options = {}, &block) sentinel = 'Rails::Initializer.run do |config|' data = block.call if !data && block_given? in_root do - gsub_file 'config/environment.rb', /(#{Regexp.escape(sentinel)})/mi do |match| - "#{match}\n " << data + if options[:env].nil? + gsub_file 'config/environment.rb', /(#{Regexp.escape(sentinel)})/mi do |match| + "#{match}\n " << data + end + else + Array.wrap(options[:env]).each do|env| + append_file "config/environments/#{env}.rb", "\n#{data}" + end end end end @@ -307,7 +316,7 @@ module Rails # def ask(string) log '', string - gets.strip + STDIN.gets.strip end # Do something in the root of the Rails application or @@ -356,6 +365,17 @@ module Rails File.open(path, 'wb') { |file| file.write(content) } end + # Append text to a file + # + # ==== Example + # + # append_file 'config/environments/test.rb', 'config.gem "rspec"' + # + def append_file(relative_destination, data) + path = destination_path(relative_destination) + File.open(path, 'ab') { |file| file.write(data) } + end + def destination_path(relative_destination) File.join(root, relative_destination) end diff --git a/railties/lib/tasks/gems.rake b/railties/lib/tasks/gems.rake index d538e52ca6..0932ba73b5 100644 --- a/railties/lib/tasks/gems.rake +++ b/railties/lib/tasks/gems.rake @@ -47,8 +47,8 @@ namespace :gems do require 'rubygems' require 'rubygems/gem_runner' Rails.configuration.gems.each do |gem| - next unless !gem.frozen? && (ENV['GEM'].blank? || ENV['GEM'] == gem.name) - gem.unpack_to(Rails::GemDependency.unpacked_path) if gem.loaded? + next unless ENV['GEM'].blank? || ENV['GEM'] == gem.name + gem.unpack_to(Rails::GemDependency.unpacked_path) end end @@ -59,8 +59,7 @@ namespace :gems do require 'rubygems/gem_runner' Rails.configuration.gems.each do |gem| next unless ENV['GEM'].blank? || ENV['GEM'] == gem.name - gem.dependencies.each do |dependency| - next if dependency.frozen? + gem.dependencies(:flatten => true).each do |dependency| dependency.unpack_to(Rails::GemDependency.unpacked_path) end end diff --git a/railties/lib/tasks/testing.rake b/railties/lib/tasks/testing.rake index 4242458672..fd5e52a05b 100644 --- a/railties/lib/tasks/testing.rake +++ b/railties/lib/tasks/testing.rake @@ -48,7 +48,7 @@ task :test do task end end.compact - abort "Errors running #{errors.to_sentence}!" if errors.any? + abort "Errors running #{errors.to_sentence(:locale => :en)}!" if errors.any? end namespace :test do |