Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
jsyrjala opened this issue Jul 13, 2013 · 6 comments
Open

Comments

@jsyrjala
Copy link

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
Copy link
Member

Good idea!

@tendant
Copy link
Contributor

tendant commented Jul 26, 2014

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 #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
Copy link
Member

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

@tendant
Copy link
Contributor

tendant commented Jul 26, 2014

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
Copy link
Member

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

@tendant
Copy link
Contributor

tendant commented Jul 26, 2014

Will do.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants