2015-03-27 24 views
6

Considerare un'app Rack. Ho solo voglia di gestire l'errore se non sono in esecuzione di un test:È possibile utilizzare il salvataggio con un condizionale?

begin 
    do_something 

    if ENV[ 'RACK_ENV' ] != 'test' 
    rescue => error 
     handle_error error 
    end 
    end 
end 

Questo genera syntax error, unexpected keyword_rescue (SyntaxError) rescue => error

C'è un modo per fare questo?

risposta

7

Potresti fare qualcosa del genere?

begin 
    do_something 

rescue => error 
    if ENV["RACK_ENV"] == "test" 
    raise error 
    else 
    handle_error error 
    end 
end 

In questo caso, se non si sta eseguendo il test, si ripristina l'eccezione.

EDIT

Come @Max fa notare, si può essere un po 'più succinta con questo.

begin 
    do_something 

rescue => error 
    raise if ENV["RACK_ENV"] == "test" 

    handle_error error 
end 
+0

Quella era semplice. –

+2

Se si sta rilanciando un'eccezione all'interno di un salvataggio, non è necessario passare un argomento: 'raise if ENV [" RACK_ENV "] ==" test "; handle_error error' – Max

+0

il problema qui è che cambia la posizione dell'errore. – baash05

1

Si può sempre salvare allora poi o gestire o rethrow a seconda della condizione

begin 
    do_something 
rescue => error 
    if ENV['RACK_ENV'] != 'test' 
    handle_error error 
    else 
    raise error 
    end 
end