email_assessor 0.6.0 → 0.7.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
- SHA1:
3
- metadata.gz: 463e9b001dd80a0b6e4ebb6d71fc5ac5cf8f12f3
4
- data.tar.gz: cc5855cfbf57c437632e58cb5244745f2e272466
2
+ SHA256:
3
+ metadata.gz: 8ec3fdbcb7339d1a5d0854cc8fde6b45bc0440e8154807870a36332023be74bc
4
+ data.tar.gz: f5ccda7423d991a5e1512a96c39f38bb423bcdf6c86d51ca6f7f487ddfc3571a
5
5
  SHA512:
6
- metadata.gz: 2e88455033aa1b12ca9abd38b193697d02cf418cf5b59d86fae1a233c80c8a8c08872d328840ed46e1f24285baf2a15e50df7ea8f27c907afd67de781509eeee
7
- data.tar.gz: 3340a8a23a1ce05be31ddf174e4ea5d75b22381a23d2763ffe46df9f970abc90b1e7c0a86004749629e4502544f9a26c40a4eaf01fa2e992ddb81a47546281f5
6
+ metadata.gz: c083397bac2fa9a19441e9bb2697344522b54ef7abc0bf206d6f015a185ac365aecbdc1adaa4d50f1a1d393f7c541c821ec1807eda036608dec10188fe3bee4c
7
+ data.tar.gz: 92c2b3199bba839ac4e993caa677c20c033cc27b84fcd87cf3c0f85492c0d650bdb2725776882d4eed78616eeffdf08cfc764402aecdb41d34cd81f8caf0314b
@@ -7,7 +7,81 @@ module EmailAssessor
7
7
  class Address
8
8
  attr_accessor :address
9
9
 
