README.md in email_inquire-0.0.0 vs README.md in email_inquire-0.1.0

- old
+ new

@@ -1,9 +1,55 @@ # EmailInquire +[![Gem Version](https://badge.fury.io/rb/email_inquire.svg)](https://badge.fury.io/rb/email_inquire) [![Build Status](https://travis-ci.org/maximeg/email_inquire.svg?branch=master)](https://travis-ci.org/maximeg/email_inquire) + EmailInquire is a library to validate email for common typos and one-time email provider. +## Why? + +Before an user is an user, it's a visitor. And he must register to be so. What if he makes a typo while +entering its email address during the registration ? +If he didn't notice, you just lost him. He won't be able to sign in next time. + +Your users : + +- may not be as tech saavy as you; +- may not remember exactly their email address; +- may make a typo while typing their email address (very very common on a mobile keyboard). + +While we can't do so much for the name part of the email address, for the domain part, we can be smart! + +### Supported cases + +One char typo for common email providers of France, United Kingdom and USA: + +- `gmil.com` => hint `gmail.com` +- `hitmail.com` => hint `hotmail.com` +- `outloo.com` => hint `outlook.com` +- `virinmedia.com` => hint `virginmedia.com` + +United Kingdom `.xx.uk`: + +- `foo.couk` => hint `foo.co.uk` +- `fooco.uk` => hint `foo.co.uk` +- `foo.uk` => hint `foo.co.uk` +- `foo.judiciary.uk` => ok! + +Provider with an unique TLD domain: + +- `gmail.fr` => hint `gmail.com` +- `gmail.de` => hint `gmail.com` +- `google.com` => hint `gmail.com` +- `free.com` => hint `free.fr` +- `laposte.com` => hint `laposte.net` +- `laposte.fr` => hint `laposte.net` + +One time email providers: + +- `yopmail.com` => invalid +- more to come. + ## Installation Add this line to your application's Gemfile: ```ruby @@ -18,10 +64,73 @@ $ gem install email_inquire ## Usage -TODO: Write usage instructions here +Use `EmailInquire.validate(email)`, you'll get a `EmailInquire::Response` that represents weither +or not the email address is valid or may contain a mistake. + +Methods of `EmailInquire::Response`: + +| Method | Description | Possible values | +| --- | --- | --- | +| `#email` | The validated email address | `"john.doe@gnail.com"` | +| `#status` | The status of the validation | `:valid` `:invalid` or `:hint` | +| `#valid?` | Is the email valid ? | `true` or `false` | +| `#invalid?` | Is the email invalid ? | `true` or `false` | +| `#hint?` | Is there a possible mistake and you have to show an hint to the user ? | `true` or `false` | +| `#replacement` | A proposal replacement email address for when status is `:hint` | `"john.doe@gmail.com"` or nil | + +### Examples + +A valid case: + +```ruby +response = EmailInquire.validate("john.doe@gmail.com") +response.status # :valid +response.valid? # true +``` + +An invalid case: + +```ruby +response = EmailInquire.validate("john.doe@yopmail.com") +response.status # :invalid +response.valid? # false +response.invalid? # true +``` + +A hint case: + +```ruby +response = EmailInquire.validate("john.doe@gmail.co") +response.status # :hint +response.valid? # false +response.hint? # true +response.replacement # "john.doe@gmail.com" +``` + +### Hint + +I think it's important to just offer a hint to the user and to not automatically replace the +**maybe** faulty email address in the form. + +A _"Did you mean xxx@yyy.zzz ?"_ has the following advantages: + +- user remains in charge: we could have hinted against a perfectly valid email; +- user is educated; +- mini whaoo effect; + +This _"Did you mean xxx@yyy.zzz ?"_ is better being actionable, and appearing to be so: a click or tap on it should replace the email by the suggestion. + +``` + +---------------------------------------+ +---------+ + | john.doe@yaho.com | | Sign Up | + +---------------------------------------+ +---------+ + Did you mean john.doe@yahoo.com ? +``` + +Note that you could even have this validation for your Sign In forms... ## Development After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.