Size: a a a

2018 August 01

ES

Eugene Shved in Ruby Talks
Есть непонятный казус.
источник

ES

Eugene Shved in Ruby Talks
        begin
         super network_setting_id
       rescue => error
         Rails.logger.error 'Create a record about worker fell!'
         integration_datum.update!(error_message: error.message, fell: true)
         raise error # to errbit
       end
источник

ES

Eugene Shved in Ruby Talks
Когда этот rescue сработает?
источник

ES

Eugene Shved in Ruby Talks
Когда в методе повыше будет эррор?
источник

АД

Антон Дьячук in Ruby Talks
когда в слове super будет русская «е»
источник

АД

Антон Дьячук in Ruby Talks
напиши тест, и все откроется тебе
источник

АД

Антон Дьячук in Ruby Talks
интерпретировать код - работа интертрепатора
источник

ES

Eugene Shved in Ruby Talks
Этот кусок кода метода примешивается к методу класса. Сначала выполняется метод модуля и  
В классе есть rescue который обрабатывает на конкретной ошибке. Если же есть еще одна ошибка, получается он должен обрабатывать другую ошибку здесь.
источник

ES

Eugene Shved in Ruby Talks
Но она не обрабатывается.
источник

АД

Антон Дьячук in Ruby Talks
вот я и говорю, человек просто так глазами не может это интерпретировать
источник

ES

Eugene Shved in Ruby Talks
Ну типо не обрабатывается моими тестами.
     allow(worker_for_fall).to receive(:perform).and_raise(RuntimeError.new(error_message))
источник

АД

Антон Дьячук in Ruby Talks
а без супера?
источник

АД

Антон Дьячук in Ruby Talks
может у тебя там перед еггогом ретурн, откуда нам знать
источник

ES

Eugene Shved in Ruby Talks
Антон Дьячук
а без супера?
Этот код можно джунам показывать на вопросы про prepend include extend.
Я сначала хочу дописать тесты по этой штуке, а потом переписать ее.
Два файла. Метод который вызывается при экстенде враппера выделен урлом.
https://gist.github.com/Evshved/155d6ce2e0ffc36cdd290b1a571000cd#file-integration_wrapper-rb-L13
источник

ES

Eugene Shved in Ruby Talks
Тут немного непонятно, в каком месте должна возникнуть ошибка, чтобы она обработалась во враппере.
источник

ES

Eugene Shved in Ruby Talks
Begin маловат, остается только сам метод в воркере, но стабая вот так:
let(:worker_for_fall) { TakeGoogleAccountsWorker.new }
allow(worker_for_fall).to receive(:perform).and_raise(StandardError.new("error"))
worker_for_fall.perform(network_setting.id)

Он как бэ должен ловиться в rescue враппера, ан нет - вылетает тест с ошибкой.
  1) TakeGoogleAccountsWorker IntegrationsWrapper has one fallen integration datum in database
    Failure/Error: network_setting.update!(error_message: '')
   
    StandardError:
      error
    # ./app/workers/take_google_accounts_worker.rb:15:in `perform'
    # ./lib/wrappers/integrations_wrapper.rb:28:in `block (2 levels) in wrap_network_setting'
    # ./spec/workers/take_google_accounts_spec.rb:38:in `block (3 levels) in <top (required)>'
источник

ES

Eugene Shved in Ruby Talks
Пасаны, у менять services/integration_wrappers/same_name_service.rb
источник

ES

Eugene Shved in Ruby Talks
Как мне эту штуку зарекварить в app/workers/same_name_worker.rb
источник

NB

Nikita Batrak in Ruby Talks
Ну сделай require_relative
источник

NB

Nikita Batrak in Ruby Talks
Че ты, ну
источник