aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport
diff options
context:
space:
mode:
authorlsylvester <lachlan.sylvester@hypothetical.com.au>2014-08-20 04:56:54 -0200
committerlsylvester <lachlan.sylvester@hypothetical.com.au>2014-09-15 13:59:19 +1000
commitf9767514cbdd6ef38aa62f084059776d75ed6962 (patch)
tree25d622d57c2c02921e0ef527730adc4c6d230ba6 /activesupport
parenta3a8a691b2a826f19d71780b1ba9ffac15eb4f89 (diff)
downloadrails-f9767514cbdd6ef38aa62f084059776d75ed6962.tar.gz
rails-f9767514cbdd6ef38aa62f084059776d75ed6962.tar.bz2
rails-f9767514cbdd6ef38aa62f084059776d75ed6962.zip
add implementation of respond_to? for ActiveSupport::Duration
Diffstat (limited to 'activesupport')
-rw-r--r--activesupport/lib/active_support/duration.rb10
-rw-r--r--activesupport/test/core_ext/duration_test.rb9
-rw-r--r--activesupport/test/core_ext/object/duplicable_test.rb2
3 files changed, 19 insertions, 2 deletions
diff --git a/activesupport/lib/active_support/duration.rb b/activesupport/lib/active_support/duration.rb
index 1a6c02a39b..a54494bc65 100644
--- a/activesupport/lib/active_support/duration.rb
+++ b/activesupport/lib/active_support/duration.rb
@@ -7,7 +7,7 @@ module ActiveSupport
# Time#advance, respectively. It mainly supports the methods on Numeric.
#
# 1.month.ago # equivalent to Time.now.advance(months: -1)
- class Duration < ProxyObject
+ class Duration
attr_accessor :value, :parts
def initialize(value, parts) #:nodoc:
@@ -53,6 +53,10 @@ module ActiveSupport
end
end
+ def to_s
+ @value.to_s
+ end
+
def eql?(other)
other.is_a?(Duration) && self == other
end
@@ -89,6 +93,10 @@ module ActiveSupport
to_i
end
+ def respond_to_missing?(method, include_private=false) #:nodoc
+ @value.respond_to?(method, include_private)
+ end
+
protected
def sum(sign, time = ::Time.current) #:nodoc:
diff --git a/activesupport/test/core_ext/duration_test.rb b/activesupport/test/core_ext/duration_test.rb
index a89202f518..555bde6e04 100644
--- a/activesupport/test/core_ext/duration_test.rb
+++ b/activesupport/test/core_ext/duration_test.rb
@@ -40,6 +40,10 @@ class DurationTest < ActiveSupport::TestCase
assert !(1.day == 'foo')
end
+ def test_to_s
+ assert_equal "1", 1.second.to_s
+ end
+
def test_eql
rubinius_skip "Rubinius' #eql? definition relies on #instance_of? " \
"which behaves oddly for the sake of backward-compatibility."
@@ -183,4 +187,9 @@ class DurationTest < ActiveSupport::TestCase
cased = case 1.day when 1.day then "ok" end
assert_equal cased, "ok"
end
+
+ def test_respond_to
+ assert_respond_to 1.day, :since
+ assert_respond_to 1.day, :zero?
+ end
end
diff --git a/activesupport/test/core_ext/object/duplicable_test.rb b/activesupport/test/core_ext/object/duplicable_test.rb
index 34679cb362..8cc39ae7b9 100644
--- a/activesupport/test/core_ext/object/duplicable_test.rb
+++ b/activesupport/test/core_ext/object/duplicable_test.rb
@@ -4,7 +4,7 @@ require 'active_support/core_ext/object/duplicable'
require 'active_support/core_ext/numeric/time'
class DuplicableTest < ActiveSupport::TestCase
- RAISE_DUP = [nil, false, true, :symbol, 1, 2.3, 5.seconds, method(:puts)]
+ RAISE_DUP = [nil, false, true, :symbol, 1, 2.3, method(:puts)]
ALLOW_DUP = ['1', Object.new, /foo/, [], {}, Time.now, Class.new, Module.new]
# Needed to support Ruby 1.9.x, as it doesn't allow dup on BigDecimal, instead