activemodel-email_address_validator 2.0.0 → 2.1.1
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 +4 -4
- data/.github/dependabot.yml +6 -0
- data/.github/workflows/ruby.yml +37 -0
- data/CHANGELOG.md +25 -0
- data/Gemfile +2 -1
- data/README.md +1 -1
- data/Rakefile +1 -1
- data/activemodel-email_address_validator.gemspec +10 -12
- data/lib/activemodel_email_address_validator/email_address.rb +11 -5
- data/lib/activemodel_email_address_validator/version.rb +1 -1
- data/test/activemodel-email_address_validator/test_email_address.rb +27 -0
- data/test/minitest_helper.rb +1 -2
- data/test/test_active_model_integration.rb +11 -11
- metadata +12 -14
- data/.travis.yml +0 -14
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ce32d9302e063c235e291b9743acc89088c167adb42ef820d3869c325b827a13
|
|
4
|
+
data.tar.gz: 910f0ee9ad0d42d408eb0d3b90aac4e1f647c54f627628a096d3b5a246411f30
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 7da25676700ae7c2003a01ad56cc8a5b2a6c9f81f3a38a6b956cccf244c9f6d26bf0d578ce3b5fe9495d2d5663f29cee6155cd198b5fca775ed64f4f66b1fe93
|
|
7
|
+
data.tar.gz: 7669cf81432b9ba999283832ca89dfefaff6bcaea22d2e6678ef5d91a2a58577541ee806d6f0c1cc8f7632a820f8bb251f6130a68cf31e5939c5efb625e670e9
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
name: Ruby
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ main ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ main ]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
strategy:
|
|
14
|
+
matrix:
|
|
15
|
+
ruby-version: ['2.4', '2.5', '2.6', '2.7', '3.0', '3.1', '3.2']
|
|
16
|
+
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v2
|
|
19
|
+
- name: Set up Ruby
|
|
20
|
+
uses: ruby/setup-ruby@v1
|
|
21
|
+
with:
|
|
22
|
+
ruby-version: ${{ matrix.ruby-version }}
|
|
23
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
|
24
|
+
- name: Run tests
|
|
25
|
+
run: bundle exec rake
|
|
26
|
+
|
|
27
|
+
lint:
|
|
28
|
+
runs-on: ubuntu-latest
|
|
29
|
+
steps:
|
|
30
|
+
- uses: actions/checkout@v2
|
|
31
|
+
- name: Set up Ruby
|
|
32
|
+
uses: ruby/setup-ruby@v1
|
|
33
|
+
with:
|
|
34
|
+
ruby-version: '3.1'
|
|
35
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
|
36
|
+
- name: Lint
|
|
37
|
+
run: bundle exec standardrb
|
data/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,31 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](http://keepachangelog.com/)
|
|
6
6
|
and this project adheres to [Semantic Versioning](http://semver.org/).
|
|
7
7
|
|
|
8
|
+
## Unreleased
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Support for ActiveModel 7.
|
|
13
|
+
|
|
14
|
+
- Support for Ruby 3.1 and 3.2.
|
|
15
|
+
|
|
16
|
+
- Commas are no longer allowed anywhere in an email address. Thanks @prognostikos!
|
|
17
|
+
|
|
18
|
+
### Removed
|
|
19
|
+
|
|
20
|
+
-
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
## [2.1.0]
|
|
24
|
+
|
|
25
|
+
### Added
|
|
26
|
+
|
|
27
|
+
- Support for Ruby 3.0. We've also started testing against Ruby 3.1 to be
|
|
28
|
+
prepared.
|
|
29
|
+
|
|
30
|
+
- Email addresses with trailing @'s are no longer accepted. Thanks
|
|
31
|
+
@prognostikos!
|
|
32
|
+
|
|
8
33
|
## [2.0.0]
|
|
9
34
|
|
|
10
35
|
### Added
|
data/Gemfile
CHANGED
data/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Email Address Validator
|
|
2
2
|
## ActiveModel-style email address format validator
|
|
3
3
|
|
|
4
|
-
[](https://codeclimate.com/github/substancelab/activemodel-email_address_validator) [](https://coveralls.io/github/substancelab/activemodel-email_address_validator?branch=more-badges)
|
|
5
5
|
|
|
6
6
|
Whenever I have wanted to validate an email address it has been because I wanted to be somewhat certain I can send an email to someone. Usually this happens as part of a signup procedure.
|
|
7
7
|
|
data/Rakefile
CHANGED
|
@@ -1,23 +1,21 @@
|
|
|
1
|
-
# coding: utf-8
|
|
2
1
|
lib = File.expand_path("../lib", __FILE__)
|
|
3
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
3
|
require "activemodel_email_address_validator/version"
|
|
5
4
|
|
|
6
5
|
Gem::Specification.new do |spec|
|
|
7
|
-
spec.name
|
|
8
|
-
spec.version
|
|
9
|
-
spec.authors
|
|
10
|
-
spec.email
|
|
11
|
-
spec.summary
|
|
12
|
-
spec.homepage
|
|
13
|
-
spec.license
|
|
6
|
+
spec.name = "activemodel-email_address_validator"
|
|
7
|
+
spec.version = ActiveModelEmailAddressValidator::VERSION
|
|
8
|
+
spec.authors = ["Jakob Skjerning"]
|
|
9
|
+
spec.email = ["jakob@mentalized.net"]
|
|
10
|
+
spec.summary = "ActiveModel-style email address format validator"
|
|
11
|
+
spec.homepage = ""
|
|
12
|
+
spec.license = "MIT"
|
|
14
13
|
|
|
15
|
-
spec.files
|
|
16
|
-
spec.executables
|
|
17
|
-
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
14
|
+
spec.files = `git ls-files -z`.split("\x0")
|
|
15
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
18
16
|
spec.require_paths = ["lib"]
|
|
19
17
|
|
|
20
|
-
spec.add_dependency "activemodel", ">= 4.0", "<
|
|
18
|
+
spec.add_dependency "activemodel", ">= 4.0", "< 8.0"
|
|
21
19
|
|
|
22
20
|
spec.add_development_dependency "bundler", ">= 1.7"
|
|
23
21
|
spec.add_development_dependency "rake", ">= 10.0"
|
|
@@ -20,20 +20,26 @@ module ActiveModelEmailAddressValidator
|
|
|
20
20
|
|
|
21
21
|
attr_reader :address
|
|
22
22
|
|
|
23
|
+
def valid_host?(host)
|
|
24
|
+
/^([^,. ~]+\.)+[a-z]+$/.match?(host)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def valid_user?(user)
|
|
28
|
+
/^([^.]+\S)*[^.]+$/.match?(user)
|
|
29
|
+
end
|
|
30
|
+
|
|
23
31
|
def valid_using_regex?(regex)
|
|
24
32
|
address.to_s =~ regex
|
|
25
33
|
end
|
|
26
34
|
|
|
27
35
|
def valid_using_default?
|
|
28
|
-
return false if address
|
|
29
|
-
email_parts = address.split("@")
|
|
36
|
+
return false if /(\s|["'<>,])+/.match?(address)
|
|
30
37
|
|
|
38
|
+
email_parts = address.split("@", -1)
|
|
31
39
|
return false unless email_parts.size == 2
|
|
32
40
|
|
|
33
41
|
user, host = *email_parts
|
|
34
|
-
|
|
35
|
-
return false unless host =~ /^([^,. ~]+\.)+[^,. ]+$/
|
|
36
|
-
true
|
|
42
|
+
valid_user?(user) && valid_host?(host)
|
|
37
43
|
end
|
|
38
44
|
end
|
|
39
45
|
end
|
|
@@ -101,10 +101,22 @@ class EmailAddressValidTest < MiniTest::Test
|
|
|
101
101
|
reject("my@nice@domain.com")
|
|
102
102
|
end
|
|
103
103
|
|
|
104
|
+
def test_rejects_leading_at_signs
|
|
105
|
+
reject("@my@domain.com")
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def test_rejects_trailing_at_signs
|
|
109
|
+
reject("my@domain.com@")
|
|
110
|
+
end
|
|
111
|
+
|
|
104
112
|
def test_rejects_commas_in_hostname
|
|
105
113
|
reject("my@domain.com,")
|
|
106
114
|
end
|
|
107
115
|
|
|
116
|
+
def test_rejects_commas_in_username
|
|
117
|
+
reject("foo,bar@domain.com")
|
|
118
|
+
end
|
|
119
|
+
|
|
108
120
|
def test_rejects_tildes_in_hostname
|
|
109
121
|
reject("my@~domain.com")
|
|
110
122
|
end
|
|
@@ -113,6 +125,21 @@ class EmailAddressValidTest < MiniTest::Test
|
|
|
113
125
|
reject("fernandeztorralbofrancisco@sabadellatlantico.")
|
|
114
126
|
end
|
|
115
127
|
|
|
128
|
+
def test_rejects_ip_addresses
|
|
129
|
+
reject("email@123.123.12.123")
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def test_rejects_script_injection
|
|
133
|
+
reject("email_<script></script>_123@example.co.in")
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def test_rejects_username_with_quotation_mark
|
|
137
|
+
reject('email"123@example.com')
|
|
138
|
+
reject('email123@exa"mple.com')
|
|
139
|
+
reject("email'123@example.com")
|
|
140
|
+
reject("email123@exa'mple.com")
|
|
141
|
+
end
|
|
142
|
+
|
|
116
143
|
private
|
|
117
144
|
|
|
118
145
|
def accept(email_address)
|
data/test/minitest_helper.rb
CHANGED
|
@@ -7,9 +7,8 @@ require "activemodel-email_address_validator"
|
|
|
7
7
|
require "minitest/autorun"
|
|
8
8
|
require "minitest/spec"
|
|
9
9
|
|
|
10
|
-
SIMPLEST_VALIDATION = {:
|
|
10
|
+
SIMPLEST_VALIDATION = {email: {email_address: true}}
|
|
11
11
|
|
|
12
|
-
# rubocop:disable Metrics/MethodLength
|
|
13
12
|
def build_model_with_validations(validations = SIMPLEST_VALIDATION)
|
|
14
13
|
klass = Class.new do
|
|
15
14
|
include ActiveModel::Validations
|
|
@@ -8,7 +8,7 @@ class EmailAddressValidatorTest < MiniTest::Test
|
|
|
8
8
|
|
|
9
9
|
def test_accepts_nil_email_address
|
|
10
10
|
@subject = build_model_with_validations(
|
|
11
|
-
:
|
|
11
|
+
email: {email_address: true, allow_nil: true}
|
|
12
12
|
)
|
|
13
13
|
accept(nil, @subject)
|
|
14
14
|
end
|
|
@@ -23,7 +23,7 @@ class EmailAddressValidatorTest < MiniTest::Test
|
|
|
23
23
|
|
|
24
24
|
def test_adds_errors_to_validated_attribute
|
|
25
25
|
subject = build_model_with_validations(
|
|
26
|
-
:
|
|
26
|
+
work_email: {email_address: true}
|
|
27
27
|
)
|
|
28
28
|
subject.work_email = "whatever"
|
|
29
29
|
subject.valid?
|
|
@@ -33,7 +33,7 @@ class EmailAddressValidatorTest < MiniTest::Test
|
|
|
33
33
|
|
|
34
34
|
def test_validates_with_custom_regular_expression
|
|
35
35
|
subject = build_model_with_validations(
|
|
36
|
-
:
|
|
36
|
+
email: {email_address: {format: /.+@enterprise\..+/}}
|
|
37
37
|
)
|
|
38
38
|
accept("whatever@enterprise.museum", subject)
|
|
39
39
|
reject("totally@valid.com", subject)
|
|
@@ -41,7 +41,7 @@ class EmailAddressValidatorTest < MiniTest::Test
|
|
|
41
41
|
|
|
42
42
|
def test_validates_with_custom_regular_as_a_rule
|
|
43
43
|
subject = build_model_with_validations(
|
|
44
|
-
:
|
|
44
|
+
email: {email_address: {with: /.+@enterprise\..+/}}
|
|
45
45
|
)
|
|
46
46
|
accept("whatever@enterprise.museum", subject)
|
|
47
47
|
reject("totally@valid.com", subject)
|
|
@@ -49,9 +49,9 @@ class EmailAddressValidatorTest < MiniTest::Test
|
|
|
49
49
|
|
|
50
50
|
def test_validates_with_proc
|
|
51
51
|
subject = build_model_with_validations(
|
|
52
|
-
:
|
|
53
|
-
:
|
|
54
|
-
}
|
|
52
|
+
email: {email_address: {
|
|
53
|
+
with: proc { |address| address == "foo" }
|
|
54
|
+
}}
|
|
55
55
|
)
|
|
56
56
|
accept("foo", subject)
|
|
57
57
|
reject("foo@bar.com", subject)
|
|
@@ -59,12 +59,12 @@ class EmailAddressValidatorTest < MiniTest::Test
|
|
|
59
59
|
|
|
60
60
|
def test_validates_with_multiple_procs
|
|
61
61
|
subject = build_model_with_validations(
|
|
62
|
-
:
|
|
63
|
-
:
|
|
62
|
+
email: {email_address: {
|
|
63
|
+
with: [
|
|
64
64
|
proc { |address| address == "ada" },
|
|
65
65
|
proc { |address| address.reverse == address }
|
|
66
|
-
]
|
|
67
|
-
}
|
|
66
|
+
]
|
|
67
|
+
}}
|
|
68
68
|
)
|
|
69
69
|
accept("ada", subject)
|
|
70
70
|
reject("bob", subject)
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: activemodel-email_address_validator
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.1.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jakob Skjerning
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2023-01-17 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activemodel
|
|
@@ -19,7 +19,7 @@ dependencies:
|
|
|
19
19
|
version: '4.0'
|
|
20
20
|
- - "<"
|
|
21
21
|
- !ruby/object:Gem::Version
|
|
22
|
-
version: '
|
|
22
|
+
version: '8.0'
|
|
23
23
|
type: :runtime
|
|
24
24
|
prerelease: false
|
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -29,7 +29,7 @@ dependencies:
|
|
|
29
29
|
version: '4.0'
|
|
30
30
|
- - "<"
|
|
31
31
|
- !ruby/object:Gem::Version
|
|
32
|
-
version: '
|
|
32
|
+
version: '8.0'
|
|
33
33
|
- !ruby/object:Gem::Dependency
|
|
34
34
|
name: bundler
|
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -72,15 +72,16 @@ dependencies:
|
|
|
72
72
|
- - ">="
|
|
73
73
|
- !ruby/object:Gem::Version
|
|
74
74
|
version: '0'
|
|
75
|
-
description:
|
|
75
|
+
description:
|
|
76
76
|
email:
|
|
77
77
|
- jakob@mentalized.net
|
|
78
78
|
executables: []
|
|
79
79
|
extensions: []
|
|
80
80
|
extra_rdoc_files: []
|
|
81
81
|
files:
|
|
82
|
+
- ".github/dependabot.yml"
|
|
83
|
+
- ".github/workflows/ruby.yml"
|
|
82
84
|
- ".gitignore"
|
|
83
|
-
- ".travis.yml"
|
|
84
85
|
- CHANGELOG.md
|
|
85
86
|
- Gemfile
|
|
86
87
|
- LICENSE.txt
|
|
@@ -98,7 +99,7 @@ homepage: ''
|
|
|
98
99
|
licenses:
|
|
99
100
|
- MIT
|
|
100
101
|
metadata: {}
|
|
101
|
-
post_install_message:
|
|
102
|
+
post_install_message:
|
|
102
103
|
rdoc_options: []
|
|
103
104
|
require_paths:
|
|
104
105
|
- lib
|
|
@@ -113,11 +114,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
113
114
|
- !ruby/object:Gem::Version
|
|
114
115
|
version: '0'
|
|
115
116
|
requirements: []
|
|
116
|
-
rubygems_version: 3.
|
|
117
|
-
signing_key:
|
|
117
|
+
rubygems_version: 3.2.32
|
|
118
|
+
signing_key:
|
|
118
119
|
specification_version: 4
|
|
119
120
|
summary: ActiveModel-style email address format validator
|
|
120
|
-
test_files:
|
|
121
|
-
- test/activemodel-email_address_validator/test_email_address.rb
|
|
122
|
-
- test/minitest_helper.rb
|
|
123
|
-
- test/test_active_model_integration.rb
|
|
121
|
+
test_files: []
|