valid_email 0.2.0 → 0.2.1

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
  SHA256:
3
- metadata.gz: '07881400a61a403d6c3e518404847d050d28e5b28e1442205cd36daf77f5ca1d'
4
- data.tar.gz: 9aeb926a06b6a3ca32147ae9c2c01b7aee0c5c8932668f980ca9ab2a2c4c3519
3
+ metadata.gz: 7e0da2f8d6e1b69a777c0d9a6bb14632fa577ecfa55acb7128d436e1543a6842
4
+ data.tar.gz: c8a125e2971de31cd1e43a49827af99cb1a44130082c555b448083aa1fc6bbaf
5
5
  SHA512:
6
- metadata.gz: 3f6cf4d94d6ecf345189b7ffc41f185977d2b23b21c011b98cfa01f5da7c1c9add6f00425b317547d14cd4dd5e4ca595b6e13523e25ceaf9163b04567b781707
7
- data.tar.gz: 8aa4b92513c11e81b87b793a348d9581f6d11a70300006a3c1d6434032cf52b3aeacdf61b470db06ff74433ad677903156cc3967c6db7f833c9cb3bfe0c43c76
6
+ metadata.gz: 736072b973d66828d1f2cd78b6248599a5ecc3d054d0cbbd1354a4735447a97024575649c7bbe110edb576f18cedd647d378ceb12a9d8344639179c3c8d8ade0
7
+ data.tar.gz: 52fa87c50d4bf5570779706a39dea8c803b894256d7a92563b0b02009f92b262b6439565d4efd5345b65974f41dbd899085c6349f7c1cb4a5e9c82abcf21efe1
data/README.md CHANGED
@@ -74,6 +74,17 @@ validates :email,
74
74
  }
75
75
  ```
76
76
 
77
+ You can also detect a partial match on disposable accounts, good for services that use subdomains.
78
+
79
+ ```ruby
80
+ validates :email,
81
+ email: {
82
+ message: I18n.t('validations.errors.models.user.invalid_email')
83
+ ban_disposable_email: true,
84
+ partial: true
85
+ }
86
+ ```
87
+
77
88
  If you don't want the MX validator stuff, just require the right file
78
89
 
79
90
  ```ruby
@@ -15,9 +15,19 @@ class BanDisposableEmailValidator < ActiveModel::EachValidator
15
15
  end
16
16
 
17
17
  def validate_each(record, attribute, value)
18
- r = ValidateEmail.ban_disposable_email?(value)
19
- record.errors.add attribute, (options[:message] || I18n.t(:invalid, :scope => "valid_email.validations.email")) unless r
18
+ # Check if part of domain is in disposable_email_services yml list
19
+ if options[:partial]
20
+ r = ValidateEmail.ban_partial_disposable_email?(value)
21
+ record.errors.add attribute, (options[:message] ||
22
+ I18n.t(:invalid, :scope => "valid_email.validations.email")) unless r
20
23
 
21
- r
24
+ r
25
+ else
26
+ r = ValidateEmail.ban_disposable_email?(value)
27
+ record.errors.add attribute, (options[:message] ||
28
+ I18n.t(:invalid, :scope => "valid_email.validations.email")) unless r
29
+
30
+ r
31
+ end
22
32
  end
23
33
  end
@@ -18,7 +18,7 @@ class EmailValidator < ActiveModel::EachValidator
18
18
  # Check if domain is disposable
19
19
  if r && options[:ban_disposable_email]
20
20
  require 'valid_email/ban_disposable_email_validator'
21
- r = BanDisposableEmailValidator.new(:attributes => attributes, message: options[:message]).validate(record)
21
+ r = BanDisposableEmailValidator.new(:attributes => attributes, message: options[:message], partial: options[:partial]).validate(record)
22
22
  end
23
23
  unless r
24
24
  msg = (options[:message] || I18n.t(:invalid, :scope => "valid_email.validations.email"))
@@ -128,5 +128,15 @@ class ValidateEmail
128
128
  rescue Mail::Field::ParseError
129
129
  false
130
130
  end
131
+
132
+ def ban_partial_disposable_email?(value)
133
+ m = Mail::Address.new(value)
134
+ m.domain && !BanDisposableEmailValidator.config.any? do |bde|
135
+ next if bde == nil
136
+ m.domain.end_with?(bde)
137
+ end
138
+ rescue Mail::Field::ParseError
139
+ false
140
+ end
131
141
  end
132
142
  end
@@ -1 +1 @@
1
- ValidEmailVersion = "0.2.0"
1
+ ValidEmailVersion = "0.2.1"
@@ -43,6 +43,10 @@ describe EmailValidator do
43
43
  validates :email, :email => {:ban_disposable_email => true}
44
44
  end
45
45
 
46
+ person_class_partial_disposable_email = Class.new(email_class) do
47
+ validates :email, :email => {:ban_disposable_email => true, :partial => true}
48
+ end
49
+
46
50
  person_class_nil_allowed = Class.new(email_class) do
47
51
  validates :email, :email => {:allow_nil => true}
48
52
  end
@@ -147,7 +151,6 @@ describe EmailValidator do
147
151
  expect(subject.valid?).to be_falsey
148
152
  expect(subject).to have_error_messages(:email, errors)
149
153
  end
150
-
151
154
  end
152
155
 
153
156
  describe "validating email with MX and fallback to A" do
@@ -248,6 +251,22 @@ describe EmailValidator do
248
251
  end
249
252
  end
250
253
 
254
+ describe "validating email against partial disposable service match" do
255
+ subject { person_class_partial_disposable_email.new }
256
+
257
+ it "passes when email from trusted email services" do
258
+ subject.email = 'john@test.mail.ru'
259
+ expect(subject.valid?).to be_truthy
260
+ expect(subject.errors[:email]).to be_empty
261
+ end
262
+
263
+ it "fails when disposable email services partially matches email domain" do
264
+ subject.email = 'john@sub.grr.la'
265
+ expect(subject.valid?).to be_falsey
266
+ expect(subject.errors[:email]).to eq errors
267
+ end
268
+ end
269
+
251
270
  describe "validating domain" do
252
271
  subject { person_class_domain.new }
253
272
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: valid_email
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ramihajamalala Hery
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-10-29 00:00:00.000000000 Z
11
+ date: 2024-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -145,7 +145,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
145
145
  - !ruby/object:Gem::Version
146
146
  version: '0'
147
147
  requirements: []
148
- rubygems_version: 3.4.13
148
+ rubygems_version: 3.5.6
149
149
  signing_key:
150
150
  specification_version: 4
151
151
  summary: ActiveModel Validation for email