> No, I definitely wouldn't trade an overly-complex method signature for an
> over-complicated constructor signature. As you say, there's no advantage to
> that. 
> 
> What I would do is break the complexity up and spread it across a bunch of
> methods on a class. 

you mean something like:

   class OpenURI::ProgessProc     
     def initialize
       @on_empty = false
       @parameters = [ :pos ]
     end
     def progress_proc=(x)
       @progress_proc= x
     end
     def on_empty=(x)
       @on_empty = (x == true)
     end
     def pass_parameters=(*y)
       @pass_parameters = y
     end
   end
 
so that
 
   progress = OpenURI::Progess.new
   progress.progress_proc = proc { |b, t| ... }
   progress.parameters = [ :pos, :total ]
   progress.on_empty = true
   open(url,progress)
 
i don't know if that's all that helpful either. but maybe it is good if it can be improved.

-t0