The towerdata-rails
gem provides a Ruby wrapper to the TowerData REST API. In addition to a module, methods, and classes for explicit calls to the API, the gem provides an email validator and a phone number validator for ActiveModel classes.
Add this line to your application's Gemfile:
gem 'towerdata-rails'
And then execute:
$ bundle
Or install it yourself as:
$ gem install towerdata-rails
TowerData requires an API token for all requests. (Get one here.) To configure your app with your token, add this code in an initializer or somewhere similar.
TowerData.configure do |c|
c.token = 'MY_TOKEN'
end
These settings are used by the Email Validator
-
c.show_corrections:
- function: if a record is invalid, the error report will include suggested corrections
- default: true
-
c.auto_accept_corrections:
- function: if there are any suggested corrections, the validator will take the first one (record is reported as valid
- default: false
email = TowerData.validate_email('[email protected]')
After this call, email
will be an instance of TowerData::Email
. This wrapper class exposes all the values from the JSON returned by TowerData. Use email.ok
for a quick check if the email address is valid.
This object corresponds very closely with the JSON response that comes back from Tower Data. It has the following fields:
- status_code: Tower Data's code specifying the success/failure of the validation
- status_desc: A text description of the status code
- ok?:
true
if the address is considered valid,false
otherwise - validation_level: Level of verification used to validate address
- address: full email address
- username: stuff before the @
- domain: stuff after the @
- corrections: if the address is invalid but something similar is valid, it will be in this field
(e.g. suggesting
[email protected]
as a substitute for[email protected]
)
phone = TowerData.validate_phone('123-456-7890')
After this call, phone
will be an instance of TowerData::Phone
. This wrapper class exposes all the values from the JSON returned by TowerData. Use phone.ok
for a quick check if the phone number is valid.
class ModelWithEmailAndPhone
include ActiveModel::Model
include ActiveModel::Validations
include TowerData
attr_accessor :email, :phone
validates :email, email: true
validates :phone, phone: true
end
Although the gem was written to be a validation wrapper for TowerData, it also supports extension through other providers.
-
Create a new subclass of
TowerData::Provider
, overriding the methodsvalidate_email
andvalidate_phone
with whatever logic is appropriate. NOTE: these methods are intended to returnTowerData::Email
andTowerData::Phone
objects. If you return something else, results may not be what you expect. -
Immediately after your config block, add the following line:
TowerData.provider = CustomProviderClass.new
-
Run validations as normal
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request