this feels really opaque, especially with the magic '1' here ... could we push this down into dsl_eval? I know that would change the semantics so it's not like instance_eval et al, but...seems like it might be worth it.

`new(file).dsl_eval(contents)`

Or even

`new(file).dsl_eval` since the new object has the contents, or can get them