On Tue, Sep 2, 2008 at 3:00 PM, Jonathan Weiss <[EMAIL PROTECTED]> wrote: >> This is because the definition of :respond_to? checks >> whether @attributes.include?(method_name), but doesn't take attribute >> protection into account. >> > > It doesn't check attributes, it checks the actual methods on the > object. It is independent of Rails.
Well, not really. ActiveRecord does override #respond_to? to take attributes into account (the "actual methods" are defined lazily). >> Foo thus does not abide by the general contract of respond_to?: >> "respond_to?(:baz) returns true if and only if call(:baz) does not >> raise a NoMethodError." > > > Hu? Foo.new *has* a bar method. It just doesn't allow you to set it in > mass-assignment. I agree. The current behavior is the same as the pure-Ruby one: $ irb irb(main):001:0> class Foo irb(main):002:1> def bar irb(main):003:2> end irb(main):004:1> protected :bar irb(main):005:1> end => Foo irb(main):006:0> Foo.new.respond_to? :bar => true --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en -~----------~----~----~----~------~----~------~--~---
