aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorscgilardi <scgilardi@gmail.com>2008-04-24 01:15:25 +0000
committerscgilardi <scgilardi@gmail.com>2008-04-24 01:15:25 +0000
commitd9b1d506a278854064c8986806899e0de930e843 (patch)
tree0f2904874dcd6b9b6df851bec5f8e315d3ddab6f
parent72d5e41479b462b5ce0115abbfbc50787780dafc (diff)
add ns-utils.clj and update example code in sql.clj to be more robust about loading the driver class
-rw-r--r--ns-utils.clj88
-rw-r--r--sql.clj4
2 files changed, 90 insertions, 2 deletions
diff --git a/ns-utils.clj b/ns-utils.clj
new file mode 100644
index 00000000..ca2395e7
--- /dev/null
+++ b/ns-utils.clj
@@ -0,0 +1,88 @@
+;; Copyright (c) Stephen C. Gilardi. All rights reserved.
+;; The use and distribution terms for this software are covered by the
+;; Common Public License 1.0 (http://opensource.org/licenses/cpl.php)
+;; which can be found in the file CPL.TXT at the root of this distribution.
+;; By using this software in any fashion, you are agreeing to be bound by
+;; the terms of this license.
+;; You must not remove this notice, or any other, from this software.
+;;
+;; ns-utils.clj
+;;
+;; Namespace Utilities
+;;
+;; 'ns' returns the namespace named by a symbol or throws
+;; if the namespace does not exist
+;;
+;; 'ns-vars' returns a sorted seq of symbols naming public vars
+;; in a namespace
+;;
+;; 'print-dir' prints a sorted directory of public vars in a
+;; namespace
+;;
+;; 'print-docs' prints documentation for the public vars in a
+;; namespace
+;;
+;; Convenience
+;;
+;; 'vars' returns a sorted seq of symbols naming public vars
+;; in a namespace (macro)
+;;
+;; 'dir' prints a sorted directory of public vars in a
+;; namespace (macro)
+;;
+;; 'docs' prints documentation for the public vars in a
+;; namespace (macro)
+;;
+;; scgilardi (gmail)
+;; 23 April 2008
+
+(clojure/in-ns 'ns-utils)
+(clojure/refer 'clojure)
+
+;; Namespace Utilities
+
+(defn ns
+ "Returns the namespace named by ns-sym or throws if the
+ namespace does not exist"
+ [ns-sym]
+ (let [ns (find-ns ns-sym)]
+ (when-not ns
+ (throw (new Exception (str "Unable to find namespace: "
+ ns-sym))))
+ ns))
+
+(defn ns-vars
+ "Returns a sorted seq of symbols naming public vars in
+ a namespace"
+ [ns]
+ (sort (map first (ns-publics ns))))
+
+(defn print-dir
+ "Prints a sorted directory of public vars in a namespace"
+ [ns]
+ (doseq item (ns-vars ns)
+ (println item)))
+
+(defn print-docs
+ "Prints documentation for the public vars in a namespace"
+ [ns]
+ (doseq item (ns-vars ns)
+ (print-doc (ns-resolve ns item))))
+
+;; Convenience
+
+(defmacro vars
+ "Returns a sorted seq of symbols naming public vars in
+ a namespace"
+ [nsname]
+ `(ns-vars (ns '~nsname)))
+
+(defmacro dir
+ "Prints a sorted directory of public vars in a namespace"
+ [nsname]
+ `(print-dir (ns '~nsname)))
+
+(defmacro docs
+ "Prints documentation for the public vars in a namespace"
+ [nsname]
+ `(print-docs (ns '~nsname)))
diff --git a/sql.clj b/sql.clj
index efce6a0a..f9808abc 100644
--- a/sql.clj
+++ b/sql.clj
@@ -11,7 +11,7 @@
;; A Clojure interface to sql databases via jdbc
;;
;; scgilardi (gmail)
-;; 2 April 2008
+;; 23 April 2008
(clojure/in-ns 'sql)
(clojure/refer 'clojure)
@@ -79,7 +79,7 @@
(require 'sql)
- (class org.sqlite.JDBC)
+ (. Class (forName "org.sqlite.JDBC"))
(defn db []
(get-connection "sqlite" "test.db"))