Generally, I try to avoid eval'ing strings unless it's absolutely needed (e.g. for dynamically defining a method that accepts a block on 1.8.6).

Can this be done without the string eval?

BTW, is the `method_defined? || private_method_defined?` check in place because an error (or some other problem) would occur if we set the visibility here when that expression evaluates to false?  Or is it there simply because it defines the only case where you think we need to set the visibility?

Just wondering if we could simplify by always setting the visibility here rather than doing so conditionally.