10
- PROHIBITED_DOMAIN_CHARACTERS_REGEX = %r{[+!_\/\s']}
10
+ PROHIBITED_DOMAIN_PREFIXES = [
11
+ '.',
12
+ '-',
13
+ ].freeze
14
+
15
+ PROHIBITED_DOMAIN_CONTENT = [
16
+ '+',
17
+ '!',
18
+ '_',
19
+ '/',
20
+ ' ',
21
+ '..',
22
+ '-.',
23
+ "'",
24
+ ].freeze
25
+
26
+ PROHIBITED_DOMAIN_SUFFIXES = [
27
+ # none
28
+ ].freeze
29
+
30
+ PROHIBITED_LOCAL_PREFIXES = [
31
+ '.',
32
+ ].freeze
33
+
34
+ PROHIBITED_LOCAL_CONTENT = [
35
+ '..',
36
+ ].freeze
37
+
38
+ PROHIBITED_LOCAL_SUFFIXES = [
39
+ '.',
40
+ ].freeze
41
+
42
+ class << self
43
+ def prohibited_domain_regex
44
+ @prohibited_domain_content_regex ||= make_regex(
45
+ prefixes: PROHIBITED_DOMAIN_PREFIXES,
46
+ content: PROHIBITED_DOMAIN_CONTENT,
47
+ suffixes: PROHIBITED_DOMAIN_SUFFIXES
48
+ )
49
+ end
50
+
51
+ def prohibited_local_regex
52
+ @prohibited_local_content_regex ||= make_regex(
53
+ prefixes: PROHIBITED_LOCAL_PREFIXES,
54
+ content: PROHIBITED_LOCAL_CONTENT,
55
+ suffixes: PROHIBITED_LOCAL_SUFFIXES
56
+ )
57
+ end
58
+
59
+ private
60
+
61
+ def make_regex(prefixes: nil, content: nil, suffixes: nil)
62
+ parts = []
63
+
64
+ unless prefixes.nil?
65
+ prefixes.each do |prefix|
66
+ parts << "\\A#{Regexp.escape(prefix)}"
67
+ end
68
+ end
69
+
70
+ unless content.nil?
71
+ content.each do |prefix|
72
+ parts << Regexp.escape(prefix)
73
+ end
74
+ end
75
+
76
+ unless suffixes.nil?
77
+ suffixes.each do |prefix|
78
+ parts << "#{Regexp.escape(prefix)}\\z"
79
+ end
80
+ end
81
+
82
+ Regexp.new(parts.join("|"), Regexp::IGNORECASE)
83
+ end
84
+ end
11
85
 
12
86
  def initialize(address)
13
87
  @parse_error = false
@@ -21,22 +95,19 @@ module EmailAssessor
21
95
  end
22
96
 
23
97
  def valid?
98
+ return @valid unless @valid.nil?
24
99
  return false if @parse_error
25
100
 
26
- if address.domain && address.address == @raw_address
27
- domain = address.domain
28
-
29
- !domain.match?(PROHIBITED_DOMAIN_CHARACTERS_REGEX) &&
30
- !domain.start_with?("-") && # Domain may not start with a hyphen
31
- !domain.include?("-.") && # Domain name may not end with a hyphen
32
- domain.include?(".") && # Domain must contain a period
33
- !domain.include?("..") && # Domain may not contain consecutive periods
34
- !address.address.include?(".@") && # Address may not contain a dot directly before @
35
- !domain.start_with?(".") && # Domain may not start with a period
36
- domain.match?(%r{[a-z]\z}i) # Domain must end with letters
37
- else
38
- false
39
- end
101
+ @valid =
102
+ if address.domain && address.address == @raw_address
103
+ domain = address.domain
104
+
105
+ domain.include?('.') &&
106
+ !domain.match?(self.class.prohibited_domain_regex) &&
107
+ !address.local.match?(self.class.prohibited_local_regex)
108
+ else
109
+ false
110
+ end
40
111
  end
41
112
 
42
113
  def disposable?
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module EmailAssessor
3
- VERSION = "0.6.0"
3
+ VERSION = "0.7.0"
4
4
  end
@@ -36,11 +36,31 @@ describe EmailAssessor do
36
36
  is_expected.to be_valid
37
37
  end
38
38
 
39
+ it "is invalid if the address starts with a dot" do
40
+ user = TestUser.new(email: ".foo@bar.com")
41
+ expect(user.valid?).to be_falsey
42
+ end
43
+
44
+ it "is invalid if the address contains consecutive dots" do
45
+ user = TestUser.new(email: "foo..bar@gmail.com")
46
+ expect(user.valid?).to be_falsey
47
+ end
48
+
49
+ it "is invalid if the address ends with a dot" do
50
+ user = TestUser.new(email: "foo.@bar.com")
51
+ expect(user.valid?).to be_falsey
52
+ end
53
+
39
54
  it "is invalid when domain is missing" do
40
55
  user.email = "foo@.com"
41
56
  is_expected.to be_invalid
42
57
  end
43
58
 
59
+ it "is invalid when domain starts with a dot" do
60
+ user.email = "foo@.example.com"
61
+ is_expected.to be_invalid
62
+ end
63
+
44
64
  it "is invalid when email is malformed" do
45
65
  user.email = "foo@bar"
46
66
  is_expected.to be_invalid
@@ -4139,6 +4139,7 @@ avuimkgtbgccejft901.ml
4139
4139
  avuimkgtbgccejft901.tk
4140
4140
  avumail.com
4141
4141
  avvmail.com
4142
+ avxrja.com
4142
4143
  aw.kikwet.com
4143
4144
  awahal0vk1o7gbyzf0.cf
4144
4145
  awahal0vk1o7gbyzf0.ga
@@ -4147,6 +4148,9 @@ awahal0vk1o7gbyzf0.ml
4147
4148
  awahal0vk1o7gbyzf0.tk
4148
4149
  awatum.de
4149
4150
  awca.eu
4151
+ awdrt.com
4152
+ awdrt.net
4153
+ awdrt.org
4150
4154
  aweather.ru
4151
4155
  aweightlossguide.com
4152
4156
  awemail.com
@@ -7826,6 +7830,7 @@ cungmuachungnhom.com
7826
7830
  cungsuyngam.com
7827
7831
  cungtam.com
7828
7832
  cuoiz.com
7833
+ cuoly.com
7829
7834
  cuongvumarketingseo.com
7830
7835
  cupf6mdhtujxytdcoxh.cf
7831
7836
  cupf6mdhtujxytdcoxh.ga
@@ -10305,6 +10310,7 @@ eo-z.com
10305
10310
  eoffice.top
10306
10311
  eomail.com
10307
10312
  eonmech.com
10313
+ eoopy.com
10308
10314
  eorbs.com
10309
10315
  eos2mail.com
10310
10316
  eotoplenie.ru
@@ -11355,6 +11361,8 @@ fitnessjockey.org
11355
11361
  fitnessmojo.org
11356
11362
  fitnessreviewsonline.com
11357
11363
  fitnesszbyszko.pl
11364
+ fitschool.be
11365
+ fitschool.space
11358
11366
  fittinggeeks.pl
11359
11367
  fitzgeraldforjudge.com
11360
11368
  five-club.com
@@ -12736,6 +12744,7 @@ gmailllll.ga
12736
12744
  gmaills.eu
12737
12745
  gmailmail.ga
12738
12746
  gmailmarina.com
12747
+ gmailnator.com
12739
12748
  gmailner.com
12740
12749
  gmailnew.com
12741
12750
  gmailom.co
@@ -12888,6 +12897,7 @@ golivejasmin.com
12888
12897
  gomail.in
12889
12898
  gomail.pgojual.com
12890
12899
  gomailbox.info
12900
+ gomaild.com
12891
12901
  gomaile.com
12892
12902
  gomailstar.xyz
12893
12903
  gomessage.ml
@@ -17998,6 +18008,7 @@ louboutinshoessalejp.com
17998
18008
  louboutinshoesstoresjp.com
17999
18009
  louboutinshoesus.com
18000
18010
  louder1.bid
18011
+ loufad.com
18001
18012
  louis-vuitton-onlinestore.com
18002
18013
  louis-vuitton-outlet.com
18003
18014
  louis-vuitton-outletenter.com
@@ -28388,6 +28399,7 @@ tempemailaddress.com
28388
28399
  tempemails.io
28389
28400
  tempinbox.co.uk
28390
28401
  tempinbox.com
28402
+ tempinbox.xyz
28391
28403
  tempm.cf
28392
28404
  tempm.com
28393
28405
  tempm.ga
@@ -29503,6 +29515,9 @@ tsukushiakihito.gq
29503
29515
  tt2dx90.com
29504
29516
  ttbbc.com
29505
29517
  ttdfytdd.ml
29518
+ ttirv.com
29519
+ ttirv.net
29520
+ ttirv.org
29506
29521
  ttoubdzlowecm7i2ua8.cf
29507
29522
  ttoubdzlowecm7i2ua8.ga
29508
29523
  ttoubdzlowecm7i2ua8.gq
@@ -32216,6 +32231,7 @@ xdvsagsdg4we.ga
32216
32231
  xe2g.com
32217
32232
  xeames.net
32218
32233
  xeb9xwp7.tk
32234
+ xedmi.com
32219
32235
  xemaps.com
32220
32236
  xemne.com
32221
32237
  xenacareholdings.com
@@ -32266,6 +32282,7 @@ xhkss.net
32266
32282
  xijjfjoo.turystyka.pl
32267
32283
  xilopro.com
32268
32284
  xilor.com
32285
+ ximtyl.com
32269
32286
  xinbo.info
32270
32287
  xinbox.info
32271
32288
  xinfi.com.pl
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: email_assessor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Wolfe Millard
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-03 00:00:00.000000000 Z
11
+ date: 2020-12-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -124,8 +124,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
124
124
  - !ruby/object:Gem::Version
125
125
  version: '0'
126
126
  requirements: []
127
- rubyforge_project:
128
- rubygems_version: 2.6.8
127
+ rubygems_version: 3.0.8
129
128
  signing_key:
130
129
  specification_version: 4
131
130
  summary: Advanced ActiveModel email validation