@scala_ru

Страница 667 из 1499
Dmitry
17.05.2017
11:57:02
ивообще Transactor[monix.Task]?

вместе с дубёй

дуби идет с fs2

там есть транзакторы в fs2.Task, IOLite

Google
Dmitry
17.05.2017
11:57:53
в 0.4

в monix.Task вроде не было

Kirill
17.05.2017
11:58:13
как я по доке понял, и моникс по идее

Similar types like scalaz.effect.IO, scalaz.concurrent.Task, fs2.Task, and monix.Task also work fine.

Dmitry
17.05.2017
12:00:11
Из каробки не забработает

кароч

M[_]: Catchable: Suspendable]

если будет monix.Task: fs2.Catchable: fs2.Suspendable

Kirill
17.05.2017
12:01:05
Роджер. Жаль, что так. Хотел намешать себе смузи из библиотек, которые ни разу в глаза не видел. Видимо стоит расслабиться и выкинуть моникс в таком случае.

Dmitry
17.05.2017
12:01:22
https://github.com/monix/monix/issues/299

типа того

можно попробовать

Google
Kirill
17.05.2017
12:07:49
О, спасибо! Вечерком попробую. Для начала сооружу хоть что-то работающее на fs2

Nick
17.05.2017
12:46:59
@steveOrElse в твоем случаем, мне кажется ты гдет импорт потерял

Dmitry
17.05.2017
12:48:42
жаль, но нет

Nikita
17.05.2017
12:49:03
какие есть best practice чтобы передавать контекст в акковских стримах? например flowId для каждого элемента. я пока лучше враппера ничего еще не придумал, но это выглядит некрасиво и костыльно

Nick
17.05.2017
12:49:41
жаль, но нет
а ну да, моникс. Не заметил

KrivdaTheTriewe
17.05.2017
13:18:01
https://github.com/typelevel/general/issues/74#issuecomment-301990373 продолжение банкета

Юрий
17.05.2017
13:33:05
Vadim
17.05.2017
13:46:06
Ребят как мокать play.api.Logger?

Denis
17.05.2017
13:47:13
trait Logger[F[_]] { def debug(message: String): F[Unit] }

Aleksey
17.05.2017
13:48:17
Denis
17.05.2017
13:48:47
твоя правда

как бы много я отдал за forall в скале чтоб можно было писать def foo[M[_[_]], A](f: forAll F[_]. M[F] => F[A]]): Foo = ... foo[Logger](_.debug("bar"))

или хотя бы f: (M[F] => F[A]) forAll { type F[_] }

для консистентности с forSome

Vadim
17.05.2017
13:58:49
Так это же object

Daniel
17.05.2017
13:58:56
че то намешал в кучу два синтаксиса и не понятно что имелось ввиду то ли функция, то ли экземпляр класса

Vadim
17.05.2017
13:59:05
Вопрос скорее в том как мокать object

Diemust
17.05.2017
14:00:58
делай явный синглтон с инжектом, если di есть, например

Nikolay
17.05.2017
14:02:00
а для чего мокать логгер?

просто любопытно

Google
Vadim
17.05.2017
14:03:47
Причины две: тестировать корректный вызов логгера, игнорировать печать логов в тестах

Denis
17.05.2017
14:04:33
тогда лучше инжектить абстрактный интерфейс

и в тестах подсовывать свою реализацию с Vector[String] а в проде с play.api.Logger

Vadim
17.05.2017
14:06:02
Походу так и надо делать

Спасибо

Размышлял над этим но думал есть же что то готовое от плэй

Denis
17.05.2017
14:07:27
trait Logger[F[_]] { def debug(message: String): F[Unit] }
я не шутил когда это писал :) просто это next левел

Nick
17.05.2017
14:23:00
Причины две: тестировать корректный вызов логгера, игнорировать печать логов в тестах
для этого нужно в properties файле отключить логи, а не херню придумывать)

Dmitry
17.05.2017
14:23:26
ну а если логирование важный эффект?

и важно проверить что там

Nikolay
17.05.2017
14:23:59
запись в базу через логи)

Dmitry
17.05.2017
14:24:11
запись в логи через логи

Alex
17.05.2017
14:26:35
через блоги

Pavel
17.05.2017
14:27:29
"в прод мне логи" (с)

Wystan
17.05.2017
14:28:59
ну а если логирование важный эффект?
Значит ты что-то делаешь не так

Раз вместо бизнес логики тестируешь логирование

Dmitry
17.05.2017
14:29:20
так то да

Vadim
17.05.2017
14:30:50
Херню придумывать приходиться по тому что Logger object

точка

Vladimir
17.05.2017
14:39:18
Разве там еще не все, включая логгер инжектить надо?

Google
Vladimir
17.05.2017
14:39:37
но то, что его инжектить можно, это факт

Dmitry
17.05.2017
14:44:45
ну инстансом видимо

Nick
17.05.2017
14:44:58
а object не инстанс? )

Vadim
17.05.2017
14:45:25
Как Configuration мне подойдет

Nick
17.05.2017
14:46:30
Как Configuration мне подойдет
дык всегда можно сделать getLogger и для него сделать свою конфигурацию

Vadim
17.05.2017
14:47:20
Не всегда в том то и дело

Nick
17.05.2017
14:47:31
в каких случаях нельзя?

Vadim
17.05.2017
14:47:44
Когда нет времени все переписывать

Nick
17.05.2017
14:48:00
эм

кстати всеми любимый LazyLogging берет имя класса когда делает getLogger, дальше можно просто в каком нибудеь logback.xml чо угодно навернуть

вообще ничего не переписывая

Dmitry
17.05.2017
14:49:40
навернуть верное слово

Vadim
17.05.2017
14:49:59
на днях попробую разобраться

Diemust
17.05.2017
14:50:15
нет времени переписывать логер, но есть время его тестировать? я не понимаю кейс и так обидно становится =(

Nick
17.05.2017
14:50:28
зачем его переписывать?

и тем более мокать)

его можно конечно через powermock замокать, но зачем?

Vadim
17.05.2017
14:59:31
Ну давай прикинем что ловим исключение и пишем в лог. Какая тут альтернатива?

Nick
17.05.2017
15:05:28
вынести логику, которая кидает исключение и тестировать отдельно ее

Google
folex
17.05.2017
17:41:24
А есть какая-то классная библиотека, которая позволяет сделать def a(b: Int, c: Int) = b + c a.tupled ? То есть оно же работает вот так (a : (Int, Int) => Int).tupled Неужели сложно написать макрос/метод, который всегда будет требовать function в типе?

Надоело писать (a _), это уродство

Kirill
17.05.2017
17:45:24
а то, что идея не переваривает дуби, это норм или лечится?

Mikhail
17.05.2017
17:48:12
кто читает скала чат, тот в цирке не смеется ?

folex
17.05.2017
17:55:04
Не совсем понял, что ты хочешь сделать?
Я хочу уметь вызывать tupled сразу у метода, не конвертя его явно в функцию перед этим

или хочу синтаксис methodName.toFunction.tupled

Nick
17.05.2017
17:58:56
Определи a сразу с tuple )))

Mikhail
17.05.2017
18:00:47
Надоело писать (a _), это уродство
пиши def prettyTupled[T1,T2,T3](a:Function2[T1,T2,T3]) = a.tupled val b = prettyTupled(a)

anton
17.05.2017
18:07:36
кстати, то что slick все сливают - это я понял.. но почему doobie, а не quill например? расскажите неопытному..

Aleksei
17.05.2017
18:08:21
typelevel ибо

Страница 667 из 1499