aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/duration.rb
diff options
context:
space:
mode:
authorDmitriy Kiriyenko <dmitriy.kiriyenko@anahoret.com>2013-11-26 17:03:25 +0200
committerDmitriy Kiriyenko <dmitriy.kiryienko@gmail.com>2013-11-30 15:12:12 +0200
commit8033d3370c56d8d69673c000182922228504706c (patch)
tree1121aab1b2c1292a44f1b64c5e899fc760eab466 /activesupport/lib/active_support/duration.rb
parent61ad8d5c32422c523293428d25277be1759b597c (diff)
downloadrails-8033d3370c56d8d69673c000182922228504706c.tar.gz
rails-8033d3370c56d8d69673c000182922228504706c.tar.bz2
rails-8033d3370c56d8d69673c000182922228504706c.zip
Fix segmentation fault in Ruby 2.0.0-p353.
In Ruby 2.0.0-p353 there was a [commit](https://github.com/ruby/ruby/commit/66915c507777c5e3a978fa73de25db763efd9206) that switched case matching from actual sending `===` method to magic lookup, that does not see it in `method_missing`. It's hard to predict how exactly and when exactly this bug will be solved so here I suggest a solution of defining it in Duration directly. In Ruby 2.0.0-p353 without the added fix added test crashes to segmentation fault.
Diffstat (limited to 'activesupport/lib/active_support/duration.rb')
-rw-r--r--activesupport/lib/active_support/duration.rb8
1 files changed, 8 insertions, 0 deletions
diff --git a/activesupport/lib/active_support/duration.rb b/activesupport/lib/active_support/duration.rb
index 87b6407038..7df4857c25 100644
--- a/activesupport/lib/active_support/duration.rb
+++ b/activesupport/lib/active_support/duration.rb
@@ -99,6 +99,14 @@ module ActiveSupport
private
+ # We define it as a workaround to Ruby 2.0.0-p353 bug.
+ # For more information, check rails/rails#13055.
+ # It should be dropped once a new Ruby patch-level
+ # release after 2.0.0-p353 happens.
+ def ===(other) #:nodoc:
+ value === other
+ end
+
def method_missing(method, *args, &block) #:nodoc:
value.send(method, *args, &block)
end