From 78f94180dc88c3f18bdc7d112900478af0eddfb5 Mon Sep 17 00:00:00 2001 From: Phil Hagelberg Date: Wed, 21 Jul 2010 23:17:19 -0700 Subject: [PATCH] Refactor new task. --- src/leiningen/new.clj | 64 +++++++++++++++++++++++++------------------ 1 file changed, 37 insertions(+), 27 deletions(-) diff --git a/src/leiningen/new.clj b/src/leiningen/new.clj index 5cc64f4b..67c13d12 100644 --- a/src/leiningen/new.clj +++ b/src/leiningen/new.clj @@ -7,6 +7,38 @@ Neither group-id nor artifact-id may contain slashes." [clojure.java.io :only [file]] [clojure.contrib.string :only [join]])) +(defn write-project [project-dir project-name] + (.mkdirs (file project-dir)) + (spit (file project-dir "project.clj") + (str "(defproject " project-name " \"1.0.0-SNAPSHOT\"\n" + " :description \"FIXME: write\"\n" + " :dependencies [[org.clojure/clojure \"1.2.0-beta1\"]\n " + " [org.clojure/clojure-contrib \"1.2.0-beta1\"]])"))) + +(defn write-implementation [project-dir project-clj project-ns] + (.mkdirs (.getParentFile (file project-dir "src" project-clj))) + (spit (file project-dir "src" project-clj) + (str "(ns " project-ns ")\n"))) + +(defn write-test [project-dir test-ns project-ns] + (.mkdirs (.getParentFile (file project-dir "test" (ns->path test-ns)))) + (spit (file project-dir "test" (ns->path test-ns)) + (str "(ns " (str test-ns) + "\n (:use [" project-ns "] :reload-all)" + "\n (:use [clojure.test]))\n\n" + "(deftest replace-me ;; FIXME: write\n (is false " + "\"No tests have been written.\"))\n"))) + +(defn write-readme [project-dir artifact-id] + (spit (file project-dir "README") + (join "\n\n" [(str "# " artifact-id) + "FIXME: write description" + "## Usage" "FIXME: write" + "## Installation" "FIXME: write" + "## License" "Copyright (C) 2010 FIXME" + (str "Distributed under the Eclipse Public" + " License, the same as Clojure.\n")]))) + (defn new "Create a new project skeleton. lein new [group-id/]artifact-id [project-dir] @@ -18,38 +50,16 @@ Neither group-id nor artifact-id may contain slashes." (let [project-name (symbol project-name) group-id (namespace project-name) artifact-id (name project-name)] - (.mkdirs (file project-dir)) - (spit (file project-dir "project.clj") - (str "(defproject " project-name " \"1.0.0-SNAPSHOT\"\n" - " :description \"FIXME: write\"\n" - " :dependencies [[org.clojure/clojure \"1.2.0-beta1\"]\n" - " [org.clojure/clojure-contrib \"1.2.0-beta1\"]])")) + (write-project project-dir project-name) (let [prefix (.replace (str project-name) "/" ".") project-ns (str prefix ".core") test-ns (str prefix ".test.core") - project-clj (ns->path project-ns) - test-clj (ns->path test-ns)] - (.mkdirs (file project-dir "test")) - (.mkdirs (.getParentFile (file project-dir "src" project-clj))) - (spit (file project-dir "src" project-clj) - (str "(ns " project-ns ")\n")) - (.mkdirs (.getParentFile (file project-dir "test" test-clj))) - (spit (file project-dir "test" test-clj) - (str "(ns " (str test-ns) - "\n (:use [" project-ns "] :reload-all)" - "\n (:use [clojure.test]))\n\n" - "(deftest replace-me ;; FIXME: write\n (is false " - "\"No tests have been written.\"))\n")) + project-clj (ns->path project-ns)] (spit (file project-dir ".gitignore") (join "\n" ["pom.xml" "*jar" "lib" "classes"])) - (spit (file project-dir "README") - (join "\n\n" [(str "# " artifact-id) - "FIXME: write description" - "## Usage" "FIXME: write" - "## Installation" "FIXME: write" - "## License" "Copyright (C) 2010 FIXME" - (str "Distributed under the Eclipse Public" - " License, the same as Clojure.\n")])) + (write-implementation project-dir project-clj project-ns) + (write-test project-dir test-ns project-ns) + (write-readme project-dir artifact-id) (println "Created new project in:" project-dir)))) ([project-name] (leiningen.new/new project-name (name (symbol project-name)))))