> If I'm writing some sort of CRM library that I want to share with the > world and have reused, then I should obviously document my interface well, > and not be overly strict about what I accept. Even so, it's very unlikely > that someone else is going to have a class they're using that's > similar-to-but-not-quite my OpenCRM::Customer class. The benefits of a > duck typing attitude are not likely to take root in this system. But I'm > creating a library that is aimed at reuse, so I should allow for reuse. How about a delegator to your Customer class, with some extensions for distributed computing? That's a very common one that can be gotten wrong: Will your type checks work with a dRb proxied object? Ari