valid_email2 4.0.3 → 4.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'activemodel', '~> 7.0'
4
+
5
+ gemspec path: '../'
@@ -38,14 +38,12 @@ module ValidEmail2
38
38
  return @valid unless @valid.nil?
39
39
  return false if @parse_error
40
40
 
41
- @valid = address.domain &&
42
- address.address == @raw_address &&
43
- valid_domain? &&
44
- valid_address?
41
+ @valid = valid_domain? && valid_address?
45
42
  end
46
43
 
47
44
  def valid_domain?
48
45
  domain = address.domain
46
+ return false if domain.nil?
49
47
 
50
48
  domain !~ self.class.prohibited_domain_characters_regex &&
51
49
  domain.include?('.') &&
@@ -56,6 +54,8 @@ module ValidEmail2
56
54
  end
57
55
 
58
56
  def valid_address?
57
+ return false if address.address != @raw_address
58
+
59
59
  !address.local.include?('..') &&
60
60
  !address.local.end_with?('.') &&
61
61
  !address.local.start_with?('.')
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal:true
2
2
 
3
3
  module ValidEmail2
4
- VERSION = "4.0.3"
4
+ VERSION = "4.0.4"
5
5
  end
@@ -14,11 +14,15 @@ whitelisted_emails = %w(
14
14
 
15
15
  existing_emails = File.open("config/disposable_email_domains.txt") { |f| f.read.split("\n") }
16
16
 
17
- url = "https://raw.githubusercontent.com/FGRibreau/mailchecker/master/list.txt"
18
- resp = Net::HTTP.get_response(URI.parse(url))
17
+ remote_emails = [
18
+ "https://raw.githubusercontent.com/FGRibreau/mailchecker/master/list.txt",
19
+ "https://raw.githubusercontent.com/disposable/disposable-email-domains/master/domains.txt",
20
+ ].flat_map do |url|
21
+ resp = Net::HTTP.get_response(URI.parse(url))
19
22
 
20
- remote_emails = resp.body.split("\n").flatten - whitelisted_emails
23
+ resp.body.split("\n").flatten
24
+ end
21
25
 
22
- result_emails = (existing_emails + remote_emails).map(&:strip).uniq.sort
26
+ result_emails = (existing_emails + remote_emails).map(&:strip).uniq.sort - whitelisted_emails
23
27
 
24
- File.open("config/disposable_email_domains.txt", "w") {|f| f.write result_emails.join("\n") }
28
+ File.open("config/disposable_email_domains.txt", "w") { |f| f.write result_emails.join("\n") }
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ describe ValidEmail2::Address do
6
+ describe "#valid?" do
7
+ it "is valid" do
8
+ address = described_class.new("foo@bar123.com")
9
+ expect(address.valid?).to be true
10
+ end
11
+
12
+ it "is invalid if email is nil" do
13
+ address = described_class.new(nil)
14
+ expect(address.valid?).to be false
15
+ end
16
+
17
+ it "is invalid if email is empty" do
18
+ address = described_class.new(" ")
19
+ expect(address.valid?).to be false
20
+ end
21
+
22
+ it "is invalid if domain is missing" do
23
+ address = described_class.new("foo")
24
+ expect(address.valid?).to be false
25
+ end
26
+
27
+ it "is invalid if email cannot be parsed" do
28
+ address = described_class.new("<>")
29
+ expect(address.valid?).to be false
30
+ end
31
+
32
+ it "is invalid if email contains emoticons" do
33
+ address = described_class.new("foo🙈@gmail.com")
34
+ expect(address.valid?).to be false
35
+ end
36
+ end
37
+ end
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: 4.0.3
4
+ version: 4.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Micke Lisinge
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-19 00:00:00.000000000 Z
11
+ date: 2022-08-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -130,8 +130,8 @@ executables: []
130
130
  extensions: []
131
131
  extra_rdoc_files: []
132
132
  files:
133
+ - ".github/workflows/ci.yaml"
133
134
  - ".gitignore"
134
- - ".travis.yml"
135
135
  - CHANGELOG.md
136
136
  - Gemfile
137
137
  - LICENSE.txt
@@ -143,11 +143,13 @@ files:
143
143
  - gemfiles/activemodel4.gemfile
144
144
  - gemfiles/activemodel5.gemfile
145
145
  - gemfiles/activemodel6.gemfile
146
+ - gemfiles/activemodel7.gemfile
146
147
  - lib/valid_email2.rb
147
148
  - lib/valid_email2/address.rb
148
149
  - lib/valid_email2/email_validator.rb
149
150
  - lib/valid_email2/version.rb
150
151
  - pull_mailchecker_emails.rb
152
+ - spec/address_spec.rb
151
153
  - spec/benchmark_spec.rb
152
154
  - spec/spec_helper.rb
153
155
  - spec/valid_email2_spec.rb
@@ -177,6 +179,7 @@ specification_version: 4
177
179
  summary: ActiveModel validation for email. Including MX lookup and disposable email
178
180
  blacklist
179
181
  test_files:
182
+ - spec/address_spec.rb
180
183
  - spec/benchmark_spec.rb
181
184
  - spec/spec_helper.rb
182
185
  - spec/valid_email2_spec.rb
data/.travis.yml DELETED
@@ -1,21 +0,0 @@
1
- language: ruby
2
-
3
- sudo: false
4
-
5
- rvm:
6
- - 3.0
7
- - 2.7
8
- - 2.6
9
- - 2.5
10
-
11
- gemfile:
12
- - gemfiles/activemodel5.gemfile
13
- - gemfiles/activemodel6.gemfile
14
-
15
- jobs:
16
- exclude:
17
- - rvm: 3.0
18
- gemfile: gemfiles/activemodel5.gemfile
19
-
20
- before_install:
21
- - gem install bundler