Rails - Rubocop - Begin + Rescue синтаксис - PullRequest
0 голосов
/ 11 января 2019

У меня есть следующий код:

  def payload
    begin
      @payload ||= Warden::JWTAuth::TokenDecoder.new.call(token)
    rescue JWT::ExpiredSignature => e
      Rollbar.warning(e)
    end
  end

Из краткого прочтения нескольких блогов, которые я должен использовать, начинайте спасение и заканчивайте, чтобы обработать ошибку, как я делаю выше, однако я получаю избыточное предупреждение "начать" рубокоп.

Начало используется только при указании небольшого количества кода, который может вызвать ошибку в большем блоке? И поэтому здесь избыточно?

Заранее спасибо

РЕДАКТИРОВАТЬ: И если мне это не нужно, это написано как

  def payload
    @payload ||= Warden::JWTAuth::TokenDecoder.new.call(token)
  rescue JWT::ExpiredSignature => e
    Rollbar.warning(e)
  end

?

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Тела метода, блочные тела и лямбда-тела являются неявными блоками исключений. Вам не нужно заключать весь код тела метода, тела блока или тела лямбды в begin / rescue / else / ensure / end блок исключений , поскольку он уже неявно один. Так что, когда у вас есть что-то вроде

def foo
  begin
  rescue
  end
end

или

foo do
  begin
  rescue
  end
end

или

-> do
  begin
  rescue
  end
end

Вы можете заменить его просто

def foo
rescue
end

или эквивалент для блоков и лямбд.

0 голосов
/ 11 января 2019

Сделайте это, когда начало будет первым в вашем методе

def payload
  @payload ||= Warden::JWTAuth::TokenDecoder.new.call(token)
rescue JWT::ExpiredSignature => e
  Rollbar.warning(e)
end
...