> 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