Skip to content

Commit

Permalink
makes file finding flexible to accomodate cljc files. modernizes
Browse files Browse the repository at this point in the history
  • Loading branch information
slagyr committed Jun 19, 2015
1 parent 2e71b75 commit 7612164
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 22 deletions.
1 change: 1 addition & 0 deletions .gitignore
Expand Up @@ -4,3 +4,4 @@ lib
classes
sample_src
.idea
target
20 changes: 15 additions & 5 deletions Fresh.iml
Expand Up @@ -6,14 +6,18 @@
</facet>
</component>
<component name="NewModuleRootManager" inherit-compiler-output="false">
<output url="file://$MODULE_DIR$/classes" />
<output-test url="file://$MODULE_DIR$/classes" />
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/classes" />
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/dev-resources" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/resources" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/sample_src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/spec" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="jdk" jdkName="1.6" jdkType="JavaSDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module-library">
<library>
Expand Down Expand Up @@ -60,6 +64,12 @@
<SOURCES />
</library>
</orderEntry>
<orderEntry type="library" name="Leiningen: clojure-complete:0.2.3" level="project" />
<orderEntry type="library" name="Leiningen: org.clojure/clojure:1.6.0" level="project" />
<orderEntry type="library" name="Leiningen: org.clojure/tools.nrepl:0.2.6" level="project" />
<orderEntry type="library" name="Leiningen: speclj:3.2.0" level="project" />
<orderEntry type="library" name="Leiningen: fresh:1.0.2" level="project" />
<orderEntry type="library" name="Leiningen: mmargs:1.2.0" level="project" />
<orderEntry type="library" name="Leiningen: trptcolin/versioneer:0.1.1" level="project" />
</component>
</module>

</module>
17 changes: 8 additions & 9 deletions project.clj
@@ -1,9 +1,8 @@
(defproject fresh "1.0.2"
:description "A library to keep your clojure runtime 'Fresh'."
:dependencies [[org.clojure/clojure "1.2.0"]]
:dev-dependencies [[speclj "1.2.0"]
[lein-clojars "0.6.0"]]
:test-path "spec"
:dev-resources-path "sample_src"

)
(defproject fresh "1.1.0"
:description "A library to keep your clojure runtime 'Fresh'."
:dependencies [[org.clojure/clojure "1.6.0"]]
:profiles {:dev {:dependencies [[speclj "3.2.0"]]
:resource-paths ["sample_src"]}}
:plugins [[speclj "3.2.0"]]
:source-paths ["src"]
:test-paths ["spec"])
15 changes: 12 additions & 3 deletions spec/fresh/core_spec.clj
Expand Up @@ -89,11 +89,20 @@
(before (establish-sample-files))

(it "should not include hidden files as clj files"

(let [hidden-file (write-file "sample/.hidden.clj" "I'm a hidden file!")
files (clj-files-in sample-dir)]
(write-file "sample/.hidden.clj" "I'm a hidden file!")
(let [files (clj-files-in sample-dir)]
(should= false (contains? (set (map #(.getName %) files)) ".hidden.clj"))))

(it "finds cljc files by default"
(write-file "sample/portable.cljc" "I'm portable")
(let [files (clj-files-in sample-dir)]
(should-contain "portable.cljc" (set (map #(.getName %) files)))))

(it "finds specified files by default"
(write-file "sample/portable.cljx" "I'm antiquated")
(let [files (find-files-in #".*\.cljx" sample-dir)]
(should-contain "portable.cljx" (set (map #(.getName %) files)))))

(it "finds src files from ns name"
(should= (sample-file "sample/core.clj") (ns-to-file "sample.core"))
(should= (sample-file "sample/a/one.clj") (ns-to-file "sample.a.one")))
Expand Down
14 changes: 9 additions & 5 deletions src/fresh/core.clj
Expand Up @@ -6,16 +6,20 @@
(:import
[java.io PushbackReader FileReader File]))

(def clj-file-regex #".*\.clj")
(defn clj-files-in
"Returns a seq of all clojure source files contained in the given directories."
[& dirs]
(defn find-files-in
"Returns a seq of all files (matching the regex) contained in the given directories."
[pattern & dirs]
(let [dirs (map #(.getCanonicalFile %) dirs)
files (reduce #(into %1 (file-seq (file %2))) [] dirs)
files (remove #(.isHidden %) files)
clj-files (filter #(re-matches clj-file-regex (.getName %)) files)]
clj-files (filter #(re-matches pattern (.getName %)) files)]
clj-files))

(def clj-file-regex #".*\.clj(c)?")
(defn clj-files-in
"Returns a seq of all clojure source files contained in the given directories."
[& dirs] (apply find-files-in clj-file-regex dirs))

;; Resolving ns names ---------------------------------------------------------------------------------------------------
;
(defn ns-to-filename
Expand Down

0 comments on commit 7612164

Please sign in to comment.