From: Kyung won Cheon [mailto:kdream95 / gmerce.co.kr] 
# class A
#   def aaa
#     puts "called aaa by #{self}"
#     def bbb
#       puts "called bbb by #{self}"
#     end
#   end
# end
# 
# a = A.new
# p a.respond_to?(:bbb)  # => false
# a.aaa
# p a.respond_to?(:bbb)  # => true
# a.bbb

this is faq.

you defined bbb inside aaa, ergo, it will be "defined" until aaa is called, ie you have to call aaa first (just one call will do).
 
# p A.public_instance_methods.grep(/bbb/)  # => ["bbb"]
# 
# a2 = A.new
# a2.bbb
# 
# p a.respond_to?(:ccc)  # => false
# 
# a.instance_eval do
#   def ccc
#     puts "called ccc by #{self}"
#   end
# end

you defined a method "ccc" *only* for the object instance "a", not all the instances of A.

try module_eval or class_eval.

A.module_eval do
  def ccc
    puts "called ccc by #{self}"
  end
end


 
# p a.respond_to?(:ccc)  # => true
# a.ccc
# 
# p A.public_instance_methods.grep(/ccc/)  # => []
# 
# a2.ccc rescue puts $!  # undefined method