aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--actionpack/lib/action_controller/caching/pages.rb4
-rw-r--r--actionpack/lib/action_controller/dispatcher.rb2
-rw-r--r--actionpack/lib/action_controller/rescue.rb2
-rw-r--r--actionpack/lib/action_view/helpers/asset_tag_helper.rb2
-rw-r--r--actionpack/test/controller/rescue_test.rb24
-rw-r--r--activesupport/CHANGELOG2
-rw-r--r--activesupport/lib/active_support/core_ext/time/calculations.rb13
-rw-r--r--activesupport/test/core_ext/time_ext_test.rb55
-rwxr-xr-xpushgems.rb3
-rw-r--r--railties/CHANGELOG2
-rw-r--r--railties/lib/initializer.rb8
11 files changed, 99 insertions, 18 deletions
diff --git a/actionpack/lib/action_controller/caching/pages.rb b/actionpack/lib/action_controller/caching/pages.rb
index 4307f39583..755f1e4e0a 100644
--- a/actionpack/lib/action_controller/caching/pages.rb
+++ b/actionpack/lib/action_controller/caching/pages.rb
@@ -36,7 +36,7 @@ module ActionController #:nodoc:
# == Setting the cache directory
#
# 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_ROOT + "/public".
+ # For Rails, this directory has already been set to Rails.public_path (which is usually set to RAILS_ROOT + "/public").
#
# == Setting the cache extension
#
@@ -46,7 +46,7 @@ module ActionController #:nodoc:
def self.included(base) #:nodoc:
base.extend(ClassMethods)
base.class_eval do
- @@page_cache_directory = defined?(RAILS_ROOT) ? "#{RAILS_ROOT}/public" : ""
+ @@page_cache_directory = defined?(Rails.public_path) ? Rails.public_path : ""
cattr_accessor :page_cache_directory
@@page_cache_extension = '.html'
diff --git a/actionpack/lib/action_controller/dispatcher.rb b/actionpack/lib/action_controller/dispatcher.rb
index 92576bdb2b..30db7d9f73 100644
--- a/actionpack/lib/action_controller/dispatcher.rb
+++ b/actionpack/lib/action_controller/dispatcher.rb
@@ -67,7 +67,7 @@ module ActionController
end
cattr_accessor :error_file_path
- self.error_file_path = "#{::RAILS_ROOT}/public" if defined? ::RAILS_ROOT
+ self.error_file_path = Rails.public_path if defined?(Rails.public_path)
cattr_accessor :unprepared
self.unprepared = true
diff --git a/actionpack/lib/action_controller/rescue.rb b/actionpack/lib/action_controller/rescue.rb
index b91115a93c..f5ad04532b 100644
--- a/actionpack/lib/action_controller/rescue.rb
+++ b/actionpack/lib/action_controller/rescue.rb
@@ -153,7 +153,7 @@ module ActionController #:nodoc:
# If the file doesn't exist, the body of the response will be left empty.
def render_optional_error_file(status_code)
status = interpret_status(status_code)
- path = "#{RAILS_ROOT}/public/#{status[0,3]}.html"
+ path = "#{Rails.public_path}/#{status[0,3]}.html"
if File.exist?(path)
render :file => path, :status => status
else
diff --git a/actionpack/lib/action_view/helpers/asset_tag_helper.rb b/actionpack/lib/action_view/helpers/asset_tag_helper.rb
index 472bd1ae3e..0cce96b184 100644
--- a/actionpack/lib/action_view/helpers/asset_tag_helper.rb
+++ b/actionpack/lib/action_view/helpers/asset_tag_helper.rb
@@ -101,7 +101,7 @@ module ActionView
# something like Live HTTP Headers for Firefox to verify that the cache is indeed working (and that the assets are not being
# requested over and over).
module AssetTagHelper
- ASSETS_DIR = defined?(RAILS_ROOT) ? "#{RAILS_ROOT}/public" : "public"
+ ASSETS_DIR = defined?(Rails.public_path) ? Rails.public_path : "public"
JAVASCRIPTS_DIR = "#{ASSETS_DIR}/javascripts"
STYLESHEETS_DIR = "#{ASSETS_DIR}/stylesheets"
diff --git a/actionpack/test/controller/rescue_test.rb b/actionpack/test/controller/rescue_test.rb
index 55631e0777..011992474f 100644
--- a/actionpack/test/controller/rescue_test.rb
+++ b/actionpack/test/controller/rescue_test.rb
@@ -305,7 +305,9 @@ class RescueTest < Test::Unit::TestCase
def test_not_implemented
with_all_requests_local false do
- head :not_implemented
+ with_rails_public_path(".") do
+ head :not_implemented
+ end
end
assert_response :not_implemented
assert_equal "GET, PUT", @response.headers['Allow']
@@ -313,7 +315,9 @@ class RescueTest < Test::Unit::TestCase
def test_method_not_allowed
with_all_requests_local false do
- get :method_not_allowed
+ with_rails_public_path(".") do
+ get :method_not_allowed
+ end
end
assert_response :method_not_allowed
assert_equal "GET, HEAD, PUT", @response.headers['Allow']
@@ -391,7 +395,19 @@ class RescueTest < Test::Unit::TestCase
@request.remote_addr = old_remote_addr
end
- def with_rails_root(path = nil)
+ def with_rails_public_path(rails_root)
+ old_rails = Object.const_get(:Rails) rescue nil
+ mod = Object.const_set(:Rails, Module.new)
+ (class << mod; self; end).instance_eval do
+ define_method(:public_path) { "#{rails_root}/public" }
+ end
+ yield
+ ensure
+ Object.module_eval { remove_const(:Rails) } if defined?(Rails)
+ Object.const_set(:Rails, old_rails) if old_rails
+ end
+
+ def with_rails_root(path = nil,&block)
old_rails_root = RAILS_ROOT if defined?(RAILS_ROOT)
if path
silence_warnings { Object.const_set(:RAILS_ROOT, path) }
@@ -399,7 +415,7 @@ class RescueTest < Test::Unit::TestCase
Object.remove_const(:RAILS_ROOT) rescue nil
end
- yield
+ with_rails_public_path(path, &block)
ensure
if old_rails_root
diff --git a/activesupport/CHANGELOG b/activesupport/CHANGELOG
index 2c5042c9ef..cfdefed91e 100644
--- a/activesupport/CHANGELOG
+++ b/activesupport/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* Time#since behaves correctly when passed a Duration. Closes #11527 [kemiller]
+
* Add #getutc alias for DateTime#utc [Geoff Buesing]
* Refactor TimeWithZone: don't send #since, #ago, #+, #-, #advance through method_missing [Geoff Buesing]
diff --git a/activesupport/lib/active_support/core_ext/time/calculations.rb b/activesupport/lib/active_support/core_ext/time/calculations.rb
index 0bc83af709..ffbdf37789 100644
--- a/activesupport/lib/active_support/core_ext/time/calculations.rb
+++ b/activesupport/lib/active_support/core_ext/time/calculations.rb
@@ -88,18 +88,21 @@ module ActiveSupport #:nodoc:
end
# Returns a new Time representing the time a number of seconds ago, this is basically a wrapper around the Numeric extension
- # Do not use this method in combination with x.months, use months_ago instead!
def ago(seconds)
self.since(-seconds)
end
# Returns a new Time representing the time a number of seconds since the instance time, this is basically a wrapper around
- # the Numeric extension. Do not use this method in combination with x.months, use months_since instead!
+ # the Numeric extension.
def since(seconds)
- initial_dst = self.dst? ? 1 : 0
f = seconds.since(self)
- final_dst = f.dst? ? 1 : 0
- (seconds.abs >= 86400 && initial_dst != final_dst) ? f + (initial_dst - final_dst).hours : f
+ if ActiveSupport::Duration === seconds
+ f
+ else
+ initial_dst = self.dst? ? 1 : 0
+ final_dst = f.dst? ? 1 : 0
+ (seconds.abs >= 86400 && initial_dst != final_dst) ? f + (initial_dst - final_dst).hours : f
+ end
rescue
self.to_datetime.since(seconds)
end
diff --git a/activesupport/test/core_ext/time_ext_test.rb b/activesupport/test/core_ext/time_ext_test.rb
index d1d92964c3..e53b7193ea 100644
--- a/activesupport/test/core_ext/time_ext_test.rb
+++ b/activesupport/test/core_ext/time_ext_test.rb
@@ -205,6 +205,31 @@ class TimeExtCalculationsTest < Test::Unit::TestCase
end
end
+ def test_daylight_savings_time_crossings_backward_start_1day
+ with_env_tz 'US/Eastern' do
+ # dt: US: 2005 April 3rd 4:18am
+ assert_equal Time.local(2005,4,2,4,18,0), Time.local(2005,4,3,4,18,0).ago(1.day), 'dt-1.day=>st'
+ assert_equal Time.local(2005,4,1,4,18,0), Time.local(2005,4,2,4,18,0).ago(1.day), 'st-1.day=>st'
+ end
+ with_env_tz 'NZ' do
+ # dt: New Zealand: 2006 October 1st 4:18am
+ assert_equal Time.local(2006,9,30,4,18,0), Time.local(2006,10,1,4,18,0).ago(1.day), 'dt-1.day=>st'
+ assert_equal Time.local(2006,9,29,4,18,0), Time.local(2006,9,30,4,18,0).ago(1.day), 'st-1.day=>st'
+ end
+ end
+
+ def test_daylight_savings_time_crossings_backward_end_1day
+ with_env_tz 'US/Eastern' do
+ # st: US: 2005 October 30th 4:03am
+ assert_equal Time.local(2005,10,29,4,3), Time.local(2005,10,30,4,3,0).ago(1.day), 'st-1.day=>dt'
+ assert_equal Time.local(2005,10,28,4,3), Time.local(2005,10,29,4,3,0).ago(1.day), 'dt-1.day=>dt'
+ end
+ with_env_tz 'NZ' do
+ # st: New Zealand: 2006 March 19th 4:03am
+ assert_equal Time.local(2006,3,18,4,3), Time.local(2006,3,19,4,3,0).ago(1.day), 'st-1.day=>dt'
+ assert_equal Time.local(2006,3,17,4,3), Time.local(2006,3,18,4,3,0).ago(1.day), 'dt-1.day=>dt'
+ end
+ end
def test_since
assert_equal Time.local(2005,2,22,10,10,11), Time.local(2005,2,22,10,10,10).since(1)
assert_equal Time.local(2005,2,22,11,10,10), Time.local(2005,2,22,10,10,10).since(3600)
@@ -227,6 +252,19 @@ class TimeExtCalculationsTest < Test::Unit::TestCase
end
end
+ def test_daylight_savings_time_crossings_forward_start_1day
+ with_env_tz 'US/Eastern' do
+ # st: US: 2005 April 2nd 7:27pm
+ assert_equal Time.local(2005,4,3,19,27,0), Time.local(2005,4,2,19,27,0).since(1.day), 'st+1.day=>dt'
+ assert_equal Time.local(2005,4,4,19,27,0), Time.local(2005,4,3,19,27,0).since(1.day), 'dt+1.day=>dt'
+ end
+ with_env_tz 'NZ' do
+ # st: New Zealand: 2006 September 30th 7:27pm
+ assert_equal Time.local(2006,10,1,19,27,0), Time.local(2006,9,30,19,27,0).since(1.day), 'st+1.day=>dt'
+ assert_equal Time.local(2006,10,2,19,27,0), Time.local(2006,10,1,19,27,0).since(1.day), 'dt+1.day=>dt'
+ end
+ end
+
def test_daylight_savings_time_crossings_forward_start_tomorrow
with_env_tz 'US/Eastern' do
# st: US: 2005 April 2nd 7:27pm
@@ -240,7 +278,7 @@ class TimeExtCalculationsTest < Test::Unit::TestCase
end
end
- def test_daylight_savings_time_crossings_forward_start_yesterday
+ def test_daylight_savings_time_crossings_backward_start_yesterday
with_env_tz 'US/Eastern' do
# st: US: 2005 April 2nd 7:27pm
assert_equal Time.local(2005,4,2,19,27,0), Time.local(2005,4,3,19,27,0).yesterday, 'dt-1.day=>st'
@@ -266,6 +304,19 @@ class TimeExtCalculationsTest < Test::Unit::TestCase
end
end
+ def test_daylight_savings_time_crossings_forward_end_1day
+ with_env_tz 'US/Eastern' do
+ # dt: US: 2005 October 30th 12:45am
+ assert_equal Time.local(2005,10,31,0,45,0), Time.local(2005,10,30,0,45,0).since(1.day), 'dt+1.day=>st'
+ assert_equal Time.local(2005,11, 1,0,45,0), Time.local(2005,10,31,0,45,0).since(1.day), 'st+1.day=>st'
+ end
+ with_env_tz 'NZ' do
+ # dt: New Zealand: 2006 March 19th 1:45am
+ assert_equal Time.local(2006,3,20,1,45,0), Time.local(2006,3,19,1,45,0).since(1.day), 'dt+1.day=>st'
+ assert_equal Time.local(2006,3,21,1,45,0), Time.local(2006,3,20,1,45,0).since(1.day), 'st+1.day=>st'
+ end
+ end
+
def test_daylight_savings_time_crossings_forward_end_tomorrow
with_env_tz 'US/Eastern' do
# dt: US: 2005 October 30th 12:45am
@@ -279,7 +330,7 @@ class TimeExtCalculationsTest < Test::Unit::TestCase
end
end
- def test_daylight_savings_time_crossings_forward_end_yesterday
+ def test_daylight_savings_time_crossings_backward_end_yesterday
with_env_tz 'US/Eastern' do
# dt: US: 2005 October 30th 12:45am
assert_equal Time.local(2005,10,30,0,45,0), Time.local(2005,10,31,0,45,0).yesterday, 'st-1.day=>dt'
diff --git a/pushgems.rb b/pushgems.rb
index f90927a80c..6a1f1ffe8f 100755
--- a/pushgems.rb
+++ b/pushgems.rb
@@ -11,5 +11,4 @@ end
else
`cd #{pkg} && rm -rf pkg && rake pgem && cd ..`
end
-end
-
+end \ No newline at end of file
diff --git a/railties/CHANGELOG b/railties/CHANGELOG
index 86b30244ba..a21bfc72dd 100644
--- a/railties/CHANGELOG
+++ b/railties/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* Added Rails.public_path to control where HTML and assets are expected to be loaded from (defaults to Rails.root + "/public") #11581 [nicksieger]
+
* rake time:zones:local finds correct base utc offset for zones in the Southern Hemisphere [Geoff Buesing]
* Don't require rails/gem_builder during rails initialization, it's only needed for the gems:build task. [rick]
diff --git a/railties/lib/initializer.rb b/railties/lib/initializer.rb
index 8a5ca6f91b..18af73fc89 100644
--- a/railties/lib/initializer.rb
+++ b/railties/lib/initializer.rb
@@ -38,6 +38,14 @@ module Rails
def cache
RAILS_CACHE
end
+
+ def public_path
+ @@public_path ||= File.join(self.root, "public")
+ end
+
+ def public_path=(path)
+ @@public_path = path
+ end
end
# The Initializer is responsible for processing the Rails configuration, such