From 4870ff295fd16911c6560176b21c1c0a8c980afd Mon Sep 17 00:00:00 2001 From: Andy Jeffries Date: Fri, 26 Feb 2010 12:44:17 +0000 Subject: [PATCH] Added new public method on Rails which reads it out of the config object wraps it in a Pathname --- actionpack/lib/action_controller/caching/pages.rb | 4 ++-- .../lib/action_controller/metal/compatibility.rb | 2 +- .../action_dispatch/middleware/show_exceptions.rb | 2 +- .../lib/action_view/helpers/asset_tag_helper.rb | 2 +- railties/lib/rails.rb | 6 ++++++ railties/lib/rails/application/configuration.rb | 1 + railties/lib/rails/configuration.rb | 2 +- railties/lib/rails/engine/configuration.rb | 1 + 8 files changed, 14 insertions(+), 6 deletions(-) diff --git a/actionpack/lib/action_controller/caching/pages.rb b/actionpack/lib/action_controller/caching/pages.rb index 5797eee..ff1fc0e 100644 --- a/actionpack/lib/action_controller/caching/pages.rb +++ b/actionpack/lib/action_controller/caching/pages.rb @@ -37,11 +37,11 @@ module ActionController #:nodoc: def self.included(base) #:nodoc: base.extend(ClassMethods) base.class_eval do - @@page_cache_directory = defined?(Rails.public_path) ? Rails.public_path : "" + @@page_cache_directory = defined?(Rails.public) ? Rails.public : "" ## # :singleton-method: # The cache directory should be the document root for the web server and is set using Base.page_cache_directory = "/document/root". - # For Rails, this directory has already been set to Rails.public_path (which is usually set to RAILS_ROOT + "/public"). Changing + # For Rails, this directory has already been set to Rails.public (which is usually set to RAILS_ROOT + "/public"). Changing # this setting can be useful to avoid naming conflicts with files in public/, but doing so will likely require configuring your # web server to look in the new location for cached files. cattr_accessor :page_cache_directory diff --git a/actionpack/lib/action_controller/metal/compatibility.rb b/actionpack/lib/action_controller/metal/compatibility.rb index 2b1ada1..d3aefba 100644 --- a/actionpack/lib/action_controller/metal/compatibility.rb +++ b/actionpack/lib/action_controller/metal/compatibility.rb @@ -37,7 +37,7 @@ module ActionController cattr_accessor :use_accept_header self.use_accept_header = true - self.page_cache_directory = defined?(Rails.public_path) ? Rails.public_path : "" + self.page_cache_directory = defined?(Rails.public) ? Rails.public : "" # Prepends all the URL-generating helpers from AssetHelper. This makes it possible to easily move javascripts, stylesheets, # and images to a dedicated asset server away from the main web server. Example: diff --git a/actionpack/lib/action_dispatch/middleware/show_exceptions.rb b/actionpack/lib/action_dispatch/middleware/show_exceptions.rb index 3bcd004..cc271e5 100644 --- a/actionpack/lib/action_dispatch/middleware/show_exceptions.rb +++ b/actionpack/lib/action_dispatch/middleware/show_exceptions.rb @@ -130,7 +130,7 @@ module ActionDispatch end def public_path - defined?(Rails.public_path) ? Rails.public_path : 'public_path' + defined?(Rails.public) ? Rails.public : 'public' end def log_error(exception) diff --git a/actionpack/lib/action_view/helpers/asset_tag_helper.rb b/actionpack/lib/action_view/helpers/asset_tag_helper.rb index 96976ce..ccc52f4 100644 --- a/actionpack/lib/action_view/helpers/asset_tag_helper.rb +++ b/actionpack/lib/action_view/helpers/asset_tag_helper.rb @@ -133,7 +133,7 @@ module ActionView # change. You can use something like Live HTTP Headers for Firefox to verify # that the cache is indeed working. module AssetTagHelper - assets_dir = defined?(Rails.public_path) ? Rails.public_path : "public" + assets_dir = defined?(Rails.public) ? Rails.public : "public" ActionView::DEFAULT_CONFIG = { :assets_dir => assets_dir, :javascripts_dir => "#{assets_dir}/javascripts", diff --git a/railties/lib/rails.rb b/railties/lib/rails.rb index 3d3151b..3d65655 100644 --- a/railties/lib/rails.rb +++ b/railties/lib/rails.rb @@ -84,7 +84,13 @@ module Rails VERSION::STRING end + def public + application && Pathname.new(application.config.paths.public.to_a.first) + end + def public_path + ActiveSupport::Deprecation.warn "Rails.public_path is deprecated, " << + "please use Rails.public instead", caller @@public_path ||= self.root ? File.join(self.root, "public") : "public" end diff --git a/railties/lib/rails/application/configuration.rb b/railties/lib/rails/application/configuration.rb index d6ad045..19ac03f 100644 --- a/railties/lib/rails/application/configuration.rb +++ b/railties/lib/rails/application/configuration.rb @@ -29,6 +29,7 @@ module Rails paths.config.database "config/database.yml" paths.config.environment "config/environments", :glob => "#{Rails.env}.rb" paths.log "log/#{Rails.env}.log" + paths.public "public" paths.tmp "tmp" paths.tmp.cache "tmp/cache" paths.vendor "vendor", :load_path => true diff --git a/railties/lib/rails/configuration.rb b/railties/lib/rails/configuration.rb index 811c3a9..8c0d3d3 100644 --- a/railties/lib/rails/configuration.rb +++ b/railties/lib/rails/configuration.rb @@ -7,7 +7,7 @@ module Rails module Shared def middleware @@default_middleware_stack ||= ActionDispatch::MiddlewareStack.new.tap do |middleware| - middleware.use('::ActionDispatch::Static', lambda { Rails.public_path }, :if => lambda { Rails.application.config.serve_static_assets }) + middleware.use('::ActionDispatch::Static', lambda { Rails.public }, :if => lambda { Rails.application.config.serve_static_assets }) middleware.use('::Rack::Lock', :if => lambda { !Rails.application.config.allow_concurrency }) middleware.use('::Rack::Runtime') middleware.use('::Rails::Rack::Logger') diff --git a/railties/lib/rails/engine/configuration.rb b/railties/lib/rails/engine/configuration.rb index 93b882f..e7be8e5 100644 --- a/railties/lib/rails/engine/configuration.rb +++ b/railties/lib/rails/engine/configuration.rb @@ -26,6 +26,7 @@ module Rails paths.config.initializers "config/initializers", :glob => "**/*.rb" paths.config.locales "config/locales", :glob => "*.{rb,yml}" paths.config.routes "config/routes.rb" + paths.public "public" paths end end -- 1.7.0