diff options
author | scgilardi <scgilardi@gmail.com> | 2008-04-24 01:15:25 +0000 |
---|---|---|
committer | scgilardi <scgilardi@gmail.com> | 2008-04-24 01:15:25 +0000 |
commit | d9b1d506a278854064c8986806899e0de930e843 (patch) | |
tree | 0f2904874dcd6b9b6df851bec5f8e315d3ddab6f | |
parent | 72d5e41479b462b5ce0115abbfbc50787780dafc (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.clj | 88 | ||||
-rw-r--r-- | sql.clj | 4 |
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))) @@ -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")) |