@proelixir

Страница 914 из 1045
Dmitry
22.03.2018
13:51:23
@art4ride Вопрос не в том, что можно сделать в Elixir-е. Вопрос, зачем сделали так в Go???

Vladimir
22.03.2018
13:52:03
видел пару либ для подобного взаимодействия https://blog.fazibear.me/elixir-ruby-dont-fight-talk-with-erlix-24b0f5ed8d12 https://blog.fazibear.me/elixir-ruby-dont-fight-talk-with-erlectricity-dbf3af67d999

Dmitry
22.03.2018
13:52:12
Хотя я, наверное, оффтопю слишком сильно, спрашивая про Go здесь. Поэтому можно игнорировать мой вопрос.

Vladimir
22.03.2018
13:53:02
На вкус и цвет все фломастеры разные. Создатели Го — приверженцы такого стиля

Google
Alister
22.03.2018
13:54:07
Nikolay
22.03.2018
15:35:23
типа была боль и ему пришлось с нуля писать
Я говорил про аплоад на S3. Посмотри доклад Никиты тоже, он говорил что 5 ишью добавил в либу которая этим занимается, но один хер оно не работает как надо

Артем
22.03.2018
15:49:27
всем бы ишшьюсы покидать, нет бы пр))

Nikolay
22.03.2018
16:05:29
я хз как там сейчас, но когда я 2 года наза эту шляпу прикручивал, то был жетский проёб - при вызове changeset’a, если у тебя данные были не валидные, то эта либа всё равно грузила файл на s3

т.е. вызов changeset’a вызывал нихуйный сайдэффектик

Le
22.03.2018
18:14:06
то есть запустить процесс на эликсире и дергать из него методы классов на руби
ходит слух что может крашиться VM, пруфов к сожалению нет

$ergi0
22.03.2018
21:58:13
А как жить с отсутствием early return? Непрерывно хочется себя убить

Dmitry
22.03.2018
21:59:43
А где отсутствует early return?

$ergi0
22.03.2018
22:01:53
В эликсире

Dmitry
22.03.2018
22:06:38
Я как-то не задумывался

Скажу по секрету, я почти не пользуюсь переменными

Чтобы что-то вернуть, надо чтобы это что-то было

А я не пользуюсь переменными...

Google
Dmitry
22.03.2018
22:11:36
вот например файл 100 строк - ни одной переменной

https://github.com/agalaframework/agala_telegram/blob/master/lib/receiver.ex

И все такие...

Короче, return не нужен

$ergi0
22.03.2018
22:19:59
Чтобы что-то вернуть, надо чтобы это что-то было
Не обязательно, можно просто хотеть выйти :)

Dmitry
22.03.2018
22:20:39
Не в ФП

$ergi0
22.03.2018
22:32:40
Пока как-то очень тяжело

На проверку наличия пяти кастомных хедеров в Фениксе ушло два часа :)

Вместо 10 минут в golang

Dmitry
22.03.2018
23:03:39
$ergi0 Можно посмотреть как оное выглядит на Elixir и Golang? Если есть такое сравнение.

$ergi0 Я ради любопытства решил начать простой тестовый проект на Golang....и пока разобрался с GOPATH, какая структура файлов, создал всё....Ушло наверное часа два, вместо пары минут с mix new или с cargo new для Rust-а. Вроде такая простая вещь, как создать проект....А оказывается в мире Go - это ещё та непростая задача

$ergi0
22.03.2018
23:06:28
Я ещё не понял, как выглядит на элексире

Dmitry
22.03.2018
23:07:33
А как выглядит на Go? Может подскажу, как сделать на Elixir-е ?

$ergi0
22.03.2018
23:08:49
В голанге просто пять переменных в которые записались значения из Headers и сравнились с пустой строкой в if

В элексире проблема сразу с get_req_header началась

Например с проверкой возвращаемого значения

Dmitry
22.03.2018
23:09:57
if header1 == "" { return ... }

Вот так 5 раз?

В Go

header2

Google
Dmitry
22.03.2018
23:10:41
Т.е. задача не является ли один из 5 header-ов пустым?

$ergi0
22.03.2018
23:11:22
Или отсутствующим

