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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 880e994c63a284ed895dfab2da408360b9cd70f8466176e99c1118d76e830f64
4
- data.tar.gz: ef9a1389211791aff43ed9874421515e3417b7e2b00e85ce70ee478c8f8a837b
3
+ metadata.gz: ce32d9302e063c235e291b9743acc89088c167adb42ef820d3869c325b827a13
4
+ data.tar.gz: 910f0ee9ad0d42d408eb0d3b90aac4e1f647c54f627628a096d3b5a246411f30
5
5
  SHA512:
6
- metadata.gz: 0dd406cdb1537d8d8099e71531e8797b9d4ebe3f619842ef65eaf9d43fd1a31062739bbca7ed7fa3f46f63ba2da30a8949f1e0f5795b7af3f26e2ea3cc8c030c
7
- data.tar.gz: c8ebc7e19f10ac906503606c8308c7ade2018a08840465743819d38f86598320955323020fbd73d8b0304794c2cc11104195a9a19639c9740bae246295735c73
6
+ metadata.gz: 7da25676700ae7c2003a01ad56cc8a5b2a6c9f81f3a38a6b956cccf244c9f6d26bf0d578ce3b5fe9495d2d5663f29cee6155cd198b5fca775ed64f4f66b1fe93
7
+ data.tar.gz: 7669cf81432b9ba999283832ca89dfefaff6bcaea22d2e6678ef5d91a2a58577541ee806d6f0c1cc8f7632a820f8bb251f6130a68cf31e5939c5efb625e670e9
@@ -0,0 +1,6 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "bundler"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "weekly"
@@ -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
@@ -3,4 +3,5 @@ source "https://rubygems.org"
3
3
  # Specify your gem's dependencies in activemodel-email_address_validator.gemspec
4
4
  gemspec
5
5
 
6
- gem "coveralls", :require => false
6
+ gem "coveralls", require: false
7
+ gem "standard", require: false
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Email Address Validator
2
2
  ## ActiveModel-style email address format validator
3
3
 
4
- [![Build Status](https://travis-ci.org/substancelab/activemodel-email_address_validator.svg?branch=master)](https://travis-ci.org/substancelab/activemodel-email_address_validator) [![Code Climate](https://codeclimate.com/github/substancelab/activemodel-email_address_validator/badges/gpa.svg)](https://codeclimate.com/github/substancelab/activemodel-email_address_validator) [![Coverage Status](https://coveralls.io/repos/substancelab/activemodel-email_address_validator/badge.svg?branch=more-badges&service=github)](https://coveralls.io/github/substancelab/activemodel-email_address_validator?branch=more-badges)
4
+ [![Code Climate](https://codeclimate.com/github/substancelab/activemodel-email_address_validator/badges/gpa.svg)](https://codeclimate.com/github/substancelab/activemodel-email_address_validator) [![Coverage Status](https://coveralls.io/repos/substancelab/activemodel-email_address_validator/badge.svg?branch=more-badges&service=github)](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
@@ -6,7 +6,7 @@ Rake::TestTask.new(:test) do |t|
6
6
  t.libs << "test"
7
7
  end
8
8
 
9
- task :default => :test
9
+ task default: :test
10
10
 
11
11
  desc "Launch an IRB console with the gem loaded"
12
12
  task :console do
@@ -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 = "activemodel-email_address_validator"
8
- spec.version = ActiveModelEmailAddressValidator::VERSION
9
- spec.authors = ["Jakob Skjerning"]
10
- spec.email = ["jakob@mentalized.net"]
11
- spec.summary = "ActiveModel-style email address format validator"
12
- spec.homepage = ""
13
- spec.license = "MIT"
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 = `git ls-files -z`.split("\x0")
16
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
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", "< 7.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 =~ /\s+/
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
- return false unless user =~ /^([^.]+\S)*[^. ]+$/
35
- return false unless host =~ /^([^,. ~]+\.)+[^,. ]+$/
36
- true
42
+ valid_user?(user) && valid_host?(host)
37
43
  end
38
44
  end
39
45
  end
@@ -1,3 +1,3 @@
1
1
  module ActiveModelEmailAddressValidator
2
- VERSION = "2.0.0"
2
+ VERSION = "2.1.1"
3
3
  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)
@@ -7,9 +7,8 @@ require "activemodel-email_address_validator"
7
7
  require "minitest/autorun"
8
8
  require "minitest/spec"
9
9
 
10
- SIMPLEST_VALIDATION = {:email => {:email_address => true}}
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
- :email => {:email_address => true, :allow_nil => true}
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
- :work_email => {:email_address => true}
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
- :email => {:email_address => {:format => /.+@enterprise\..+/}}
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
- :email => {:email_address => {:with => /.+@enterprise\..+/}}
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
- :email => {:email_address => {
53
- :with => proc { |address| address == "foo" }}
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
- :email => {:email_address => {
63
- :with => [
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.0.0
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: 2019-12-04 00:00:00.000000000 Z
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: '7.0'
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: '7.0'
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.0.6
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: []
data/.travis.yml DELETED
@@ -1,14 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.4.6
4
- - 2.5.5
5
- - 2.6.3
6
- - 2.7.0-preview1
7
-
8
- before_install:
9
- - gem update --system
10
- - gem install bundler
11
-
12
- notifications:
13
- recipients:
14
- - jakob@mentalized.net