Sam Roberts wrote:

> I can add as many methods as I want to String, I can even proxy every
> single method in it using #undefined_method (which is as duck-typed as
> you can get) but I still don't think a String object will ever "== =>
> true" to my class.
> 
> Am I right about this?

You need to actually define to_str() (proxying it is not enough as far 
as I can tell) and to implement ==:

"foo" == Class.new { def to_str() end; def ==(other) true end }.new
# => true