Fork me on GitHub
#clojure-russia
<
2016-10-04
>
a.espolov02:10:51

парни юзаю чужое апи один сервис отдает время 1475548156000 другой 1475548156, как можно задетектить что не хватает разрядов?

artemyarulin03:10:22

(-> str count) troll

seryh04:10:41

а что не так? один сервис отдает unixtime в секундах другой в миллисекундах. бывает такое

rkosenko08:10:40

бывет ещё в наносекундах... я обычно, если нет спецификации и неизвестно что за время, делю на 1000 пока не получу время (в unixtime) меньше заданной границы. Вот предыдущее значение - это итоговый unixtime. За границу можно брать там время старта разработки проекта, но это если эти ваши timestamp-ы в настоящем, недавнем прошлом или недалёком будущем. Всё зависит от специфики. Если у Вас это даты рождений (т.е. могут быть в районе 1970-го года), то боюсь никак Вы нормально не отдетектите.

kuzmin_m11:10:20

Строки хардкодятся во вьюхах/вызовах. Т.е. нет способа через структуру данных указать какой запрос мне нужен, См. request-for в примерах

kuzmin_m11:10:01

(request-for :show [:pages] {:page-id "1"}) ;; returns {:uri "/pages/1", :request-method :get}

bezrukov11:10:38

есть такая тема, чтобы генерировать url через структуру

kuzmin_m11:10:29

вот этого я не видел, спасибо

kuzmin_m11:10:09

есть другой момент https://github.com/darkleaf/router/blob/master/test/darkleaf/router/low_level_test.clj#L22-L25

:update-page [:api] {:slug "contacts", :api-token "secret"}
                 {::ll/segments ["api" "pages" "contacts"], :request-method :patch, :headers {"token" "secret"}})))

kuzmin_m11:10:35

т.е. тут именно запрос целиком, а не только url

kuzmin_m11:10:49

и параметры могут быть не только в url

kuzmin_m11:10:09

но и в заголовке и любой другой части

kuzmin_m11:10:37

так же есть проверка того, что сгенерировалось

kuzmin_m11:10:03

(testing "wrong guard cases"
      (let [request {:uri "/it/localized-page", :request-method :get}
            response (handler request)]
        (is (not= :localized-page (get-in response [:matched-route :name]))))
      (is (thrown-with-msg? java.lang.IllegalArgumentException
                            #"Can't match the same route for given params\. Matched :not-found in scope \(\)\."
                            (request-for :localized-page [:locale] {:locale "wrong-locale"}))))))

kuzmin_m11:10:34

а в роутах соответственно

(guard :locale #{"ru" "en"}
          (action :localized-page identity)
          (not-found identity))

kuzmin_m11:10:10

(request-for :localized-page [:locale] {:locale "wrong-locale"}) не прокатит и будет ошибка

kuzmin_m11:10:27

:locale может быть только ru или en

kuzmin_m11:10:08

я понятно объяснил? 😃

kuzmin_m11:10:29

@bezrukov @nicola я бы с радостью рассказал, как это работает и какими идеями руководствовался вам интересно?

bezrukov12:10:39

@kuzmin_m спасибо за разъяснения, идеи понятны. Мне функциональность с guard’ами на генерацию запросов пока нигде не нужна была вроде.. А в плане генерации запроса целиком, а не просто url - да, думаю, штука удобная для тестирования в определенных сценариях (но опять же, я ими не пользуюсь).

kuzmin_m12:10:25

Guard удобен для локализации

kuzmin_m12:10:43

Или когда есть какое-то legacy /foo-bar/ID Id < 1000 уходят на старый обработчик А остальные на новый

bezrukov12:10:44

да, с легаси - это вариант

kuzmin_m12:10:19

По поводу запроса целиком Можно прикрутить clojurescript и пользоваться request-for на клиенте для формирования запроса

bezrukov12:10:57

да, это понятно

bezrukov12:10:42

@kuzmin_m а ты планируешь какой-то open source с использованием этого роутера делать? Было бы удобнее посмотреть как это будет в приложении. Имеется в виду, как будет выглядеть общий код для клиента и бекенда.

kuzmin_m12:10:14

Да, это вырасло из другого проекта, но он, судя по всему, загнулся. Есть в планах написать опенсорс приложение, что бы разобраться в некоторых технологиях на практике.

kuzmin_m12:10:21

@bezrukov: подскажи, пожалуйста Тесты громоздкие и не очень понятные?

kuzmin_m12:10:44

Из-за do-template

bezrukov13:10:13

@kuzmin_m ну do-template не совсем очевидная конструкция. А в целом, тесты как тесты - можно понять при желании:)

kuzmin_m13:10:37

Для моего случая это самое лучшее, что смог найти. Без do-template был бы ад. Может еще какие-то варианты есть?

bezrukov13:10:44

не знаю, так сложно сказать - надо погружаться...

kuzmin_m13:10:05

Ок, спасибо

romul18:10:15

@rkosenko > делю на 1000 пока не получу время (в unixtime) меньше заданной границы. можно же наоборот - делить, если оно больше заданной границы.. скажем, больше 12345678900 (это примерно 2361 год)

romul19:10:01

@kuzmin_m посмотри как сделан роутинг в Phoenix: http://www.phoenixframework.org/docs/routing#section-resources Они очень удачно скрестили идеи Rails роутера с функциональным подходом