valid_email2 3.5.0 → 3.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 85903e3f9f5d0e8222dcc7768e15632eecf4a6008e8a43c2d88549cfa9a140ae
4
- data.tar.gz: 2519e54f15012418caa00608301ff19f91640ecf63e9cf88c586afa2d1a0d2d2
3
+ metadata.gz: f6543e0ca764df6ed5698a864b232260e456a0fc3b8e3f82918122e21cdca0c3
4
+ data.tar.gz: 989805e58182e1b4ab18b9a16a80a9507465f840bea19840abebe841d628dfa9
5
5
  SHA512:
6
- metadata.gz: 811d82babbd7ad076fc077d4dea52074ecf6591926ed6b37b4f6595b614bc46eeacfd944db95ebc577a6cfb36d858009a051eed67e87fa5ce3f06b63c576c8b6
7
- data.tar.gz: 653fe9f637840019997480853e5784e4fba055f4d579bce8af3b30e631da8fe86a5074e00564d72444f7b4a1cd0f4d7d829d9928e7c3962d1b612b595cc16545
6
+ metadata.gz: 59813d38f00f9c75cbaae7d944f47d50f9e0239f740c468e8718c51345af324f46411e13b2796c5881769a62127345529be92ae374d07082d07e06610e50b62a
7
+ data.tar.gz: 131d25e900327ff67b0cd80e17ecc0de83462394d8094cafbed93780ec9b4d472b8e1b95591dc8c894fc8c4f47a8a5a60d31d7fa3c6733210f1b429ca79ff72c
@@ -1,3 +1,6 @@
1
+ ## Version 3.6.0
2
+ * Add strict_mx validation https://github.com/micke/valid_email2/pull/173
3
+
1
4
  ## Version 3.5.0
2
5
  * Disallow emails starting with a dot https://github.com/micke/valid_email2/pull/170
3
6
  * Add option to whitelist domains from MX check https://github.com/micke/valid_email2/pull/167
data/README.md CHANGED
@@ -43,10 +43,14 @@ class User < ActiveRecord::Base
43
43
  end
44
44
  ```
45
45
 
46
- To validate that the domain has a MX record:
46
+ To validate that the domain has an MX record or A record:
47
47
  ```ruby
48
48
  validates :email, 'valid_email_2/email': { mx: true }
49
49
  ```
50
+ To validate strictly that the domain has an MX record:
51
+ ```ruby
52
+ validates :email, 'valid_email_2/email': { strict_mx: true }
53
+ ```
50
54
 
51
55
  To validate that the domain is not a disposable email (checks domain and MX server):
52
56
  ```ruby
@@ -109,6 +113,7 @@ address = ValidEmail2::Address.new("lisinge@gmail.com")
109
113
  address.valid? => true
110
114
  address.disposable? => false
111
115
  address.valid_mx? => true
116
+ address.valid_strict_mx? => true
112
117
  address.subaddressed? => false
113
118
  ```
114
119
 
@@ -120,6 +125,7 @@ Do so by adding this in your `spec_helper`:
120
125
  ```ruby
121
126
  config.before(:each) do
122
127
  allow_any_instance_of(ValidEmail2::Address).to receive(:valid_mx?).and_return(true)
128
+ allow_any_instance_of(ValidEmail2::Address).to receive(:valid_strict_mx?).and_return(true)
123
129
  end
