> Or slightly simpler: > DEFAULT_OPTIONS = { ... } > def my_func( arg1, ... argN, options = { } ) > options = DEFAULT_OPTIONS.merge(options) > # ... > end Seems like this is all a bit complicated for what you're doing. I mean - once you do all of this fancy default hash stuff, won't you still have to go look it up in the docs / source every time to see what options are available? Why not just set the parameters for things like rounded edges and fill colors after the fact using method calls on your new object? Granted you won't be able to do it in just one call to new() as you can with the hash, but is that really more clear to an outsider (or *you* later on) looking at your code? Another option (which I'm betting won't be popular here...) would be to have a separate RectangleBuilder class that will make Rectangles for you. You could have multiple methods here that would take reasonable parameter sets based on their name. Just a couple of options I wanted to throw out there. -Ryan