Size: a a a

Clojure — русскоговорящее сообщество

2020 March 04

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
все-равно ресурсы упаковываются в jar-ник
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mike Bohdan
кто подскажет есть ли какая-то тула чтоб резолвить ресурсы?
например у меня есть файл resources/project-name/module/config.edn
{:host localhost
:port 666}

я хочу чтоб в коде я например мог сделать (:require [project-name.module :refer [config]]) и это была просто мапка
ты можешь написать функцию, которая у тебя берёт конфиг из ресурса либо откуда-то ещё исходя из каких-то условий
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
Mike Bohdan
кто подскажет есть ли какая-то тула чтоб резолвить ресурсы?
например у меня есть файл resources/project-name/module/config.edn
{:host localhost
:port 666}

я хочу чтоб в коде я например мог сделать (:require [project-name.module :refer [config]]) и это была просто мапка
io/resource
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
(def config (-> "path/config.edn" io/resource slurp edn/read-string))
источник

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
да, я знаю эти способы, хотелось бы чтоб на старте репла, приложения это все автоматически делалось, чтоб работать с ресурсами как с мапками в неймспейсе и чтоб это было скрыто
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
ну вот, def на уровне модуля сразу загрузит файл
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mike Bohdan
да, я знаю эти способы, хотелось бы чтоб на старте репла, приложения это все автоматически делалось, чтоб работать с ресурсами как с мапками в неймспейсе и чтоб это было скрыто
вот напиши и скрой
источник

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
ну “конфиг” там очень условно,  у меня может и не быть такого модуля в коде, а если куча разных по смыслу edn и лоадить их через def – выглядит не очень красиво
источник

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
если нет готового решения чтоб edn воспринимались как ns – ок
источник

T

Timmy B in Clojure — русскоговорящее сообщество
Mike Bohdan
да, я знаю эти способы, хотелось бы чтоб на старте репла, приложения это все автоматически делалось, чтоб работать с ресурсами как с мапками в неймспейсе и чтоб это было скрыто
вот тебе место для инновации :)
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
можно написать макрос, который делает новый ns и впендюривает в него ключи словаря
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
типа (ns-from-file "path/to/config.edn")
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
но это костыльно и как потом поддерживать
источник

T

Timmy B in Clojure — русскоговорящее сообщество
по-моему это всё трошечки неидиоматично в виду, скажем так, магичности
источник

T

Timmy B in Clojure — русскоговорящее сообщество
кложа всё ж не рельса
источник

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
Ivan Grishaev
типа (ns-from-file "path/to/config.edn")
опять же это явно код писать. а можно как-то через плагин к lein?
источник

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
Timmy B
по-моему это всё трошечки неидиоматично в виду, скажем так, магичности
хотелось бы чтоб инструмент делал вместо меня помаксимуму работы
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
так что мешает добавить в строчку
(def config (-> "path/config.edn" io/resource slurp edn/read-string))
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mike Bohdan
хотелось бы чтоб инструмент делал вместо меня помаксимуму работы
ну вот мне тоже хочется, и я делаю себе проект под себя, благо что на той же кложе всё пишется
источник

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
Ivan Grishaev
так что мешает добавить в строчку
(def config (-> "path/config.edn" io/resource slurp edn/read-string))
так-то ничего просто если в начале файла будет просто с десяток таких вызовов тоже не круто
источник