valid_email2 0.0.4 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1d3456e7cb1c7feb85fdff2260fd595711cd2a9f
4
- data.tar.gz: 36f3e8a848db9bbb0abb3ea5c30cd5b85d182f8b
3
+ metadata.gz: c31c962fd50265d3f322c486870d78a569838374
4
+ data.tar.gz: b35f54c7e817503ef2142b1fda7a22762a4f7b2d
5
5
  SHA512:
6
- metadata.gz: 2bfb2d8ceaeba93622137e87ebf5fb2c990d04419dd3f5bd0e0f063022459859f2520f617a8ef943c120cc54034f242f946d337e6870ca803c700a410640c61c
7
- data.tar.gz: 10eabac3bb4f6be94139d7820182598908ec4c721a282148aef741914603555608116d89eae4dd339ef7338df593688e80852381c7d6cef97cc2e6d9ac88f578
6
+ metadata.gz: b7554c788ed305803a85e6a9a7a2cb05f33ae1e161fb2b1a9e75fe114e452d9b7d2e68e8dc9dc59e190996de941cbb280f393ef2197918e1d6093e9dc0c91fe9
7
+ data.tar.gz: 0d8cbff9a1ede7b3d8ae87d71d08c682dd996cf6a57fbd5e198b9de628390eda1a209fd766678a2c95eab214f02e9d035fc35a94996c5372adb8a2b459d595e1
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
+ .DS_STORE
1
2
  *.gem
2
3
  *.rbc
3
4
  .bundle
data/.travis.yml CHANGED
@@ -3,6 +3,7 @@ language: ruby
3
3
  rvm:
4
4
  - 2.0.0
5
5
  - 1.9.3
6
+ - 1.9.2
6
7
  - jruby-19mode
7
8
  - jruby-20mode
8
9
  - rbx-19mode
@@ -10,3 +11,8 @@ rvm:
10
11
  gemfile:
11
12
  - gemfiles/activemodel3.gemfile
12
13
  - gemfiles/activemodel4.gemfile
14
+
15
+ matrix:
16
+ exclude:
17
+ - rvm: 1.9.2
18
+ gemfile: gemfiles/activemodel4.gemfile
data/CHANGELOG.md ADDED
@@ -0,0 +1,3 @@
1
+ ## Version 1.0.0
2
+
3
+ Moved EmailValidator to seperate file
data/README.md CHANGED
@@ -1,17 +1,31 @@
1
1
  # ValidEmail2
