This repository has been archived by the owner on Dec 10, 2017. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 4f4aa48
Showing
5 changed files
with
169 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
pom.xml | ||
*jar | ||
/lib/ | ||
/classes/ | ||
.lein-deps-sum |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
# lein-gae | ||
|
||
lein-gae is a Leiningen plugin that automates common Google App Engine tasks. | ||
|
||
## Usage | ||
|
||
lein gae | ||
lein gae new | ||
lein gae compile | ||
lein gae jar | ||
lein gae clean | ||
|
||
## License | ||
|
||
Copyright (C) 2011 Jun Kikuchi | ||
|
||
Distributed under the Eclipse Public License, the same as Clojure. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
(defproject lein-gae "1.0.0-SNAPSHOT" | ||
:description "Leiningen plugin for Google App Engine." | ||
:eval-in-leiningen true, | ||
:dependencies [[ring/ring-servlet "0.3.8"]]) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,137 @@ | ||
(ns leiningen.gae | ||
(:require [clojure.java.io :as io] | ||
[leiningen.help :as lein-help] | ||
[leiningen.clean :as lein-clean] | ||
[leiningen.deps :as lein-deps] | ||
[leiningen.jar :as lein-jar])) | ||
|
||
(defn- -x_ [s] (.replaceAll s "-" "_")) | ||
(defn- _x- [s] (.replaceAll s "_" "-")) | ||
|
||
(defn- strln [& xs] (apply str (interpose "\n" xs))) | ||
|
||
(defn- mkdirs [& path] (.mkdirs (apply io/file path))) | ||
|
||
(defn- path [& xs] (.getPath (apply io/file xs))) | ||
|
||
(defn- write | ||
[content & path] | ||
(let [file (apply io/file path)] | ||
(when-not (.exists file) | ||
(with-open [out (io/writer file)] (.write out content))))) | ||
|
||
(defn gae-project | ||
[project] | ||
(let [p (-x_ (:name project)) | ||
dir-lib (path "war" "WEB-INF" "lib")] | ||
(assoc project | ||
:aot [(symbol (str p ".servlet"))] | ||
:library-path dir-lib | ||
:target-dir dir-lib | ||
:extra-files-to-clean [dir-lib] | ||
:omit-source true))) | ||
|
||
(def fmt-servlet | ||
(strln | ||
"(ns %s.%s" | ||
" (:gen-class :extends javax.servlet.http.HttpServlet)" | ||
" (:use ring.util.servlet %s.core))" | ||
"" | ||
"(defservice %s)" )) | ||
|
||
(def fmt-core | ||
(strln | ||
"(ns %s.core)" | ||
"" | ||
"(defn %s [request]" | ||
" {:status 200 :headers {} :body \"Hello World!\" })" )) | ||
|
||
(def fmt-web_xml | ||
(strln | ||
"<?xml version=\"1.0\" encoding=\"utf-8\"?>" | ||
"<!DOCTYPE web-app PUBLIC" | ||
" \"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN\"" | ||
" \"http://java.sun.com/dtd/web-app_2_3.dtd\">" | ||
"" | ||
"<web-app xmlns=\"http://java.sun.com/xml/ns/javaee\" version=\"2.5\">" | ||
" <servlet>" | ||
" <servlet-name>%s</servlet-name>" | ||
" <servlet-class>%s.servlet</servlet-class>" | ||
" </servlet>" | ||
" <servlet-mapping>" | ||
" <servlet-name>%s</servlet-name>" | ||
" <url-pattern>/*</url-pattern>" | ||
" </servlet-mapping>" | ||
" <welcome-file-list>" | ||
" <welcome-file>index.html</welcome-file>" | ||
" </welcome-file-list>" | ||
"</web-app>" )) | ||
|
||
(def fmt-appengine-web_xml | ||
(strln | ||
"<?xml version=\"1.0\" encoding=\"utf-8\"?>" | ||
"<appengine-web-app xmlns=\"http://appengine.google.com/ns/1.0\">" | ||
" <application>%s</application>" | ||
" <version>1</version>" | ||
"</appengine-web-app>" )) | ||
|
||
(defn- src-servlet | ||
[project] | ||
(let [p (:name project)] | ||
(format fmt-servlet p "servlet" p p p))) | ||
|
||
(defn- src-core | ||
[project] | ||
(let [p (:name project)] | ||
(format fmt-core p p))) | ||
|
||
(defn- src-web_xml | ||
[project] | ||
(let [p (:name project)] | ||
(format fmt-web_xml p p p))) | ||
|
||
(defn- src-appengine-web_xml | ||
[project] | ||
(let [p (:name project)] | ||
(format fmt-appengine-web_xml p))) | ||
|
||
(defn new | ||
"Create a new GAE project skeleton." | ||
[project] | ||
(let [p (-x_ (:name project))] | ||
(mkdirs "war" "WEB-INF" "lib") | ||
(write (src-web_xml project) "war" "WEB-INF" "web.xml") | ||
(write (src-appengine-web_xml project) "war" "WEB-INF" "appengine-web.xml") | ||
(mkdirs "src" p) | ||
(write (src-core project) "src" p "core.clj") | ||
(write (src-servlet project) "src" p "servlet.clj")) | ||
(println "Created new Google App Engine project.")) | ||
|
||
(defn deps | ||
"Download all dependencies and put them in war/WEB-INF/lib." | ||
[project] | ||
(lein-deps/deps project)) | ||
|
||
(defn jar | ||
"Build a jar file and put it in war/WEB-INF/lib." | ||
[project] | ||
(lein-jar/jar project (lein-jar/get-default-jar-name project))) | ||
|
||
(defn clean | ||
"Remove compiled class files and jars from project." | ||
[project] | ||
(lein-clean/clean project) | ||
(mkdirs "war" "WEB-INF" "lib")) | ||
|
||
(defn gae | ||
"Manage a Google App Engine application tasks." | ||
{:help-arglists '([new clean deps jar]) | ||
:subtasks [#'new #'clean #'deps #'jar]} | ||
([project] | ||
(println (lein-help/help-for "gae"))) | ||
([project subtask] | ||
((case subtask | ||
"new" new | ||
"deps" deps | ||
"jar" jar | ||
"clean" clean) (gae-project project)))) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
(ns lein-gae.test.core | ||
(:use [lein-gae.core]) | ||
(:use [clojure.test])) | ||
|
||
(deftest replace-me ;; FIXME: write | ||
(is false "No tests have been written.")) |