From d34d3d46ae95282937b74cda3e88aa743b8886ef Mon Sep 17 00:00:00 2001 From: Chris Granger Date: Wed, 16 Nov 2011 22:37:06 -0800 Subject: [PATCH] remove name as an explicit var, move to stencil, and add sanitize example to the template template Signed-off-by: Chris Granger --- project.clj | 6 +++--- src/leiningen/new/default.clj | 4 ++-- src/leiningen/new/plugin.clj | 4 ++-- src/leiningen/new/template.clj | 7 ++++--- src/leiningen/new/template/temp.clj | 7 ++++--- src/leiningen/new/templates.clj | 11 ++++++----- 6 files changed, 21 insertions(+), 18 deletions(-) diff --git a/project.clj b/project.clj index 2d9d62b..ecf5dcb 100644 --- a/project.clj +++ b/project.clj @@ -1,5 +1,5 @@ -(defproject lein-newnew "0.1.0" +(defproject lein-newnew "0.1.1" :description "A Leiningen plugin for generating new projects based on templates." :dependencies [[org.clojure/clojure "1.2.1"] - [org.clojars.rayne/clostache "0.7.0-SNAPSHOT"]] - :eval-in-leiningen true) \ No newline at end of file + [stencil "0.2.0"]] + :eval-in-leiningen true) diff --git a/src/leiningen/new/default.clj b/src/leiningen/new/default.clj index c077cbe..36b78cb 100644 --- a/src/leiningen/new/default.clj +++ b/src/leiningen/new/default.clj @@ -10,9 +10,9 @@ (let [data {:name name :sanitized (sanitize name)}] (println "Generating a project called" name "based on the 'default' template.") - (->files name data + (->files data ["project.clj" (render "project.clj" data)] ["README.md" (render "README.md" data)] [".gitignore" (render "gitignore" data)] ["src/{{sanitized}}/core.clj" (render "core.clj" data)] - ["test/{{sanitized}}/core_test.clj" (render "test.clj" data)]))) \ No newline at end of file + ["test/{{sanitized}}/core_test.clj" (render "test.clj" data)]))) diff --git a/src/leiningen/new/plugin.clj b/src/leiningen/new/plugin.clj index 945b142..8216486 100644 --- a/src/leiningen/new/plugin.clj +++ b/src/leiningen/new/plugin.clj @@ -13,8 +13,8 @@ :unprefixed-name unprefixed :sanitized (sanitize unprefixed)}] (println (str "Generating a skeleton Leiningen plugin called " name ".")) - (->files name data + (->files data ["project.clj" (render "project.clj" data)] ["README.md" (render "README.md" data)] [".gitignore" (render "gitignore" data)] - ["src/leiningen/{{sanitized}}.clj" (render "name.clj" data)]))) \ No newline at end of file + ["src/leiningen/{{sanitized}}.clj" (render "name.clj" data)]))) diff --git a/src/leiningen/new/template.clj b/src/leiningen/new/template.clj index 7aff4e1..e6d0e81 100644 --- a/src/leiningen/new/template.clj +++ b/src/leiningen/new/template.clj @@ -7,11 +7,12 @@ "A skeleton 'lein new' template." [name] (let [data {:name name - :sanitized (sanitize name)}] + :sanitized (sanitize name) + :placeholder "{{sanitized}}"}] (println "Generating skeleton 'lein new' template project.") - (->files name data + (->files data ["README.md" (render "README.md" data)] ["project.clj" (render "project.clj" data)] [".gitignore" (render "gitignore" data)] ["src/leiningen/new/{{sanitized}}.clj" (render "temp.clj" data)] - ["src/leiningen/new/{{sanitized}}/foo.clj" (render "foo.clj")]))) \ No newline at end of file + ["src/leiningen/new/{{sanitized}}/foo.clj" (render "foo.clj")]))) diff --git a/src/leiningen/new/template/temp.clj b/src/leiningen/new/template/temp.clj index 3e4ce7e..6186909 100644 --- a/src/leiningen/new/template/temp.clj +++ b/src/leiningen/new/template/temp.clj @@ -6,6 +6,7 @@ (defn {{name}} "FIXME: write documentation" [name] - (let [data {:name name}] - (->files name data - ["foo.clj" (render "foo.clj" data)]))) \ No newline at end of file + (let [data {:name name + :sanitized (sanitize name)}] + (->files data + ["src/{{placeholder}}/foo.clj" (render "foo.clj" data)]))) diff --git a/src/leiningen/new/templates.clj b/src/leiningen/new/templates.clj index 93768ce..3dc97fe 100644 --- a/src/leiningen/new/templates.clj +++ b/src/leiningen/new/templates.clj @@ -1,7 +1,7 @@ (ns leiningen.new.templates (:require [clojure.java.io :as io] [clojure.string :as string] - [clostache.parser :as parser])) + [stencil.core :as stencil])) (defn slurp-resource "Reads the contents of a file on the classpath." @@ -13,7 +13,7 @@ [s] (string/replace s #"-" "_")) -(def render-text parser/render) +(def render-text stencil/render-string) (defn renderer "Create a renderer function that looks for mustache templates in the @@ -32,8 +32,9 @@ (defn ->files "Generate a file with content. path can be a java.io.File or string. It will be turned into a File regardless. Any parent directories will - be created automatically." - [name data & paths] + be created automatically. Data should include a key for :name so that + the project is created in the correct directory" + [{:keys [name] :as data} & paths] (.mkdir (io/file name)) (doseq [path paths] (if (string? path) @@ -41,4 +42,4 @@ (let [[path content] path path (template-path name path data)] (.mkdirs (.getParentFile path)) - (spit path content))))) \ No newline at end of file + (spit path content)))))