mirror of
https://github.com/github/rails.git
synced 2026-01-10 07:07:54 -05:00
Make respond_to? work as expected
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@6657 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
@@ -316,6 +316,26 @@ module ActiveResource
|
||||
end
|
||||
self
|
||||
end
|
||||
|
||||
# For checking respond_to? without searching the attributes (which is faster).
|
||||
alias_method :respond_to_without_attributes?, :respond_to?
|
||||
|
||||
# A Person object with a name attribute can ask person.respond_to?("name"), person.respond_to?("name="), and
|
||||
# person.respond_to?("name?") which will all return true.
|
||||
def respond_to?(method, include_priv = false)
|
||||
method_name = method.to_s
|
||||
if attributes.nil?
|
||||
return super
|
||||
elsif attributes.has_key?(method_name)
|
||||
return true
|
||||
elsif ['?','='].include?(method_name.last) && attributes.has_key?(method_name.first(-1))
|
||||
return true
|
||||
end
|
||||
# super must be called at the end of the method, because the inherited respond_to?
|
||||
# would return true for generated readers, even if the attribute wasn't present
|
||||
super
|
||||
end
|
||||
|
||||
|
||||
protected
|
||||
def connection(refresh = false)
|
||||
|
||||
@@ -178,6 +178,14 @@ class BaseTest < Test::Unit::TestCase
|
||||
assert_kind_of Person, matz
|
||||
assert_equal "Matz", matz.name
|
||||
end
|
||||
|
||||
def test_respond_to
|
||||
matz = Person.find(1)
|
||||
assert matz.respond_to?(:name)
|
||||
assert matz.respond_to?(:name=)
|
||||
assert matz.respond_to?(:name?)
|
||||
assert !matz.respond_to?(:java)
|
||||
end
|
||||
|
||||
def test_find_by_id_with_custom_prefix
|
||||
addy = StreetAddress.find(1, :params => { :person_id => 1 })
|
||||
|
||||
Reference in New Issue
Block a user