124
130
  ```
125
131
 
@@ -4174,6 +4174,7 @@ avuimkgtbgccejft901.ml
4174
4174
  avuimkgtbgccejft901.tk
4175
4175
  avumail.com
4176
4176
  avvmail.com
4177
+ avxrja.com
4177
4178
  aw.kikwet.com
4178
4179
  awahal0vk1o7gbyzf0.cf
4179
4180
  awahal0vk1o7gbyzf0.ga
@@ -12324,6 +12325,7 @@ gd6ubc0xilchpozgpg.gq
12324
12325
  gd6ubc0xilchpozgpg.ml
12325
12326
  gd6ubc0xilchpozgpg.tk
12326
12327
  gdb.armageddon.org
12328
+ gdf.it
12327
12329
  gdfretertwer.com
12328
12330
  gdmail.top
12329
12331
  gdradr.com
@@ -12788,6 +12790,7 @@ gmailllll.ga
12788
12790
  gmaills.eu
12789
12791
  gmailmail.ga
12790
12792
  gmailmarina.com
12793
+ gmailnator.com
12791
12794
  gmailner.com
12792
12795
  gmailnew.com
12793
12796
  gmailom.co
@@ -12938,6 +12941,7 @@ golivejasmin.com
12938
12941
  gomail.in
12939
12942
  gomail.pgojual.com
12940
12943
  gomailbox.info
12944
+ gomaild.com
12941
12945
  gomaile.com
12942
12946
  gomailstar.xyz
12943
12947
  gomessage.ml
@@ -18053,6 +18057,7 @@ louboutinshoessalejp.com
18053
18057
  louboutinshoesstoresjp.com
18054
18058
  louboutinshoesus.com
18055
18059
  louder1.bid
18060
+ loufad.com
18056
18061
  louis-vuitton-onlinestore.com
18057
18062
  louis-vuitton-outlet.com
18058
18063
  louis-vuitton-outletenter.com
@@ -31422,7 +31427,6 @@ webcontact-france.eu
31422
31427
  webcool.club
31423
31428
  webdesign-guide.info
31424
31429
  webdesign-romania.net
31425
- webdesignspecialist.com.au
31426
31430
  webdesigrsbio.gr
31427
31431
  webdespro.ru
31428
31432
  webdev-pro.ru
@@ -32327,6 +32331,7 @@ xdvsagsdg4we.ga
32327
32331
  xe2g.com
32328
32332
  xeames.net
32329
32333
  xeb9xwp7.tk
32334
+ xedmi.com
32330
32335
  xemaps.com
32331
32336
  xemne.com
32332
32337
  xenacareholdings.com
@@ -32377,6 +32382,7 @@ xhkss.net
32377
32382
  xijjfjoo.turystyka.pl
32378
32383
  xilopro.com
32379
32384
  xilor.com
32385
+ ximtyl.com
32380
32386
  xinbo.info
32381
32387
  xinbox.info
32382
32388
  xinfi.com.pl
@@ -33698,4 +33704,4 @@ zzv2bfja5.pl
33698
33704
  zzz.co
33699
33705
  zzz.com
33700
33706
  zzzmail.pl
33701
- zzzzzzzzzzzzz.com
33707
+ zzzzzzzzzzzzz.com
@@ -85,6 +85,12 @@ module ValidEmail2
85
85
  def valid_mx?
86
86
  return false unless valid?
87
87
 
88
+ mx_or_a_servers.any?
89
+ end
90
+
91
+ def valid_strict_mx?
92
+ return false unless valid?
93
+
88
94
  mx_servers.any?
89
95
  end
90
96
 
@@ -119,7 +125,12 @@ module ValidEmail2
119
125
 
120
126
  def mx_servers
121
127
  @mx_servers ||= Resolv::DNS.open do |dns|
122
- mx_servers = dns.getresources(address.domain, Resolv::DNS::Resource::IN::MX)
128
+ dns.getresources(address.domain, Resolv::DNS::Resource::IN::MX)
129
+ end
130
+ end
131
+
132
+ def mx_or_a_servers
133
+ @mx_or_a_servers ||= Resolv::DNS.open do |dns|
123
134
  (mx_servers.any? && mx_servers) ||
124
135
  dns.getresources(address.domain, Resolv::DNS::Resource::IN::A)
125
136
  end
@@ -5,7 +5,7 @@ require "active_model/validations"
5
5
  module ValidEmail2
6
6
  class EmailValidator < ActiveModel::EachValidator
7
7
  def default_options
8
- { regex: true, disposable: false, mx: false, disallow_subaddressing: false, multiple: false }
8
+ { regex: true, disposable: false, mx: false, strict_mx: false, disallow_subaddressing: false, multiple: false }
9
9
  end
10
10
 
11
11
  def validate_each(record, attribute, value)
@@ -48,6 +48,10 @@ module ValidEmail2
48
48
  if options[:mx]
49
49
  error(record, attribute) && return unless addresses.all?(&:valid_mx?)
50
50
  end
51
+
52
+ if options[:strict_mx]
53
+ error(record, attribute) && return unless addresses.all?(&:valid_strict_mx?)
54
+ end
51
55
  end
52
56
 
53
57
  def error(record, attribute)
@@ -1,3 +1,3 @@
1
1
  module ValidEmail2
2
- VERSION = "3.5.0"
2
+ VERSION = "3.6.0"
3
3
  end
@@ -8,7 +8,7 @@ require "net/http"
8
8
  whitelisted_emails = %w(
9
9
  onet.pl poczta.onet.pl fastmail.fm hushmail.com
10
10
  hush.ai hush.com hushmail.me naver.com qq.com example.com
11
- yandex.net gmx.com gmx.es
11
+ yandex.net gmx.com gmx.es webdesignspecialist.com.au vp.com
12
12
  )
13
13
 
14
14
  existing_emails = File.open("config/disposable_email_domains.txt") { |f| f.read.split("\n") }
@@ -19,6 +19,10 @@ class TestUserMX < TestModel
19
19
  validates :email, 'valid_email_2/email': { mx: true }
20
20
  end
21
21
 
22
+ class TestUserStrictMX < TestModel
23
+ validates :email, 'valid_email_2/email': { strict_mx: true }
24
+ end
25
+
22
26
  class TestUserDisallowDisposable < TestModel
23
27
  validates :email, 'valid_email_2/email': { disposable: true }
24
28
  end
@@ -253,6 +257,23 @@ describe ValidEmail2 do
253
257
  end
254
258
  end
255
259
 
260
+ describe "with strict mx validation" do
261
+ it "is valid if mx records are found" do
262
+ user = TestUserStrictMX.new(email: "foo@gmail.com")
263
+ expect(user.valid?).to be_truthy
264
+ end
265
+
266
+ it "is invalid if A records are found but no mx records are found" do
267
+ user = TestUserStrictMX.new(email: "foo@ghs.google.com")
268
+ expect(user.valid?).to be_falsey
269
+ end
270
+
271
+ it "is invalid if no mx records are found" do
272
+ user = TestUserStrictMX.new(email: "foo@subdomain.gmail.com")
273
+ expect(user.valid?).to be_falsey
274
+ end
275
+ end
276
+
256
277
  describe "with dotted validation" do
257
278
  it "is valid when address does not contain dots" do
258
279
  user = TestUserDotted.new(email: "johndoe@gmail.com")
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: 3.5.0
4
+ version: 3.6.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: 2020-10-30 00:00:00.000000000 Z
11
+ date: 2021-01-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -157,7 +157,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
157
157
  - !ruby/object:Gem::Version
158
158
  version: '0'
159
159
  requirements: []
160
- rubygems_version: 3.1.2
160
+ rubygems_version: 3.1.4
161
161
  signing_key:
162
162
  specification_version: 4
163
163
  summary: ActiveModel validation for email. Including MX lookup and disposable email