Skip to content

Commit

Permalink
Ruby 1.8.7 compat: TimeWithZone# and Chars#respond_to? pass along the…
Browse files Browse the repository at this point in the history
… include_private argument
  • Loading branch information
jeremy committed May 31, 2008
1 parent 2243ffd commit 4e4bcb4
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 9 deletions.
12 changes: 7 additions & 5 deletions activesupport/lib/active_support/multibyte/chars.rb
Expand Up @@ -40,13 +40,15 @@ def to_str
# core dumps. Don't go there.
@string
end

# Make duck-typing with String possible
def respond_to?(method)
super || @string.respond_to?(method) || handler.respond_to?(method) ||
(method.to_s =~ /(.*)!/ && handler.respond_to?($1)) || false
def respond_to?(method, include_priv = false)
super || @string.respond_to?(method, include_priv) ||
handler.respond_to?(method, include_priv) ||
(method.to_s =~ /(.*)!/ && handler.respond_to?($1, include_priv)) ||
false
end

# Create a new Chars instance.
def initialize(str)
@string = str.respond_to?(:string) ? str.string : str
Expand Down
8 changes: 4 additions & 4 deletions activesupport/lib/active_support/time_with_zone.rb
Expand Up @@ -248,14 +248,14 @@ def marshal_dump
def marshal_load(variables)
initialize(variables[0], ::Time.send!(:get_zone, variables[1]), variables[2])
end

# Ensure proxy class responds to all methods that underlying time instance responds to.
def respond_to?(sym)
def respond_to?(sym, include_priv = false)
# consistently respond false to acts_like?(:date), regardless of whether #time is a Time or DateTime
return false if sym.to_s == 'acts_like_date?'
super || time.respond_to?(sym)
super || time.respond_to?(sym, include_priv)
end

# Send the missing method to +time+ instance, and wrap result in a new TimeWithZone with the existing +time_zone+.
def method_missing(sym, *args, &block)
result = time.__send__(sym, *args, &block)
Expand Down

0 comments on commit 4e4bcb4

Please sign in to comment.