noprompt / frak

Transform collections of strings into regular expressions.
1.13k stars 39 forks source link

Pass arguments to frak #8

Closed yPhil-gh closed 11 years ago

yPhil-gh commented 11 years ago

I tried to integrate frak into a regular Clojure projet (https://gist.github.com/xaccrocheur/6333714#file-frak-command-line-attempts) but I cannot seem to get it to take my arguments, a clean vector of strings..?

noprompt commented 11 years ago

frak escapes the " character along with several others. Try dropping the quotes around the input.

yPhil-gh commented 11 years ago

@noprompt Thanks for your answer ; I tried that and many other things, allways getting a Exception in thread "main" java.lang.RuntimeException: java.lang.AssertionError: Assert failed: (every? string? strs) so I'm really wondering how to pass arguments to frak...?

(require 'frak)

(defn -main [& args]
  "I don't do a whole lot."
  (println (apply str args))
  (println "vector output : %s" (frak/pattern (vector args))))

$ lein trampoline run plip ploup plipploup Exception in thread "main" java.lang.RuntimeException: java.lang.AssertionError: Assert failed: (every? string? strs) at clojure.lang.Util.runtimeException(Util.java:165) at clojure.lang.Compiler.eval(Compiler.java:6476) at clojure.lang.Compiler.eval(Compiler.java:6455) at clojure.lang.Compiler.eval(Compiler.java:6431) at clojure.core$eval.invoke(core.clj:2795) at clojure.main$eval_opt.invoke(main.clj:296) at clojure.main$initialize.invoke(main.clj:315) at clojure.main$null_opt.invoke(main.clj:348) at clojure.main$main.doInvoke(main.clj:426) at clojure.lang.RestFn.invoke(RestFn.java:421) at clojure.lang.Var.invoke(Var.java:405) at clojure.lang.AFn.applyToHelper(AFn.java:163) at clojure.lang.Var.applyTo(Var.java:518) at clojure.main.main(main.java:37) Caused by: java.lang.AssertionError: Assert failed: (every? string? strs) at frak$pattern.invoke(frak.clj:87) at frak$pattern.invoke(frak.clj:90) at regard.core$_main.doInvoke(core.clj:8) at clojure.lang.RestFn.invoke(RestFn.java:421) at clojure.lang.Var.invoke(Var.java:405) at user$eval38.invoke(NO_SOURCE_FILE:1) at clojure.lang.Compiler.eval(Compiler.java:6465) ... 12 more

noprompt commented 11 years ago

Two things here. First, the form

(println "vector output : %s" (frak/pattern (vector args)))

should be

(println "vector output : %s" (frak/pattern (vec args)))

or even better just

(println "vector output : %s" (frak/pattern args))

vec will convert args to a vector; (vector args) is a vector containing one element, the list args. This is why you are seeing the AssertionError.

Second, you should upgrade to v0.1.3 where it no longer uses the precondition (every? string? strs). Be aware, however, every element in the collection you pass to frak/pattern will be converted to a string.

yPhil-gh commented 11 years ago

(vec args) did it, thank you very much.

noprompt commented 11 years ago

Glad I could help. :smile: