diff --git a/src/cryogen_core/compiler.clj b/src/cryogen_core/compiler.clj index 53177f8..b9e725a 100644 --- a/src/cryogen_core/compiler.clj +++ b/src/cryogen_core/compiler.clj @@ -321,9 +321,10 @@ (rss/make-filtered-channels public config posts-by-tag) (println (blue "compiling sass")) (sass/compile-sass->css! - (str "resources/templates/" sass-src) - (str "resources/public" blog-prefix "/" sass-dest) - ignored-files))) + {:src-sass sass-src + :dest-sass (str "../public" blog-prefix "/" sass-dest) + :ignored-files ignored-files + :base-dir "resources/templates/"}))) (defn compile-assets-timed [] (time diff --git a/src/cryogen_core/sass.clj b/src/cryogen_core/sass.clj index 93d2c2c..4da4472 100644 --- a/src/cryogen_core/sass.clj +++ b/src/cryogen_core/sass.clj @@ -1,19 +1,30 @@ (ns cryogen-core.sass - (:require [clojure.java.shell :refer [sh]] + (:require [clojure.java.shell :as shell] [clojure.java.io :as io] + [text-decoration.core :refer :all] [cryogen-core.io :refer [ignore match-re-filter]])) +(defmacro sh + [& args] + (let [valid-args (remove nil? args)] + `(shell/sh ~@valid-args))) + (defn sass-installed? "Checks for the installation of Sass." [] (= 0 (:exit (sh "sass" "--version")))) +(defn compass-installed? + "Checks for the installation of Compass." + [] + (= 0 (:exit (sh "compass" "--version")))) + (defn find-sass-files "Given a Diretory, gets files, Filtered to those having scss or sass extention. Ignores files matching any ignored regexps." - [dir ignored-files] + [base-dir dir ignored-files] (let [filename-filter (match-re-filter #"(?i:s[ca]ss$)")] - (->> (.listFiles (io/file dir) filename-filter) + (->> (.listFiles (io/file base-dir dir) filename-filter) (filter #(not (.isDirectory %))) (filter (ignore ignored-files)) (map #(.getName %))))) @@ -22,36 +33,37 @@ "Given a sass file which might be in src-sass directory, output the resulting css in dest-sass. All error handling is done by sh / launching the sass command." - [sass-file - src-sass - dest-sass] - (sh "sass" - "--update" - (str src-sass "/" sass-file) - (str dest-sass "/" ))) + [{:keys [src-sass + dest-sass + base-dir]}] + (shell/with-sh-dir base-dir + (sh "sass" + "--update" + (when (compass-installed?) "--compass") + (str src-sass ":" dest-sass)))) (defn compile-sass->css! "Given a directory src-sass, looks for all sass files and compiles them into dest-sass. Prompts you to install sass if he finds sass files and can't find the command. Shows you any problems it comes across when compiling. " - [src-sass - dest-sass - ignored-files] - (let [sass-files (find-sass-files src-sass ignored-files)] - (if (seq sass-files) + [{:keys [src-sass + dest-sass + ignored-files + base-dir] :as opts}] + (when-let [sass-files (seq (find-sass-files base-dir src-sass ignored-files))] + (if (sass-installed?) ;; I found sass files, ;; If sass is installed - (if (sass-installed?) - ;; I compile all files - (doseq [a-file sass-files] - (println "Compiling Sass File:" a-file) - (let [result (compile-sass-file! a-file src-sass dest-sass)] - (if (zero? (:exit result)) - ;; no problems in sass compilation - (println "Successfully compiled:" a-file) - ;; else I show the error - (println (:err result))))) - ;; Else I prompt to install Sass - (println "Sass seems not to be installed, but you have scss / sass files in " - src-sass - " - You might want to install it here: sass-lang.com"))))) + (do + (println "Compiling Sass Files:" src-sass dest-sass) + (let [result (compile-sass-file! opts)] + (if (zero? (:exit result)) + ;; no problems in sass compilation + (println "Successfully compiled sass files") + ;; else I show the error + (println (red (:err result)) + (red (:out result)))))) + ;; Else I prompt to install Sass + (println "Sass seems not to be installed, but you have scss / sass files in " + src-sass + " - You might want to install it here: sass-lang.com"))))