def evaluate_template_definitions
      source_code = IO.read(@template_definitions_path)
      begin
        instance_eval(source_code, @template_definitions_path)
      rescue Exception => e
        if e.class == SystemExit # allow exit to happen normally
          raise
        else
          task_definition_error(e)
          puts "\nFull error:"
          raise
        end
      end
    end
def evaluate_template_definitions
      source_code = IO.read(@template_definitions_path)
      begin
        instance_eval(source_code, @template_definitions_path)
      rescue Exception => e
        if e.class == SystemExit # allow exit to happen normally
          raise
        else
          task_definition_error(e)
          puts "\nFull error:"
          raise
        end
      end
    end
All we're doing at this point is saving blocks of code into memory
 The instance_eval provides the task_definition and helper methods as they are part
 of this class.