Не могу сейчас код взять :(

Я фениксе я так понял мне нужен Plug, в котором я получаю хедеры и проверяю их

Dmitry
22.03.2018
23:12:11
В общем, нужно вернуть true, если все 5 header-ов присутствуют и false, если какой из них пустой или пустое значение?

$ergi0
22.03.2018
23:12:38
Сначала на наличие, если какогото нет, или он пустой, возвращаем 401

Если все есть, дальше уже разберёмся

Dmitry
22.03.2018
23:13:22
Это пишется 1 строчкой в эликсире

Не знаю как в go

$ergi0
22.03.2018
23:13:28
Это пишется 1 строчкой в эликсире
Наверняка, вопрос во времени, как до неё дойти :)

Dmitry
22.03.2018
23:14:22
Совет: не используй переменные

$ergi0
22.03.2018
23:16:25
Показывай одну строчку ;)

Я уже придумал как сделать в одну строчку написав три доп функции, но это не одна строчка :))

Aldar
22.03.2018
23:24:22
Паттерн матчинг заюзай

$ergi0
22.03.2018
23:31:01
Ну, не допер как пока. Пример простой def call(conn) do end Внутри плага, надо вернуть 401 если нет хотя бы одного из пяти хедеров (или он пустой)

Dmitry
22.03.2018
23:32:45
defmodule Plug.HeadersTest do import Plug.Conn def init(opts), do: %{} @headers ["test1", "test2", "test3", "test4", "test5"] def call(conn, opts) do case Enum.any?(@headers, &(get_req_header(conn, &1) in [[], [""]])) do true -> conn |> send_resp(401, "") |> halt() false -> conn end end end

$ergi0 Примерно вот так.

Возвращает 401 - в случае, если один из 5 header-ов отсутствует, либо пустой.

$ergi0
23.03.2018
00:07:38
Ну вот я примерно в эту сторону начал думать, после того, как по кривому сделал

Google
$ergi0
23.03.2018
00:08:02
Очень много времени на [], [""] ушло

Спасибо, попробую!

Dmitry
23.03.2018
07:47:48
@zloyrusskiy хоть один (any?) header пустой - или все (all?) - имеют значение. Можно и так и так, только функция будет противоположная. Я сделал по-первому варианту.

$ergi0
23.03.2018
10:39:03
это как раз все или ничего
Почему, нужно как раз чтобы обязательно были все

Работает нормально, теперь всё остальное сделать :))

Кто готов помогать от переменных избавляться? :)

нужно сделать следующее, получить из хедеров клиент токен, если клиента нет, вернуть ошибку, если есть, проверить подпись. Дальше получить юзера, если его нет, вернуть ошибку, если есть, проверить подпись

Я не могу вкурить, как от переменных избавиться

Проверка юзера будет лезть в базу и не хочется ее делать заранее

Получилось пока так

Никита
23.03.2018
16:31:36
ну в чем сложности. 3 плага, в каждом из них по 5 функций. И где-то около 50 тестов на это надо написать.

Dmitry
23.03.2018
16:33:17
Ты пробовал пользоваться Guardian?

$ergi0
23.03.2018
16:33:54
Так в них нельзя вызывать внешние функции

Или как именно пользоваться?

Никита
23.03.2018
16:34:11
за гардиан плюсую. и разнести по плагам можно

зачем все проверки в одном плаге?

Google
Dmitry
23.03.2018
16:34:22
Не, тебе короче надо почитать книжки по эликсиру

Никита
23.03.2018
16:34:26
лучше 3 маленьких - каждый из которых сделает свое дело

Dmitry
23.03.2018
16:34:37
Тогда ты будешь знать чем отличается guards от Guardian

Ну и заодно научишься прогать без переменных

https://hex.pm/packages/guardian

$ergi0
23.03.2018
16:36:57
Ага, про гардианы уже нашел, спасибо

Taras ?
23.03.2018
16:40:24
Ну и заодно научишься прогать без переменных
? почему это использование функций с переменными в паттерн метчинге зовется "прогать без переменных" ?

все-равно полностью без переменных не получится) в том числе и отладка

Dmitry
23.03.2018
16:41:38
Потому что нету присвоения

Есть матчинг

$ergi0
23.03.2018
16:42:09
Хорошо, мой пример можно переделать без присвоения?

Про несколько гардов понял, переделаю

Taras ?
23.03.2018
16:42:37
Потому что нету присвоения
так в эрланге и нету присвоения, это все-паттерн метчинг

Dmitry
23.03.2018
16:43:00
Твой пример решается строчкой {:guardian, version} в mix.exs

Никита
23.03.2018
16:44:44
Не, ну если хочется все самому

то сделай 3 плага. Один тебе выше показывали - он проверяет все заголовки

Страница 914 из 1045