May be wrap it up in a `wait-until-with-meta` macro as Herwig suggested? Then you can search and replace the invocations. ~BG
On Fri, May 29, 2015 at 9:30 PM, Shalaka Patil <shal...@helpshift.com> wrote: > Hey BG, > Yes, having metadata is really a straight forward way but this is kind > of extra work in every wait-until call which I was trying to avoid. Going > with metadata option will not just cause extra work for wait-until in > future code but even I need to add it at all the places in wherever it is > used. But yes, if having `eval` is really bad way or there is no other way > to handle it then will go with `metadata` approach :) > > On Friday, May 29, 2015 at 8:53:11 PM UTC+5:30, Baishampayan Ghose wrote: >> >> Shalaka, >> >> This is a really interesting conversation :-) However, I'd insist that >> you ditch eval or any sort of complicated affair and adopt the metadata >> approach as I had suggested that day :-P >> >> ~BG >> >> On Fri, May 29, 2015 at 4:20 PM, Shalaka Patil <sha...@helpshift.com> >> wrote: >> >>> Hey, Thanks Herwig & Mohit. >>> >>> So, I have one more solution. >>> >>> Here is the original wait-until function- >>> >>> >>> (defn wait-until >>> ([pred] (wait/wait-until *driver* (fn [_] pred))) ([pred timeout] ( >>> wait/wait-until *driver* (fn [_] pred) timeout)) ([pred timeout >>> interval] (wait/wait-until *driver* (fn [_] pred) timeout interval)) >>> ([driver >>> pred timeout interval] (wait/wait-until driver (fn [d] (pred d)) >>> timeout interval))) >>> >>> I have converted function to macro like - >>> >>> (defmacro with-wait-until-error-log >>> [pred & body] >>> `(try >>> ~@body >>> (catch Exception e# >>> (println "\nWait-until failed for: " ~pred "\n") >>> e#))) >>> >>> >>> (defmacro wait-until >>> [& args] >>> `(if (= (count '~args) 4) >>> (let [pred# (nth '~args 1)] >>> (with-wait-until-error-log >>> pred# >>> (wait/wait-until (eval (nth '~args 0)) >>> (fn [_#] (eval pred#)) >>> (nth '~args 2) >>> (nth '~args 3)))) >>> (let [pred# (first '~args)] >>> (with-wait-until-error-log >>> pred# >>> (wait/wait-until *driver* (fn [_#] (eval pred#)) >>> (nth '~args 1) >>> (nth '~args 2)))))) >>> >>> So, by this way I am not breaking input format or fn behaviour, but need >>> to use `eval`. So, is there any other way for doing same as eval? Or, is it >>> OK to use eval? >>> >>> >>> >>> On Friday, May 29, 2015 at 12:55:20 PM UTC+5:30, Mohit Thatte wrote: >>>> >>>> I see what you mean, this is nice >>>> >>>> On Thu, May 28, 2015 at 11:25 PM, Herwig Hochleitner < >>>> hhochl...@gmail.com> wrote: >>>> >>>>> 2015-05-28 19:42 GMT+02:00 Mohit Thatte <mohit....@gmail.com>: >>>>>> >>>>>> The interesting question here is what constitutes useful information! >>>>>> >>>>> >>>>> (let [pred #(exists? ".foo")] >>>>> (wait-until pred)) ;; <- the fact that it's called 'pred is not >>>>> interesting in most cases >>>>> >>>>> >>>>>> The trade-off is breaking an existing public API. >>>>>> >>>>> >>>>> How so? >>>>> >>>>> (defmacro op [msg args expr] >>>>> `(with-meta (fn ~args ~expr) {:msg ~msg :args '~args :expr '~expr})) >>>>> >>>>> (let [pred1 #(exists? ".foo") >>>>> pred2 (op "checks existance" [] (exists? ".foo"))] >>>>> ;; both these will work, the one with pred1 will give less useful >>>>> errors. the API of wait-until is unchanged >>>>> (wait-until pred1) >>>>> (wait-until pred2)) >>>>> >>>>> If Shalaka's primary goal is prettier errors in test failures, I'd >>>>>> settle for the fn body itself as the error message and that could be >>>>>> achieved without breaking the API. >>>>>> >>>>> >>>>> The op macro can include the code in its information. >>>>> >>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "Clojure" group. >>>>> To post to this group, send email to clo...@googlegroups.com >>>>> Note that posts from new members are moderated - please be patient >>>>> with your first post. >>>>> To unsubscribe from this group, send email to >>>>> clojure+u...@googlegroups.com >>>>> For more options, visit this group at >>>>> http://groups.google.com/group/clojure?hl=en >>>>> --- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "Clojure" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to clojure+u...@googlegroups.com. >>>>> For more options, visit https://groups.google.com/d/optout. >>>>> >>>> >>>> >>>> >>>> -- >>>> -Mohit Thatte >>>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Clojure" group. >>> To post to this group, send email to clo...@googlegroups.com >>> Note that posts from new members are moderated - please be patient with >>> your first post. >>> To unsubscribe from this group, send email to >>> clojure+u...@googlegroups.com >>> For more options, visit this group at >>> http://groups.google.com/group/clojure?hl=en >>> --- >>> You received this message because you are subscribed to the Google >>> Groups "Clojure" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to clojure+u...@googlegroups.com. >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> >> >> -- >> Baishampayan Ghose >> b.ghose at gmail.com >> > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- Baishampayan Ghose b.ghose at gmail.com -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.