Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/twbs/rorschach.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/com/getbootstrap/rorschach/auditing/ModifiedFilesAuditor.scala')
-rw-r--r--src/main/scala/com/getbootstrap/rorschach/auditing/ModifiedFilesAuditor.scala54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/main/scala/com/getbootstrap/rorschach/auditing/ModifiedFilesAuditor.scala b/src/main/scala/com/getbootstrap/rorschach/auditing/ModifiedFilesAuditor.scala
new file mode 100644
index 0000000..03dc9fd
--- /dev/null
+++ b/src/main/scala/com/getbootstrap/rorschach/auditing/ModifiedFilesAuditor.scala
@@ -0,0 +1,54 @@
+package com.getbootstrap.rorschach.auditing
+
+object ModifiedFilesAuditor {
+ private implicit class PathString(filepath: String) {
+ def isDist: Boolean = filepath.startsWith("dist/")
+ def isNonMinifiedCss: Boolean = filepath.endsWith(".css") && !filepath.endsWith(".min.css")
+ def isSourceLess: Boolean = filepath.startsWith("less/") && filepath.endsWith(".less")
+ def isNonMinifiedJs: Boolean = filepath.endsWith(".js") && !filepath.endsWith(".min.js")
+ def isDistCss: Boolean = filepath.isDist && filepath.isNonMinifiedCss
+ def isDistJs: Boolean = filepath.isDist && filepath.isNonMinifiedJs
+ def isSourceJs: Boolean = filepath.startsWith("js/") && filepath.isNonMinifiedJs
+ }
+
+ def audit(filepaths: Set[String]): Seq[String] = {
+ Seq(auditCname(filepaths), auditCss(filepaths), auditJs(filepaths)).flatten
+ }
+
+ /**
+ * If dist/bootstrap.css etc. is modified, then less/<*>.less must also have been modified.
+ */
+ private def auditCss(filepaths: Set[String]): Option[String] = {
+ val cssModified = filepaths.exists{ _.isDistCss }
+ val lessModified = filepaths.exists{ _.isSourceLess }
+ if (cssModified && !lessModified) {
+ Some("Changes must be made to the original Less source code, not just the compiled CSS.")
+ }
+ else {
+ None
+ }
+ }
+
+ /**
+ * If dist/js/bootstrap.js etc. is modified, then js/<*>.js must also have been modified.
+ */
+ private def auditJs(filepaths: Set[String]): Option[String] = {
+ val distJsModified = filepaths.exists{ _.isDistJs }
+ val sourceJsModified = filepaths.exists{ _.isSourceJs }
+ if (distJsModified && !sourceJsModified) {
+ Some("Changes must be made to the original JS source code, not just the generated concatenated JS.")
+ }
+ else {
+ None
+ }
+ }
+
+ private def auditCname(filepaths: Set[String]): Option[String] = {
+ if (filepaths.contains("CNAME")) {
+ Some("The CNAME file should never be modified (except in extremely unlikely circumstances).")
+ }
+ else {
+ None
+ }
+ }
+}