Skip to content

Commit

Permalink
remove name as an explicit var, move to stencil, and add sanitize exa…
Browse files Browse the repository at this point in the history
…mple to the template template

Signed-off-by: Chris Granger <ibdknox@gmail.com>
  • Loading branch information
ibdknox committed Nov 17, 2011
1 parent 2720808 commit d34d3d4
Show file tree
Hide file tree
Showing 6 changed files with 21 additions and 18 deletions.
6 changes: 3 additions & 3 deletions 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)
[stencil "0.2.0"]]
:eval-in-leiningen true)
4 changes: 2 additions & 2 deletions src/leiningen/new/default.clj
Expand Up @@ -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)])))
["test/{{sanitized}}/core_test.clj" (render "test.clj" data)])))
4 changes: 2 additions & 2 deletions src/leiningen/new/plugin.clj
Expand Up @@ -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)])))
["src/leiningen/{{sanitized}}.clj" (render "name.clj" data)])))
7 changes: 4 additions & 3 deletions src/leiningen/new/template.clj
Expand Up @@ -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")])))
["src/leiningen/new/{{sanitized}}/foo.clj" (render "foo.clj")])))
7 changes: 4 additions & 3 deletions src/leiningen/new/template/temp.clj
Expand Up @@ -6,6 +6,7 @@
(defn {{name}}
"FIXME: write documentation"
[name]
(let [data {:name name}]
(->files name data
["foo.clj" (render "foo.clj" data)])))
(let [data {:name name
:sanitized (sanitize name)}]
(->files data
["src/{{placeholder}}/foo.clj" (render "foo.clj" data)])))
11 changes: 6 additions & 5 deletions 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."
Expand All @@ -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
Expand All @@ -32,13 +32,14 @@
(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)
(.mkdirs (template-path name path data))
(let [[path content] path
path (template-path name path data)]
(.mkdirs (.getParentFile path))
(spit path content)))))
(spit path content)))))

0 comments on commit d34d3d4

Please sign in to comment.