Size: a a a

Saint P Ruby Community

2020 January 28

K

Kirill in Saint P Ruby Community
new('4032') ага и там уже собирает и локали и формат ответа?
источник

IM

Igor Morozov in Saint P Ruby Community
Mikhail Sytchev
ну тут ты должен проектировать свои классы, чтобы они могли аргумент перепаковывать и принимать на верхнем уровне, а язык нам дает возможность прозрачно это делать на любом уровне
да зачем, у тебя в языке есть массивы и хеши. не нужно ничего проектировать
источник

MS

Mikhail Sytchev in Saint P Ruby Community
ну лан лан
источник

MS

Mikhail Sytchev in Saint P Ruby Community
все =)
источник

IM

Igor Morozov in Saint P Ruby Community
ты даже в исключение засовываешь массив обычно ж
источник

RR

Ruslan Ryabov in Saint P Ruby Community
Kirill
new('4032') ага и там уже собирает и локали и формат ответа?
определен метод to_s и он уже генерит строку, либо можно получить хешом, через другой метод. Презентор просто дергает этот метод, перед отправкой в json
источник

K

Kirill in Saint P Ruby Community
Ruslan Ryabov
не, у нас нет генераторов, просто переопределен конструктор на то чтобы принимал def initialize(error_code = nil, extra_data = nil)

а классы вида

module Payment
 class InvalidPaymentMethodError < BaseAppError
   def self.build
     new('4032')
   end
 end
end
просто подумал что генерит прям такой класс само, а то ты сказал что у вас 110, я насчитал уже 72 не считая вложенности, значит мне придется копипастить кучу классов одинаковых, меняя названия
источник

K

Kirill in Saint P Ruby Community
Igor Morozov
а тут и без монад можно

я могу из функции возвращать тапл: return [:fail, user, :does_not_exist]

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

IM

Igor Morozov in Saint P Ruby Community
Kirill
а я против такого, если вход вызывает ошибки из-за сложности логики, то строить еще и такой же выход вместо обычного обрыва программы уже перебор
а что такое обычный обрыв программы?
источник

A

Alex in Saint P Ruby Community
@mimikadze допишу предыдущее сообщение.

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

Т.е. нужно различать, например, ситуацию когда мы валидируем пользовательский ввод и этот ввод не удовлетворяет условиям выполнения операции и ситуацию, когда у нас лажа на уровне консистентности данных, в процессе выполнения бизнес-транзакции (например в процессе выполнения оформленного заказа выяснилось, что на складе не хватает товара).

Первая ситуация — штатная, не является ошибкой и не требует исключения. Вторая является и требует.
источник

IM

Igor Morozov in Saint P Ruby Community
мне казалось, что возврат функции — максимально стандартное явление для любых языков

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

K

Kirill in Saint P Ruby Community
Igor Morozov
а что такое обычный обрыв программы?
выпали по эксепшену и забыли
источник

IM

Igor Morozov in Saint P Ruby Community
ну в конце-концов, программа заканчивается ретурном, а не эксцепшеном
источник

RR

Ruslan Ryabov in Saint P Ruby Community
Kirill
просто подумал что генерит прям такой класс само, а то ты сказал что у вас 110, я насчитал уже 72 не считая вложенности, значит мне придется копипастить кучу классов одинаковых, меняя названия
так и выйдет.. если каждый под свой случай. Мы сначала использовали 1 класс на несколько типо ошибок и передавали ему код снаружи, потом ушли от этого для большей читабельности
источник

K

Kirill in Saint P Ruby Community
а то получается модуль А - модуль Б - модуль Д(тут че то сломалось, мы обработали и пустили ответ назад) - модуль Б(тут тоже че то обработали и потом выше) - модуль А  - это слишком для моих мозгов
источник

K

Kirill in Saint P Ruby Community
Ruslan Ryabov
так и выйдет.. если каждый под свой случай. Мы сначала использовали 1 класс на несколько типо ошибок и передавали ему код снаружи, потом ушли от этого для большей читабельности
вот я так начал писать, но понял, что я нехочу по коду гонять ключи ошибок и решил выносить ка ку вас с классами
источник

IM

Igor Morozov in Saint P Ruby Community
Kirill
а то получается модуль А - модуль Б - модуль Д(тут че то сломалось, мы обработали и пустили ответ назад) - модуль Б(тут тоже че то обработали и потом выше) - модуль А  - это слишком для моих мозгов
ну тут понимаешь, предлагалось делать то же самое, но на исключениях
источник

K

Kirill in Saint P Ruby Community
Igor Morozov
ну тут понимаешь, предлагалось делать то же самое, но на исключениях
а ну тогда я видать не так понял мысль)
источник

IM

Igor Morozov in Saint P Ruby Community
если тебе нужно на многих уровнях как-то дополнять и обогащать данные, то это в любом случае сложно

а если нет, то это что с ретурнами несложно, что с исключениями. только с ретурнами попроще
источник

NS

Nikita Shilnikov in Saint P Ruby Community
Igor Morozov
а что такое обычный обрыв программы?
sudo shutdown -P now
источник