Size: a a a

2020 May 30

AD

Anastasiya Dyachenko in pro.elixir
В случаях когда надо обработать ответ, такой кейс реально удобный. Посередине наверно уже не оч, но это тоже все личные предпочтения
источник

AD

Anastasiya Dyachenko in pro.elixir
Например

Repo.transaction(fn ->
 with ... do
   {:ok,...}
 end
 |> case do
     {:ok, res} -> res
     {:error, reason} -> Repo.rollback(reason)
    end
end)
источник

VS

Vladimir Sekisov in pro.elixir
при with сразу else напрашивается вместо case
источник

DR

Dmitry Russ (Aleksan... in pro.elixir
Anastasiya Dyachenko
Например

Repo.transaction(fn ->
 with ... do
   {:ok,...}
 end
 |> case do
     {:ok, res} -> res
     {:error, reason} -> Repo.rollback(reason)
    end
end)
Тот же пример с функцией:

safe_transaction(fn ->
 with ... do
   {:ok,...}
 end
end)

defp safe_transaction(fun) do
 case Repo.transaction(fun) do
   {:ok, res} -> res
   {:error, error} -> Repo.rollback(reason)
 end
end
источник

VS

Vladimir Sekisov in pro.elixir
можно, но зачем Ecto.Multi переизобретать?
источник

DR

Dmitry Russ (Aleksan... in pro.elixir
Anastasiya Dyachenko
Например

Repo.transaction(fn ->
 with ... do
   {:ok,...}
 end
 |> case do
     {:ok, res} -> res
     {:error, reason} -> Repo.rollback(reason)
    end
end)
Имя может быть другим, но мне субьективно - такой код видится более читабельным.
источник

AR

Andrew Rudenko in pro.elixir
Źmićer Rubinštejn
@prepor Вопрос к тебе на засыпку:

mix.exs это фактически файл elixir, и с одной стороны это супер, но с другой - невозможно сделать тулинг по управлению проектом, например поднять версию через командную строку или добавить через неё зависимость.

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

1. Ты можешь тулингом модифицировать сами сырцы, НО Code.string_to_quoted выкидывает кучу инфы и из него уже не восстановится оригинальный файл

ну типа

with {:ok, content} <- File.read(file),
        {:ok, code} = Code.string_to_quoted(content) do
    Macro.to_string code
   end


тут результат нифига не будет == content

я сейчас работают над tree-sitter грамматикой для эликсира, с ней подобных манипуляции должны стать сильно проще

2. никто небе не мешает в deps читать из условного deps.json рядом с проектом. твой тулинг даже может автоматически его генерировать из текущего mix.exs
источник

AD

Anastasiya Dyachenko in pro.elixir
Dmitry Russ (Aleksandrov)
Имя может быть другим, но мне субьективно - такой код видится более читабельным.
Возможно, но в каждом модуле заново писать эту функцию уже не очень, да и не всегда это именно транзакция, примерно такой код часто использую
источник

DR

Dmitry Russ (Aleksan... in pro.elixir
Anastasiya Dyachenko
Возможно, но в каждом модуле заново писать эту функцию уже не очень, да и не всегда это именно транзакция, примерно такой код часто использую
Можно вынести в Repo 🙂 Сразу кучу кода duplication уйдёт… В общем, можно сказать - это дело вкуса, но я такое избегаю, так вызов конкретной функции будет более понятен, чем pipe в case. В особенности, как в случае выше, когда можно обойтись без пайпа.
источник

AD

Anastasiya Dyachenko in pro.elixir
Vladimir Sekisov
при with сразу else напрашивается вместо case
Это очень облегченный пример, бывают случаи когда else не спасает
источник

DR

Dmitry Russ (Aleksan... in pro.elixir
Anastasiya Dyachenko
Возможно, но в каждом модуле заново писать эту функцию уже не очень, да и не всегда это именно транзакция, примерно такой код часто использую
К примеру, я ещё такой код часто видел и переписывал:

data
|> Map.get(:x)
|> case do


который вообще на мой взгляд намного лучше читается в классическом case:

case Map.get(data, :x) do
источник

AD

Anastasiya Dyachenko in pro.elixir
Dmitry Russ (Aleksandrov)
Можно вынести в Repo 🙂 Сразу кучу кода duplication уйдёт… В общем, можно сказать - это дело вкуса, но я такое избегаю, так вызов конкретной функции будет более понятен, чем pipe в case. В особенности, как в случае выше, когда можно обойтись без пайпа.
В любом случае в той же книжке будет лучше писать сразу суть, а не расписывать кучу оберток
источник

AD

Anastasiya Dyachenko in pro.elixir
Dmitry Russ (Aleksandrov)
К примеру, я ещё такой код часто видел и переписывал:

data
|> Map.get(:x)
|> case do


который вообще на мой взгляд намного лучше читается в классическом case:

case Map.get(data, :x) do
Ну я могу сказать в защиту первого варианта что добавить еще одно действие там намного проще
источник

BB

Boris Beginin in pro.elixir
Ребятки привет! подскажите как лучше сделать, есть короче редисовый пабсаб , мне нужно на него подписатся и процессить месседжи оттуда в паралель разными конекстами
источник

BB

Boris Beginin in pro.elixir
это как получается нужно сделать
источник

BB

Boris Beginin in pro.elixir
Нужно через genstage?
источник

BB

Boris Beginin in pro.elixir
типо сделать генстейдж продьюсер который подписывается на редис пабсаб?
источник

BB

Boris Beginin in pro.elixir
я как то накидал код, не очень нравится, очень много  буков не очень нравится
источник

BB

Boris Beginin in pro.elixir
может редис поменять на что?
источник

LL

Lama Lover in pro.elixir
Boris Beginin
Ребятки привет! подскажите как лучше сделать, есть короче редисовый пабсаб , мне нужно на него подписатся и процессить месседжи оттуда в паралель разными конекстами
А какие нагрузки? Какое количество?
источник