def dsl_eval(dsl, fallback_dsl, *args, &block)
      exec_in_proxy_context(dsl, fallback_dsl, Docile::FallbackContextProxy, *args, &block)
      dsl
    end
def dsl_eval(dsl, fallback_dsl, *args, &block)
      exec_in_proxy_context(dsl, fallback_dsl, Docile::FallbackContextProxy, *args, &block)
      dsl
    end
Execute a block in the context of an object whose methods represent the
 commands in a DSL.

 @note Use with an *imperative* DSL (commands modify the context object)

 Use this method to execute an *imperative* DSL, which means that:

   1. Each command mutates the state of the DSL context object
   2. The return value of each command is ignored
   3. The final return value is the original context object


 @param dsl            [Object] context object whose methods make up the DSL
 @param fallback_dsl   [Object] context object that the DSL should fallback to
 @param args           [Array]  arguments to be passed to the block
 @param block          [Proc]   the block of DSL commands to be executed against the
                                `dsl` context object
 @return               [Object] the `dsl` context object after executing the block