diff --git a/README.markdown b/README.markdown index 87a361f..97c7084 100644 --- a/README.markdown +++ b/README.markdown @@ -4,7 +4,7 @@ This plugin provides the 'new' task for creating fresh project skeletons from Le It is extensible via templates and has a simple API for creating them. With this new task, you can create templates for any sort of project scaffolding you can imagine, as simple or complex as you like. -By default, it includes three templates: default, plugin, and template. 'default' is the same as what Leiningen's old 'new' task spits out, while 'plugin' generates a skeleton Leiningen plugin project. 'template' is a very meta template for creating new templates! +By default, it includes four templates: default, app, plugin, and template. 'default' is for libraries, the same as what Leiningen's old 'new' task spits out. 'app' is for applications, while 'plugin' generates a skeleton Leiningen plugin project. 'template' is a very meta template for creating new templates. TEMPLATES! WOOT! @@ -33,11 +33,11 @@ This plugin **requires** Leiningen 1.6.2 or later. Please confirm that you have You can pull in a newer version of this plugin than the one that comes with Leiningen 2 if you like; just add it to the `:plugins` section of your `:user` profile in ~/.lein/profiles.clj: ```clj -{:user {:plugins [[lein-newnew "0.2.6"]]}} +{:user {:plugins [[lein-newnew "0.3.4"]]}} ``` ## License -Copyright © 2011-2012 Anthony Grimes +Copyright © 2011-2012 Anthony Grimes and contributors Distributed under the Eclipse Public License, the same as Clojure. diff --git a/src/leiningen/new/app.clj b/src/leiningen/new/app.clj new file mode 100644 index 0000000..de43d35 --- /dev/null +++ b/src/leiningen/new/app.clj @@ -0,0 +1,21 @@ +(ns leiningen.new.app + "Generate a basic application project." + (:use [leiningen.new.templates :only [renderer year project-name + ->files sanitize-ns name-to-path]])) + +(defn app + "An application project template." + [name] + (let [render (renderer "app") + data {:raw-name name + :name (project-name name) + :namespace (sanitize-ns name) + :nested-dirs (name-to-path name) + :year (year)}] + (println "Generating a project called" name "based on the 'app' template.") + (->files data + ["project.clj" (render "project.clj" data)] + ["README.md" (render "README.md" data)] + [".gitignore" (render "gitignore" data)] + ["src/{{nested-dirs}}/core.clj" (render "core.clj" data)] + ["test/{{nested-dirs}}/core_test.clj" (render "test.clj" data)]))) diff --git a/src/leiningen/new/app/README.md b/src/leiningen/new/app/README.md new file mode 100644 index 0000000..466171d --- /dev/null +++ b/src/leiningen/new/app/README.md @@ -0,0 +1,35 @@ +# {{name}} + +FIXME: description + +## Installation + +Download from http://example.com/FIXME. + +## Usage + +FIXME: explanation + + $ java -jar {{name}}-0.1.0-standalone.jar [args] + +## Options + +FIXME: listing of options this app accepts. + +## Examples + +... + +### Bugs + +... + +### Any Other Sections +### That You Think +### Might be Useful + +## License + +Copyright © {{year}} FIXME + +Distributed under the Eclipse Public License, the same as Clojure. diff --git a/src/leiningen/new/app/core.clj b/src/leiningen/new/app/core.clj new file mode 100644 index 0000000..d749b71 --- /dev/null +++ b/src/leiningen/new/app/core.clj @@ -0,0 +1,7 @@ +(ns {{namespace}}.core + (:gen-class)) + +(defn -main + "I don't do a whole lot ... yet." + [& args] + (println "Hello, World!")) diff --git a/src/leiningen/new/app/gitignore b/src/leiningen/new/app/gitignore new file mode 100644 index 0000000..ee508f7 --- /dev/null +++ b/src/leiningen/new/app/gitignore @@ -0,0 +1,10 @@ +/target +/lib +/classes +/checkouts +pom.xml +*.jar +*.class +.lein-deps-sum +.lein-failures +.lein-plugins diff --git a/src/leiningen/new/app/project.clj b/src/leiningen/new/app/project.clj new file mode 100644 index 0000000..217bcb4 --- /dev/null +++ b/src/leiningen/new/app/project.clj @@ -0,0 +1,7 @@ +(defproject {{raw-name}} "0.1.0-SNAPSHOT" + :description "FIXME: write description" + :url "http://example.com/FIXME" + :license {:name "Eclipse Public License" + :url "http://www.eclipse.org/legal/epl-v10.html"} + :dependencies [[org.clojure/clojure "1.3.0"]] + :main {{raw-name}}.core) diff --git a/src/leiningen/new/app/test.clj b/src/leiningen/new/app/test.clj new file mode 100644 index 0000000..301aafe --- /dev/null +++ b/src/leiningen/new/app/test.clj @@ -0,0 +1,7 @@ +(ns {{namespace}}.core-test + (:use clojure.test + {{name}}.core)) + +(deftest a-test + (testing "FIXME, I fail." + (is (= 0 1)))) \ No newline at end of file diff --git a/src/leiningen/new/default.clj b/src/leiningen/new/default.clj index f335381..dc7b9e1 100644 --- a/src/leiningen/new/default.clj +++ b/src/leiningen/new/default.clj @@ -1,14 +1,12 @@ (ns leiningen.new.default - "Generate a basic project." + "Generate a library project." (:use [leiningen.new.templates :only [renderer year project-name ->files sanitize-ns name-to-path]])) (defn default - "A general project template. + "A general project template for libraries. -This template is different from most others in that it supports -creating a project with a groupId. You can do `lein new foo.bar/baz` -for example." +Accepts a group id in the project name: `lein new foo.bar/baz`" [name] (let [render (renderer "default") data {:raw-name name @@ -17,6 +15,7 @@ for example." :nested-dirs (name-to-path name) :year (year)}] (println "Generating a project called" name "based on the 'default' template.") + (println "To see other templates (app, lein plugin, etc), try `lein help new`.") (->files data ["project.clj" (render "project.clj" data)] ["README.md" (render "README.md" data)] diff --git a/src/leiningen/new/default/README.md b/src/leiningen/new/default/README.md index 1fd16bf..904298d 100644 --- a/src/leiningen/new/default/README.md +++ b/src/leiningen/new/default/README.md @@ -1,8 +1,6 @@ # {{name}} -I'm an app. Or maybe I'm a library? I haven't decided yet. - -The choice is up to you! +A Clojure library designed to ... well, that part is up to you. ## Usage