diff options
author | scgilardi <scgilardi@gmail.com> | 2008-07-26 14:40:12 +0000 |
---|---|---|
committer | scgilardi <scgilardi@gmail.com> | 2008-07-26 14:40:12 +0000 |
commit | e34e8b58f7d214541af08461d60004936dd340c7 (patch) | |
tree | 0d722f63c52ae09841d7e5cc2d6ba21b3b17e2ec | |
parent | 0efe85ecc3a9ad613c2b46eba929c7f840a44f9d (diff) |
updates for my remaining libs to the new namespace organization
-rw-r--r-- | ns-utils/ns-utils.clj | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/ns-utils/ns-utils.clj b/ns-utils/ns-utils.clj new file mode 100644 index 00000000..9b19bc22 --- /dev/null +++ b/ns-utils/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 'clojure-contrib.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))) |