public Method

Module.public_method_defined?(p1)

mod.public_method_defined?(symbol)    true or false

Returns true if the named public method is defined by mod (or its included modules and, if mod is a class, its ancestors).

module A
  def method1()  end
end
class B
  protected
  def method2()  end
end
class C < B
  include A
  def method3()  end
end

A.method_defined? :method1           #=> true
C.public_method_defined? "method1"   #=> true
C.public_method_defined? "method2"   #=> false
C.method_defined? "method2"          #=> true

Source Code

/*
*  call-seq:
*     mod.public_method_defined?(symbol)   => true or false
*  
*  Returns +true+ if the named public method is defined by
*  _mod_ (or its included modules and, if _mod_ is a class,
*  its ancestors).
*     
*     module A
*       def method1()  end
*     end
*     class B
*       protected
*       def method2()  end
*     end
*     class C < B
*       include A
*       def method3()  end
*     end
*     
*     A.method_defined? :method1           #=> true
*     C.public_method_defined? "method1"   #=> true
*     C.public_method_defined? "method2"   #=> false
*     C.method_defined? "method2"          #=> true
*/

static VALUE
rb_mod_public_method_defined(mod, mid)
   VALUE mod, mid;
{
   ID id = rb_to_id(mid);
   int noex;

   if (rb_get_method_body(&mod, &id, &noex)) {
       if (VISI_CHECK(noex, NOEX_PUBLIC))
           return Qtrue;
   }
   return Qfalse;
}
Comments

Have your say
Please use Textile formatting (click here for a cheat sheet). Use <code/> and <pre/> for code samples.
Click here to login with OpenID to to post comments.