2009-09-11 3 views
0

Я написал простой рубиновый камень, чтобы очистить набор веб-сайтов, предоставляя простой API, внутри самого драгоценного камня я включил метод повтора ... чтобы попытаться использовать Hpricot 3 или больше раз при сбое в основном из-за тайм-аутов.Ruby Web API скремблирование/обработка ошибок с помощью Hpricot

def retryable(options = {}, &block) 
    opts = { :tries => 1, :on => Exception }.merge(options) 

    retry_exception, retries = opts[:on], opts[:tries] 

    begin 
    return yield 
    rescue retry_exception 
    retry if (retries -= 1) > 0 
    end 

    yield 
end 

Так что теперь, в мое приложение Rails, который использует этот камень я создал мне интересно, как я должен обрабатывать ошибки должен сам Gem не в состоянии произвести результат, по какой-то причине ...

модели/Available.rb

data = Whatever.find_item_by_id options 
unless hwdata 
    raise "Web error " 
end 

Я не совсем уверен, как справиться с этим ... в этот момент я не очень заботиться о повторе, я только хочу вернуть результат, либо хэш, который в gem возвращает или возвращает false с некоторой ошибкой?

ответ

0

Для нормальных эррос, как и 404, 500 и т. Д., Независимо от того, какой механизм вы используете для получения содержимого веб-сайта, вы будете выкидывать ошибки, по другим причинам Gem должен поднять другие ошибки и сообщить ваше приложение rails, где они может быть обработан, потому что он специфичен для этого приложения.

Gem должен быть как можно более общим, для повторного использования и т. Д.

Смежные вопросы