clojurewerkz / mailer

An ActionMailer-inspired mailer library. Combines Postal, Clostache, some conventions and support for multiple delivery modes
105 stars 18 forks source link

Add more descriptive error message for "template not found" error case #4

Open jsyrjala opened 11 years ago

jsyrjala commented 11 years ago

If I attempt to refer to a template that doesn't exist, like this

(defn send-email [name email]
  (deliver-email {:from "myaddress@example.com", :to [email] :subject "my-subject"}
                 "templates/email/not-found.moustache" 
                 {:name name :email email}))

I get following rather cryptic exception:

IllegalArgumentException No implementation of method: :make-reader of protocol: 
#'clojure.java.io/IOFactory found for class: nil  clojure.core/-cache-protocol-fn (core_deftype.clj:541)

Something like this would be better: IllegalArgumentException Template 'templates/email/not-found.moustache' was not found

michaelklishin commented 11 years ago

Good idea!

tendant commented 10 years ago

This error message comes from https://github.com/fhd/clostache/blob/master/src/clostache/parser.clj#L375

Currently in mailer, there is no validation check on template resource. There are two options:

  1. Add validation check for template resource in Mailer
  2. Enhance upstream library (in this case clostache).

I also notice there is another ticket https://github.com/clojurewerkz/mailer/issues/3. If mailer will switch from clostache to stencil, it is better idea to enhance stencil as well.

Note: stencil has slightly different way to find resource, it tries to find resource with/without postfix ".mustache".

I can enhance it, but I would like to get your opinion before taking the effort.

Thanks.

michaelklishin commented 10 years ago

We'll be moving away from Clostache. I'm curious if Stencil produces a better error message?

tendant commented 10 years ago

Not much difference.

This is the error coming from Stencil with no template.

IllegalArgumentException No implementation of method: :render of protocol: #'stencil.ast/ASTNode found for class: nil clojure.core/-cache-protocol-fn (core_deftype.clj:544)

michaelklishin commented 10 years ago

OK, I'm all for having a check in Mailer that produces a more indicative message. Feel free to submit a PR.

tendant commented 10 years ago

Will do.