2
2
  [![Build Status](https://travis-ci.org/lisinge/valid_email2.png?branch=master)](https://travis-ci.org/lisinge/valid_email2)
3
+ [![Gem Version](https://badge.fury.io/rb/valid_email2.png)](http://badge.fury.io/rb/valid_email2)
3
4
  [![Coverage Status](https://coveralls.io/repos/lisinge/valid_email2/badge.png)](https://coveralls.io/r/lisinge/valid_email2)
4
5
  [![Code Climate](https://codeclimate.com/github/lisinge/valid_email2.png)](https://codeclimate.com/github/lisinge/valid_email2)
5
6
  [![Dependency Status](https://gemnasium.com/lisinge/valid_email2.png)](https://gemnasium.com/lisinge/valid_email2)
6
7
 
7
- Validate emails without regexp but with the help of the `mail` gem and MX server lookup.
8
- Optionally validate against a list of disposable email domains.
8
+ Validate emails with the help of the `mail` gem instead of some cluncy regexp.
9
+ Aditionally validate that the domain has a MX record.
10
+ Optionally validate against a static [list of disposable email services](vendor/disposable_emails.yml).
11
+
12
+
13
+ ### Why?
14
+
15
+ There are lots of other gems and libraries that validates email adresses but most of them use some cluncy regexp.
16
+ I also saw a need to be able to validate that the email address is not coming from a "disposable email" provider.
17
+
18
+ ### Is it production ready?
19
+
20
+ Yes, it is used in several production apps.
9
21
 
10
22
  ## Installation
11
23
 
12
24
  Add this line to your application's Gemfile:
13
25
 
14
- gem 'valid_email2'
26
+ ```ruby
27
+ gem "valid_email2"
28
+ ```
15
29
 
16
30
  And then execute:
17
31
 
@@ -23,7 +37,50 @@ Or install it yourself as:
23
37
 
24
38
  ## Usage
25
39
 
26
- TODO: Write usage instructions here
40
+ ### Use with ActiveModel
41
+
42
+ If you just want to validate that it is a valid email address:
43
+ ```ruby
44
+ class User < ActiveRecord::Base
45
+ validates :email, presence: true, email: true
46
+ end
47
+ ```
48
+
49
+ To validate that the domain has a MX record:
50
+ ```ruby
51
+ validates :email, email: { mx: true }
52
+ ```
53
+
54
+ To validate that the domain is not a disposable email:
55
+ ```ruby
56
+ validates :email, email: { disposable: true }
57
+ ```
58
+
59
+ All together:
60
+ ```ruby
61
+ validates :email, email: { mx: true, disposable: true }
62
+ ```
63
+
64
+ > Note that this gem will let an empty email pass through so you will need to
65
+ > add `presence: true` if you require an email
66
+
67
+ ### Use without ActiveModel
68
+
69
+ ```ruby
70
+ address = ValidEmail2::Address.new("lisinge@gmail.com")
71
+ address.valid? => true
72
+ address.disposable? => false
73
+ address.valid_mx? => true
74
+ ```
75
+
76
+ ## Requirements
77
+
78
+ This gem requires Rails 3.2 or 4.0. It is tested against both versions under:
79
+ * Ruby-1.9
80
+ * Ruby-2.0
81
+ * JRuby-1.9
82
+ * JRuby-2.0
83
+ * Rubinius-1.9
27
84
 
28
85
  ## Contributing
29
86
 
@@ -1,3 +1,4 @@
1
+ require "valid_email2"
1
2
  require "resolv"
2
3
  require "mail"
3
4
 
@@ -7,9 +8,9 @@ module ValidEmail2
7
8
 
8
9
  def initialize(address)
9
10
  @parse_error = false
11
+ @raw_address = address
10
12
 
11
13
  begin
12
- @raw_address = address
13
14
  @address = Mail::Address.new(address)
14
15
  rescue Mail::Field::ParseError
15
16
  @parse_error = true
@@ -0,0 +1,30 @@
1
+ require "valid_email2/address"
2
+ require "active_model"
3
+ require "active_model/validations"
4
+
5
+ class EmailValidator < ActiveModel::EachValidator
6
+ def default_options
7
+ { regex: true, disposable: false, mx: false }
8
+ end
9
+
10
+ def validate_each(record, attribute, value)
11
+ return unless value.present?
12
+ options = default_options.merge(self.options)
13
+
14
+ address = ValidEmail2::Address.new(value)
15
+
16
+ error(record, attribute) && return unless address.valid?
17
+
18
+ if options[:disposable]
19
+ error(record, attribute) && return if address.disposable?
20
+ end
21
+
22
+ if options[:mx]
23
+ error(record, attribute) && return unless address.valid_mx?
24
+ end
25
+ end
26
+
27
+ def error(record, attribute)
28
+ record.errors.add(attribute, options[:message] || :invalid)
29
+ end
30
+ end
data/lib/valid_email2.rb CHANGED
@@ -1,37 +1,9 @@
1
- require "valid_email2/version"
2
- require "valid_email2/address"
3
- require "active_model"
4
- require "active_model/validations"
1
+ require "valid_email2/email_validator"
5
2
 
6
3
  module ValidEmail2
4
+ VERSION = "1.0.0"
5
+
7
6
  def self.disposable_emails
8
7
  @@disposable_emails ||= YAML.load_file(File.expand_path("../../vendor/disposable_emails.yml",__FILE__))
9
8
  end
10
9
  end
11
-
12
- class EmailValidator < ActiveModel::EachValidator
13
- def default_options
14
- { regex: true, disposable: false, mx: false }
15
- end
16
-
17
- def validate_each(record, attribute, value)
18
- return unless value.present?
19
- options = default_options.merge(self.options)
20
-
21
- address = ValidEmail2::Address.new(value)
22
-
23
- error(record, attribute) && return unless address.valid?
24
-
25
- if options[:disposable]
26
- error(record, attribute) && return if address.disposable?
27
- end
28
-
29
- if options[:mx]
30
- error(record, attribute) && return unless address.valid_mx?
31
- end
32
- end
33
-
34
- def error(record, attribute)
35
- record.errors.add(attribute, options[:message] || :invalid)
36
- end
37
- end
@@ -20,6 +20,11 @@ describe ValidEmail2 do
20
20
  user.valid?.should be_true
21
21
  end
22
22
 
23
+ it "should not be valid when domain is missing" do
24
+ user = TestUser.new(email: "foo")
25
+ user.valid?.should be_false
26
+ end
27
+
23
28
  it "should be invalid when email is malformed" do
24
29
  user = TestUser.new(email: "foo@bar")
25
30
  user.valid?.should be_false
data/valid_email2.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  # coding: utf-8
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'valid_email2/version'
4
+ require "valid_email2"
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "valid_email2"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: valid_email2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Micke Lisinge
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-17 00:00:00.000000000 Z
11
+ date: 2013-07-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -104,6 +104,7 @@ extra_rdoc_files: []
104
104
  files:
105
105
  - .gitignore
106
106
  - .travis.yml
107
+ - CHANGELOG.md
107
108
  - Gemfile
108
109
  - LICENSE.txt
109
110
  - README.md
@@ -112,7 +113,7 @@ files:
112
113
  - gemfiles/activemodel4.gemfile
113
114
  - lib/valid_email2.rb
114
115
  - lib/valid_email2/address.rb
115
- - lib/valid_email2/version.rb
116
+ - lib/valid_email2/email_validator.rb
116
117
  - spec/spec_helper.rb
117
118
  - spec/valid_email2_spec.rb
118
119
  - valid_email2.gemspec
@@ -1,3 +0,0 @@
1
- module ValidEmail2
2
- VERSION = "0.0.4"
3
- end