Skip to content

Commit

Permalink
Clojure implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
buren committed Oct 2, 2015
1 parent 3f2c4e8 commit 40af280
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 49 deletions.
14 changes: 14 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ MailChecker currently supports:
* [Python](https://github.com/FGRibreau/mailchecker/tree/master/platform/python)
* [Ruby](https://github.com/FGRibreau/mailchecker/tree/master/platform/ruby)
* [Elixir](https://github.com/FGRibreau/mailchecker/tree/master/platform/elixir)
* [Clojure](https://github.com/FGRibreau/mailchecker/tree/master/platform/clojure)
* **Easily add support for your own language with MailChecker template system and [send us a pull-request!](https://github.com/FGRibreau/mailchecker/fork_select)**

-------------------------
Expand Down Expand Up @@ -114,6 +115,19 @@ unless MailChecker.valid?('myemail@yopmail.com')
end
```

### Clojure

```clojure
; no package yet; just drop in mailchecker.clj where you want to use it.
(load-file "platform/clojure/mailchecker.clj")

(if (not (mailchecker/valid? "myemail@yopmail.com"))
(throw (Throwable. "O RLY!")))

(if (not (mailchecker/valid? "myemail.com"))
(throw (Throwable. "O RLY!")))
```

--------------------


Expand Down
30 changes: 5 additions & 25 deletions platform/clojure/mailchecker.clj

Large diffs are not rendered by default.

28 changes: 4 additions & 24 deletions platform/clojure/mailchecker.tmpl.clj
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@

(def ^:const blacklist (set [{{& listSTR }}]))

; Copied from https://github.com/scstarkey/noir/blob/998e846dd44f42b8e01a6977e6d22a3eff5e4542/src/noir/validation.clj#L37-L40
; Source: https://github.com/scstarkey/noir/blob/998e846dd44f42b8e01a6977e6d22a3eff5e4542/src/noir/validation.clj#L37-L40
; Modified to return true/false
(defn is-email?
"Returns true if email is an email address"
[email]
(re-matches #"(?i)[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?" email))
(if (re-matches #"(?i)[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?" email)
true false))

(defn at-split
"Returns list from string splitted on @ char"
Expand Down Expand Up @@ -55,25 +57,3 @@
(is-email? email)
(not
(in-blacklist? email))))

; (println (valid? "test@example.com"))
; (println (valid? "example.com"))
; (println (top-domain-part "test@sub.example.com"))

; Valid
(println (valid? "plop@plop.com"))
(println (valid? "my.ok@ok.plop.com"))
(println (valid? "my+ok@ok.plop.com"))
(println (valid? "my=ok@ok.plop.com"))
(println (valid? "ok@gmail.com"))
(println (valid? "ok@hotmail.com"))

; Invalid
(println (not (valid? "plopplop.com")))
(println (not (valid? "my+ok@ok=plop.com")))
(println (not (valid? "my,ok@ok.plop.com")))

(println (not (valid? "ok@tmail.com")))
(println (not (valid? "ok@33mail.com")))
(println (not (valid? "ok@ok.33mail.com")))
(println (not (valid? "ok@guerrillamailblock.com")))
39 changes: 39 additions & 0 deletions test/platform.clojure.test.clj
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
; Run test with the lein-exec plugin:
; $ lein exec test/platform.clojure.test.clj
(load-file "platform/clojure/mailchecker.clj")

(ns clojure.test.example
(:use clojure.test))

; Valid
(deftest true-for-valid-1
(is (= true (mailchecker/valid? "plop@plop.com"))))
(deftest true-for-valid-2
(is (= true (mailchecker/valid? "my.ok@ok.plop.com"))))
(deftest true-for-valid-3
(is (= true (mailchecker/valid? "my+ok@ok.plop.com"))))
(deftest true-for-valid-4
(is (= true (mailchecker/valid? "my=ok@ok.plop.com"))))
(deftest true-for-valid-5
(is (= true (mailchecker/valid? "ok@gmail.com"))))
(deftest true-for-valid-6
(is (= true (mailchecker/valid? "ok@hotmail.com"))))

; Invalid
(deftest false-for-invalid-1
(is(= false (mailchecker/valid? "plopplop.com"))))
(deftest false-for-invalid-2
(is(= false (mailchecker/valid? "my+ok@ok=plop.com"))))
(deftest false-for-invalid-3
(is(= false (mailchecker/valid? "my,ok@ok.plop.com"))))

(deftest false-for-spam-1
(is(= false (mailchecker/valid? "ok@tmail.com"))))
(deftest false-for-spam-2
(is(= false (mailchecker/valid? "ok@33mail.com"))))
(deftest false-for-spam-3
(is(= false (mailchecker/valid? "ok@ok.33mail.com"))))
(deftest false-for-spam-4
(is(= false (mailchecker/valid? "ok@guerrillamailblock.com"))))

(run-all-tests)

0 comments on commit 40af280

Please sign in to comment.