From 2c077888d7b6b91d695decc1bb583a0c9511c43c Mon Sep 17 00:00:00 2001 From: Daniel Higginbotham <daniel@flyingmachinestudios.com> Date: Wed, 28 Aug 2019 15:56:40 -0400 Subject: [PATCH] more REPL ergonomics (#10702) (#10744) --- .gitignore | 1 + dev/src/dev.clj | 49 ++++++++++++++++++++++++++++++++++++++++++++++++ dev/src/user.clj | 8 ++++++++ dev/user.clj | 1 - project.clj | 8 +++++--- 5 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 dev/src/dev.clj create mode 100644 dev/src/user.clj delete mode 100644 dev/user.clj diff --git a/.gitignore b/.gitignore index d8f95d5dc88..5dd7294d0db 100644 --- a/.gitignore +++ b/.gitignore @@ -62,3 +62,4 @@ target/checksum.txt /resources/frontend_client/app/locales *.iml .idea/ +/local/src diff --git a/dev/src/dev.clj b/dev/src/dev.clj new file mode 100644 index 00000000000..646b379f7ef --- /dev/null +++ b/dev/src/dev.clj @@ -0,0 +1,49 @@ +(ns dev + "Put everything needed for REPL development within easy reach" + (:require [metabase + [core :as mbc] + [db :as mdb] + [handler :as handler] + [plugins :as pluguns] + [server :as server] + [util :as u]] + [metabase.api.common :as api-common] + [metabase.models.interface :as mi] + [toucan.db :as tdb])) + + +(defn init! + [] + (mbc/init!)) + +(defn start! + [] + (metabase.server/start-web-server! #'metabase.handler/app) + (metabase.db/setup-db!) + (metabase.plugins/load-plugins!) + (metabase.core.initialization-status/set-complete!)) + +(defn stop! + [] + (metabase.server/stop-web-server!)) + +(defn restart! + [] + (stop!) + (start!)) + +(defn run-tests + [& ns-names] + (doseq [ns-name ns-names] + (require ns-name :reload)) + (expectations/run-tests ns-names)) + +(defmacro require-model + "Rather than requiring all models inn the ns declaration, make it easy to require the ones you need for your current session" + [model-sym] + `(require [(symbol (str "metabase.models." (quote ~model-sym))) :as (quote ~model-sym)])) + +(defmacro with-permissions + [permissions & body] + `(binding [api-common/*current-user-permissions-set* (delay ~permissions)] + ~@body)) diff --git a/dev/src/user.clj b/dev/src/user.clj new file mode 100644 index 00000000000..9cf3c0c4e9e --- /dev/null +++ b/dev/src/user.clj @@ -0,0 +1,8 @@ +(ns user) + +(defn dev + "Load and switch to the 'dev' namespace." + [] + (require 'dev) + (in-ns 'dev) + :loaded) diff --git a/dev/user.clj b/dev/user.clj deleted file mode 100644 index 7a96237a767..00000000000 --- a/dev/user.clj +++ /dev/null @@ -1 +0,0 @@ -(ns user) diff --git a/project.clj b/project.clj index 12a32eaf775..9d96179368e 100644 --- a/project.clj +++ b/project.clj @@ -151,7 +151,9 @@ :profiles {:dev - {:dependencies + {:source-paths ["dev/src" "local/src"] + + :dependencies [[clj-http-fake "1.0.3" :exclusions [slingshot]] ; Library to mock clj-http responses [expectations "2.1.10"] ; unit tests [ring/ring-mock "0.3.2"]] @@ -247,7 +249,7 @@ [[jonase/eastwood "0.3.1" :exclusions [org.clojure/clojure]]] :eastwood - {:exclude-namespaces [:test-paths] + {:exclude-namespaces [:test-paths dev] :config-files ["./test_resources/eastwood-config.clj"] :add-linters [:unused-private-vars :unused-namespaces @@ -283,7 +285,7 @@ :check-namespace-decls [:include-all-drivers {:plugins [[lein-check-namespace-decls "1.0.2"]] - :source-paths ["test"] + :source-paths ^:replace ["src" "test"] :check-namespace-decls {:prefix-rewriting true}}] ;; build the uberjar with `lein uberjar` -- GitLab