Fork me on GitHub
#clojure-russia
<
2015-10-31
>
artofshine08:10:50

А есть какой-то свод правил как indent-ить код на clojure? Emacs в clojure-mode без доп. конфигурации делает как-то так:

(dom/div nil
               (let [{{:keys [firstName
                              lastName
                              middleName]} :person} data]

artofshine08:10:49

Ну и тут как-то не очень хорошо выглядит:

(def st
  (atom {:map1 {:key1 {:ink1 :v1
                       :ink2 :v2
                       :ink3 :v3}
                :key2 {:ink1 :v1
                       :ink2 :v2
                       :ink3 :v3}
                :key3 {:ink1 :v1
                       :ink2 :v2
                       :ink3 :v3}}
         :map2 {:key1 {:ink1 :v1
                       :ink2 :v2
                       :ink3 :v3}
                :key2 {:ink1 :v1
                       :ink2 :v2
                       :ink3 :v3}
                :key3 {:ink1 :v1
                       :ink2 :v2
                       :ink3 :v3}}}))

rm08:10:41

он все правильно делает

artofshine09:10:12

Да, я эту доку смотрел. Но мне кажется делать столь большие отступы для map никакого редактора не хватит. simple_smile

artofshine09:10:11

Вот вроде тоже не очень выглядит:

(defn func [data]
  (reify
      om/IRender
    (render [this]
      ())
    om/IRenderState
    (render-state [this]
      ())))

artofshine09:10:58

Скачащие названия протоколов раздражают мое чувство прекрасного. 😉

prepor09:10:11

@artofshine: как минимум последний пример имакс не так индентит

artofshine10:10:36

@prepor у меня именно так как я показал, уверенны, что у вас ничего не накручено на clojure-mode?

prepor10:10:08

угумс, уверен (можно на ты!)

prepor10:10:50

@artofshine: вот это только

(define-clojure-indent
        ;; Compojure
        (ANY 2)
        (DELETE 2)
        (GET 2)
        (HEAD 2)
        (POST 2)
        (PUT 2)
        (context 2)
        (defroutes 'defun)
        ;; Cucumber
        (After 1)
        (Before 1)
        (Given 2)
        (Then 2)
        (When 2)
        ;; Schema
        (s/defrecord 2)
        ;; test.check
        (for-all 'defun))

artofshine10:10:05

Странно, такое за aquamacs не замечалось?

artofshine13:10:44

На данной странице, есть пример в котором описывается раскрытие связи для данных https://github.com/omcljs/om/wiki/Basic-Tutorial

artofshine13:10:17

На некоторой View

(defn registry-view [data owner]
  (reify
    om/IRender
    (render [_]
      (dom/div #js {:id "registry"}
        (dom/h2 nil "Registry")
        (apply dom/ul nil
          (om/build-all entry-view (people data)))))))

artofshine13:10:40

Есть метод

(people data)

artofshine13:10:09

Вот что делает сам метод:

(defn people [data]
  (->> data
    :people
    (mapv (fn [x]
            (if (:classes x)
              (update-in x [:classes]
                (fn [cs] (mapv (:classes data) cs)))
               x)))))

artofshine14:10:59

Собственно авторы раскрывают связь перед тем как передать объекты во внутреннюю структуру. В данном случае уровня вложенности в данных всего два и по этой причине они

:people
берут из data, но если рассматривать реальную ситуацию, то с ходу находятся примеры когда это не будет работать так как на данном уровне view просто не будет доступа к people из data. В результате каким-то образом нужно передать коллекцию через иерархию.

artofshine14:10:34

Как результат в Facebook подумали и придумали Relay. В результате у каждого компонента описываются потребности в данных и если нужны доп справочники, то они протискиваются через всю иерархию.

artofshine14:10:17

В Facebook также предложили связать способ описания потребностей с GraphQL это язык запросов очень декларативного вида. Собственно ради чего я все это писал. В их случае им потребовалось на сервере реализовать некоторый backend, который умеет понимать GraphQL и возвращать данные. Выглядит это следующим образом: Описывается входная точка - query с параметрами, выполняется некоторая функция на JS которая достает кусок данных, и этот кусок данных прогоняется по схеме на соответствие и раскрытие. То есть если в схеме некоторое поле выглядит как функция, то она вызывается а на вход ей передаются параметры, которые были в соответствующем поле данных (к примеру там были id связанных сущностей).

artofshine14:10:35

Есть ли кто-то кто описывал схему подобным образом?

prepor14:10:11

Om говно и депрекейтед

artofshine14:10:56

А чего на главной странице om не написанно что оно deprecated?

artofshine14:10:48

Ну это ладно, вопрос то в другом (я просмотрел ссылку): 1. Они не используют связанны данных (по ключам, id) без разницы 2. Соответсвенно там нет примера, каким образом в глубину появятся данные если их там просто нет. Там в принципе иерархий нет. Иерархия наименованием ключей реализованна 3. Если у нас 1000 записей и нам их нужно не просто курсором по 10 шт. разделить, а к примеру добавить туда условие

#(> 10000 %)

az16:10:19

@prepor: зачем ocaml нужен ? почему трейдинг часто на ocaml-е пишут? или это легенды?