cryogen-core/src/cryogen_core/sass.clj

70 lines
2.5 KiB
Clojure
Raw Normal View History

2014-12-05 15:56:40 +00:00
(ns cryogen-core.sass
2015-02-21 21:56:38 +00:00
(:require [clojure.java.shell :as shell]
[clojure.java.io :as io]
[text-decoration.core :refer :all]
[cryogen-core.io :refer [ignore match-re-filter]]))
2014-12-04 16:38:48 +00:00
2015-02-21 21:56:38 +00:00
(defmacro sh
[& args]
(let [valid-args (remove nil? args)]
`(shell/sh ~@valid-args)))
2014-12-04 16:38:48 +00:00
(defn sass-installed?
"Checks for the installation of Sass."
[]
(= 0 (:exit (sh "sass" "--version"))))
2015-02-21 21:56:38 +00:00
(defn compass-installed?
"Checks for the installation of Compass."
[]
(= 0 (:exit (sh "compass" "--version"))))
2014-12-04 16:38:48 +00:00
(defn find-sass-files
"Given a Diretory, gets files, Filtered to those having scss or sass
extention. Ignores files matching any ignored regexps."
[base-dir dir ignored-files]
2015-09-14 10:06:35 +00:00
(let [^java.io.FileFilter filename-filter (match-re-filter #"(?i:s[ca]ss$)")]
(->> (.listFiles (io/file base-dir dir) filename-filter)
2015-09-14 10:06:35 +00:00
(filter #(not (.isDirectory ^java.io.File %)))
(filter (ignore ignored-files))
2015-09-14 10:06:35 +00:00
(map #(.getName ^java.io.File %)))))
2014-12-04 16:38:48 +00:00
(defn compile-sass-file!
"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."
[{: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))))
2014-12-04 16:38:48 +00:00
(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. "
[{: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?)
2014-12-04 16:38:48 +00:00
;; I found sass files,
;; If sass is installed
(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"))))