wip
This commit is contained in:
parent
22be2b5842
commit
5b875ba457
2 changed files with 46 additions and 12 deletions
|
|
@ -1,6 +1,38 @@
|
|||
(ns babashka.pods.jvm
|
||||
(:require [babashka.pods.impl :as impl]))
|
||||
|
||||
(def ^:private namespaces-to-load (atom {}))
|
||||
|
||||
(defn- unroot-resource [^String path]
|
||||
(symbol (.. path
|
||||
(substring 1)
|
||||
(replace \/ \. )
|
||||
(replace \_ \-))))
|
||||
|
||||
(defn- process-namespace [{:keys [:name :vars :done]}]
|
||||
(binding [*ns* (load-string (format "(ns %s) *ns*" name))]
|
||||
(doseq [[var-sym v] vars]
|
||||
(cond
|
||||
(ifn? v)
|
||||
(do
|
||||
(ns-unmap *ns* var-sym)
|
||||
(intern name var-sym v))
|
||||
(string? v)
|
||||
(load-string v))))
|
||||
(when done (deliver done :ok)))
|
||||
|
||||
(let [core-load clojure.core/load]
|
||||
(intern 'clojure.core 'load
|
||||
(fn [& paths]
|
||||
(let [nss @namespaces-to-load]
|
||||
(doseq [path paths]
|
||||
(let [lib (unroot-resource path)]
|
||||
(if-let [pod (get nss lib)]
|
||||
(impl/load-ns
|
||||
pod lib (fn [namespace]
|
||||
(process-namespace namespace)))
|
||||
(core-load path))))))))
|
||||
|
||||
(defn load-pod
|
||||
([pod-spec] (load-pod pod-spec nil))
|
||||
([pod-spec _opts]
|
||||
|
|
@ -12,17 +44,20 @@
|
|||
(intern
|
||||
(create-ns (symbol (namespace sym)))
|
||||
(symbol (name sym)))))})
|
||||
namespaces (:namespaces pod)]
|
||||
(doseq [[ns-sym v] namespaces]
|
||||
(binding [*ns* (load-string (format "(ns %s) *ns*" ns-sym))]
|
||||
(doseq [[var-sym v] v]
|
||||
(cond
|
||||
(ifn? v)
|
||||
(do
|
||||
(ns-unmap *ns* var-sym)
|
||||
(intern ns-sym var-sym v))
|
||||
(string? v)
|
||||
(load-string v)))))
|
||||
namespaces (:namespaces pod)
|
||||
load? (contains? (:ops pod) :load)]
|
||||
(when load?
|
||||
(swap! namespaces-to-load
|
||||
merge
|
||||
(into {}
|
||||
(keep (fn [[ns-name vars]]
|
||||
(when (empty? vars)
|
||||
[ns-name pod]))
|
||||
namespaces))))
|
||||
(doseq [[ns-sym vars] namespaces
|
||||
:when (or (not load)
|
||||
(seq vars))]
|
||||
(process-namespace {:name ns-sym :vars vars}))
|
||||
(future (impl/processor pod))
|
||||
{:pod/id (:pod-id pod)})))
|
||||
|
||||
|
|
|
|||
|
|
@ -47,7 +47,6 @@
|
|||
(def other-tagged (pod/other-tag))
|
||||
|
||||
(require '[pod.test-pod.loaded])
|
||||
|
||||
(def loaded (pod.test-pod.loaded/loaded 1))
|
||||
|
||||
(pods/unload-pod pod-id)
|
||||
|
|
|
|||
Loading…
Reference in a new issue