Motivation: I would like to create an "imposter" class that supports the definition of dynamically-defined methods. Once defined, these dynamic methods should be invokable as though they were garden-variety statically-defined methods. Problem: The dynamic methods implemented in the following code (and other work-arounds I've tried) don't seem to exhibit the exact same behavior as their static counterparts. In particular, blocks attached at the point of method invocation don't seem to be detected. Execution Context: ruby 1.8.2 (2004-11-06) [i686-linux] Question: What am I missing? Code: <<-EOS class Imposter def solicit(request) self.class.send(:define_method, request, &Proc.new) end def dull_method puts "dull_method called: block_given?=#{block_given?}" end end imposter = Imposter.new imposter.solicit(:dyno_method) do puts "dyno_method called: block_given?=#{block_given?}" end imposter.dull_method imposter.dull_method { nil } imposter.dyno_method imposter.dyno_method { nil } EOS Output: dull_method called: block_given?=false dull_method called: block_given?=true dyno_method called: block_given?=false dyno_method called: block_given?=false Any explanations would be appreciated! Thanks, Marc