Skip to content

Instantly share code, notes, and snippets.

@zahardzhan
Created July 30, 2010 01:42
Show Gist options
  • Save zahardzhan/499692 to your computer and use it in GitHub Desktop.
Save zahardzhan/499692 to your computer and use it in GitHub Desktop.
(defmacro when-supplied [& clauses]
(if (not clauses) true
`(and (or (nil? ~(first clauses))
(do ~(second clauses)))
(when-supplied ~@(next (next clauses))))))
(defn make-download-agent
[line & {:as opts :keys [environment strategy precedence path name]}]
{:pre [(when-supplied strategy (instance? clojure.lang.IFn strategy)
precedence (number? precedence)
environment (map? environment)
path (as-file path :directory true :writeable true)
name (string? name))]}
(when-let [body (make-download-agent-body line)]
(make-agent (merge body
{:state-atom (atom :idle)
:fail-reason-atom (atom nil)
:precedence (or precedence (swap! *precedence* inc))}
(when environment {:environment environment})
(when strategy {:strategy strategy})
(when path {:path (as-file path)})
(when name {:name name})))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment