
Nick
07.10.2017
21:37:19
allow_any_instance_of(Object).to receive(:foo).and_return(:return_value)
Если ты про то, что конкретно написать
Связка тут в принципе непричём.

Maxim
07.10.2017
21:55:21

Google

Maxim
07.10.2017
21:55:59
в фактори-герлс есть спец. метод для такого рода моков. даже на их итхабе было написано. я неправильно гуглил =)

Vitaly
07.10.2017
21:56:38
расскажи подробнее, вдруг кому еще пригодится
или ссылочку дай

Alex
07.10.2017
22:36:54

Ivan
08.10.2017
06:24:49
Колбеки - зло

Maksim
08.10.2017
06:26:41
не юзать after_create? :)
угу. Лучше сделать отдельный объект, который выполняет операцию и что-то ещё вызывает и тестировать его
у нас в биллинге сейчас все операции с услугами пользователей делаются через командный класс, в котором есть методы: change_license_limit, create_license, destroy_license. Там же происходит аудит лог, сохранение старых версий, провижнинг на разные сервисы
это удобно

Alex
08.10.2017
09:03:11
Это удобно если он используется в паре мест
Кроме того три разных публичных метода - ну такое
А вот если он используется много где - вот тогда жопа

Roman
08.10.2017
09:55:07
когда я сам себе был начальник :) я делал сервис-классы с единым интерфейсом: единственный публичный инстанс метод call, который проксируется в метод класса call
соответственно имена давал типа ChangeLicenseLimit, CreateLicense и т.д.
или даже License::Create, License::ChangeLimit

Google

Alex
08.10.2017
09:57:21
Хороший подход, мне правда длина названия последнего класса не нравится.

Roman
08.10.2017
09:57:33
очень удобно: одно действие - один класс. мокать еще удобно тоже лямбдами

Alex
08.10.2017
09:58:05
License::ChangeLimit
Неймспейс просто чтобы у тебя 600 сервисов в одной папке не было

Roman
08.10.2017
09:58:29
так я ж так и написал вроде

Alex
08.10.2017
09:58:44
а, черт. Мой больной мозг решил что License::Create License::ChangeLimit это один класс

Roman
08.10.2017
09:59:03
а блин
я запятую пропустил

Alex
08.10.2017
09:59:35
просто часто читая разные вещи уже привык автоматически поправлять опечатки
бывает читаешь какой то кусок текста, следишь за логикой, если не стыкуется - меняешь слова/ставишь запятые, и читаешь снова.

Roman
08.10.2017
10:00:02
:)

Alex
08.10.2017
10:00:26
ну и тут оно сработало наоборот, решил что пробел - лишний

Roman
08.10.2017
10:01:52
проблемы обычно начинаются когда для create и delete половина приватных методов совпадают
начинаешь их выделять в еще один либо сервис либо хелперы
лучше сервис
и в конце у тебя будет "ехал сервис через сервис"
но ничего плохого в этом нет

Alex
08.10.2017
10:02:50
у меня как раз такая ситуация

Google

Roman
08.10.2017
10:03:03
ок и что делаешь?

Alex
08.10.2017
10:03:05
слишком ОБЩИЕ сервисы создания
ничего не делаешь, оставляешь два класса имхо.

Roman
08.10.2017
10:03:30
с копипастой?

Alex
08.10.2017
10:03:38
да
вопрос в том, часто ли ты меняешь этот код? если часто - тебе будет неудобно когда есть общая абстракция когда они не совпадут.
если не часто - то тем более нет смысла выносить в отдельный класс.
да, если абстракция хорошая, и ты меняешь код и он подходит для обоих классов то все хорошо. А если нет?
ты разбиваешь абстракцию обратно.

Dmitriy
08.10.2017
10:06:04
а кто нибудь знает как внутри Rails Engine получить доступ к локалям, у меня пишет translation missing
доступ к локалям внутри lib

Roman
08.10.2017
10:06:39
у тебя ключ совпадает?
ключ перевода
например сервис, который экспайрит подписки пользователя и сервис, который продливает их
и в том и в другом надо будет достать подписки у пользователя по какойто логике (одинаковой)
и если она изменится - он изменится в двух местах

Alex
08.10.2017
10:09:18

Alex
08.10.2017
10:09:43
у меня больно часто ломаются абстракции связанные с бд
т.е с логикой моделек.

Google

Roman
08.10.2017
10:09:54

Alex
08.10.2017
10:10:14
а вот если у тебя абстракция не бьется, то ты либо костылишь (пиздец) либо разбиваешь ее еще как то, и тратишь кучу времени.

Alex
08.10.2017
10:11:06
нужен баланс

Alex
08.10.2017
10:11:19
именно.

Roman
08.10.2017
10:11:34
ну это КО конечно)
фишка в том, чтобы понять, где баланс
в целом понятно к чему стремиться

Alex
08.10.2017
10:12:38
выведем правило? абстракцию пьют втроем :)
три точки - выноси в абстракцию. Но это бестолково конечно.
потому что есть некоторые места где очевидно что даже с двумя точками надо выносить.

Roman
08.10.2017
10:13:14
я обычно на второй
да
а сейчас на проекте есть люди которые сразу выносят

Alex
08.10.2017
10:13:32
у меня просто сейчас на работе сервис ехал через сервис в сервисе воркер с сервисом вызывающий сервис.

Roman
08.10.2017
10:13:34
но один из них реально шарит
и обычно его абстракции потом как раз заходят

Alex
08.10.2017
10:13:51
никогда не угадаешь, да.

Roman
08.10.2017
10:14:23
и главное потом критиковать будут в любом случае)
вынес - ага рано оптимизируешь, не тот уровень абстракции
не вынес - копипастер

Google

Alex
08.10.2017
10:14:43
хорошо, когда есть кому критиковать.
в общем самый геморой это баланс.
это ОЧЕНЬ геморойно.

Roman
08.10.2017
10:15:24
не существует проблемы, которую нельзя было бы решить с помощью еще одной абстракции
кроме проблемы слишком большого количества абстракций =)

Anton
08.10.2017
10:19:05

Alex
08.10.2017
10:22:55
как меня эти Router'ы бесят

Dmitriy
08.10.2017
10:37:19

Sergey
08.10.2017
19:51:56
Добрый вечер, коллеги. Кто то прикручивал к сайту оплату через bitcon? Есть опыт и что лучше юзать? Нашел это https://github.com/blockchain/api-v1-client-ruby . Это норм? И может кто-то опытом поделится?

Lupsick
08.10.2017
20:51:23
там удобнее на мой взгляд

Sergey
08.10.2017
20:59:52

Roman
09.10.2017
06:39:33
пуму можно ставить голую наружу
у нее есть защита от медленных клиентов
а перед юникорном надо ставить nginx
потому что если к тебе приедет чувак на полу мертвом мобильном интернете и начнет заливать тебе видео на 500 мб, то один воркер у тебя это время будет недоступен
это ответ на второй вопрос
по разнице: пума на тредах (плюс процессы, в кластер-режиме), юникорн процессовый форкающий