email_address 0.1.13 → 0.1.18
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/.travis.yml +1 -2
- data/README.md +42 -3
- data/email_address.gemspec +1 -0
- data/lib/email_address.rb +17 -18
- data/lib/email_address/active_record_validator.rb +2 -2
- data/lib/email_address/address.rb +94 -100
- data/lib/email_address/canonical_email_address_type.rb +14 -12
- data/lib/email_address/config.rb +69 -47
- data/lib/email_address/email_address_type.rb +15 -13
- data/lib/email_address/exchanger.rb +29 -30
- data/lib/email_address/host.rb +123 -125
- data/lib/email_address/local.rb +7 -7
- data/lib/email_address/version.rb +1 -1
- data/test/email_address/test_address.rb +5 -0
- data/test/email_address/test_host.rb +29 -31
- data/test/test_aliasing.rb +54 -0
- metadata +8 -6
    
        data/lib/email_address/local.rb
    CHANGED
    
    | @@ -107,7 +107,7 @@ module EmailAddress | |
| 107 107 | 
             
                  %r/^([\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+)$/i.freeze
         | 
| 108 108 |  | 
| 109 109 | 
             
                def initialize(local, config={}, host=nil)
         | 
| 110 | 
            -
                   | 
| 110 | 
            +
                  @config = config.is_a?(Hash) ? Config.new(config) : config
         | 
| 111 111 | 
             
                  self.local    = local
         | 
| 112 112 | 
             
                  @host         = host
         | 
| 113 113 | 
             
                  @error        = @error_message = nil
         | 
| @@ -130,10 +130,10 @@ module EmailAddress | |
| 130 130 | 
             
                def parse(raw)
         | 
| 131 131 | 
             
                  if raw =~ /\A\"(.*)\"\z/ # Quoted
         | 
| 132 132 | 
             
                    raw = $1
         | 
| 133 | 
            -
                    raw.gsub | 
| 133 | 
            +
                    raw = raw.gsub(/\\(.)/, '\1') # Unescape
         | 
| 134 134 | 
             
                  elsif @config[:local_fix] && @config[:local_format] != :standard
         | 
| 135 | 
            -
                    raw.gsub | 
| 136 | 
            -
                    raw.gsub | 
| 135 | 
            +
                    raw = raw.gsub(' ','')
         | 
| 136 | 
            +
                    raw = raw.gsub(',','.')
         | 
| 137 137 | 
             
                    #raw.gsub!(/([^\p{L}\p{N}]{2,10})/) {|s| s[0] } # Stutter punctuation typo
         | 
| 138 138 | 
             
                  end
         | 
| 139 139 | 
             
                  raw, comment = self.parse_comment(raw)
         | 
| @@ -226,7 +226,7 @@ module EmailAddress | |
| 226 226 | 
             
                def relax
         | 
| 227 227 | 
             
                  form = self.mailbox
         | 
| 228 228 | 
             
                  form += @config[:tag_separator] + self.tag if self.tag
         | 
| 229 | 
            -
                  form.gsub | 
| 229 | 
            +
                  form = form.gsub(/[ \"\(\),:<>@\[\]\\]/,'')
         | 
| 230 230 | 
             
                  form
         | 
| 231 231 | 
             
                end
         | 
| 232 232 |  | 
| @@ -235,7 +235,7 @@ module EmailAddress | |
| 235 235 | 
             
                  form = self.mailbox
         | 
| 236 236 | 
             
                  form += @config[:tag_separator] + self.tag if self.tag
         | 
| 237 237 | 
             
                  form += "(" + self.comment + ")" if self.comment
         | 
| 238 | 
            -
                  form.gsub | 
| 238 | 
            +
                  form = form.gsub(/([\\\"])/, '\\\1') # Escape \ and "
         | 
| 239 239 | 
             
                  if form =~ /[ \"\(\),:<>@\[\\\]]/ # Space and "(),:;<>@[\]
         | 
| 240 240 | 
             
                    form = %Q("#{form}")
         | 
| 241 241 | 
             
                  end
         | 
| @@ -388,7 +388,7 @@ module EmailAddress | |
| 388 388 | 
             
                def set_error(err, reason=nil)
         | 
| 389 389 | 
             
                  @error = err
         | 
| 390 390 | 
             
                  @reason= reason
         | 
| 391 | 
            -
                  @error_message =  | 
| 391 | 
            +
                  @error_message = Config.error_message(err)
         | 
| 392 392 | 
             
                  false
         | 
| 393 393 | 
             
                end
         | 
| 394 394 |  | 
| @@ -37,6 +37,11 @@ class TestAddress < Minitest::Test | |
| 37 37 | 
             
                assert_equal "6bdd00c53645790ad9bbcb50caa93880",  EmailAddress.reference("Gmail.User+tag@gmail.com")
         | 
| 38 38 | 
             
              end
         | 
| 39 39 |  | 
| 40 | 
            +
              def test_google_hosted
         | 
| 41 | 
            +
                a = EmailAddress.new("Ex.am.ple+tag@boomer.com")
         | 
| 42 | 
            +
                assert_equal a.canonical, "ex.am.ple@boomer.com"
         | 
| 43 | 
            +
              end
         | 
| 44 | 
            +
             | 
| 40 45 | 
             
              # COMPARISON & MATCHING
         | 
| 41 46 | 
             
              def test_compare
         | 
| 42 47 | 
             
                a = ("User+tag@example.com")
         | 
| @@ -1,6 +1,4 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
            require_relative '../test_helper'
         | 
| 3 | 
            -
             | 
| 1 | 
            +
            require_relative "../test_helper"
         | 
| 4 2 |  | 
| 5 3 | 
             
            class TestHost < MiniTest::Test
         | 
| 6 4 | 
             
              def test_host
         | 
| @@ -10,16 +8,16 @@ class TestHost < MiniTest::Test | |
| 10 8 | 
             
                assert_equal "example", a.registration_name
         | 
| 11 9 | 
             
                assert_equal "com", a.tld
         | 
| 12 10 | 
             
                assert_equal "ex*****", a.munge
         | 
| 13 | 
            -
                assert_nil | 
| 11 | 
            +
                assert_nil a.subdomains
         | 
| 14 12 | 
             
              end
         | 
| 15 13 |  | 
| 16 14 | 
             
              def test_dns_enabled
         | 
| 17 15 | 
             
                a = EmailAddress::Host.new("example.com")
         | 
| 18 16 | 
             
                assert_instance_of TrueClass, a.dns_enabled?
         | 
| 19 | 
            -
                 | 
| 20 | 
            -
                 | 
| 17 | 
            +
                a = EmailAddress::Host.new("example.com", host_validation: :syntax)
         | 
| 18 | 
            +
                assert_instance_of FalseClass, a.dns_enabled?
         | 
| 19 | 
            +
                a = EmailAddress::Host.new("example.com", dns_lookup: :off)
         | 
| 21 20 | 
             
                assert_instance_of FalseClass, a.dns_enabled?
         | 
| 22 | 
            -
                EmailAddress::Config.configure(host_validation: old_setting)
         | 
| 23 21 | 
             
              end
         | 
| 24 22 |  | 
| 25 23 | 
             
              def test_foreign_host
         | 
| @@ -53,54 +51,54 @@ class TestHost < MiniTest::Test | |
| 53 51 |  | 
| 54 52 | 
             
              def test_dmarc
         | 
| 55 53 | 
             
                d = EmailAddress::Host.new("yahoo.com").dmarc
         | 
| 56 | 
            -
                assert_equal  | 
| 54 | 
            +
                assert_equal "reject", d[:p]
         | 
| 57 55 | 
             
                d = EmailAddress::Host.new("example.com").dmarc
         | 
| 58 56 | 
             
                assert_equal true, d.empty?
         | 
| 59 57 | 
             
              end
         | 
| 60 58 |  | 
| 61 59 | 
             
              def test_ipv4
         | 
| 62 | 
            -
                h = EmailAddress::Host.new("[127.0.0.1]", host_allow_ip:true, host_local:true)
         | 
| 60 | 
            +
                h = EmailAddress::Host.new("[127.0.0.1]", host_allow_ip: true, host_local: true)
         | 
| 63 61 | 
             
                assert_equal "127.0.0.1", h.ip_address
         | 
| 64 62 | 
             
                assert_equal true, h.valid?
         | 
| 65 63 | 
             
              end
         | 
| 66 64 |  | 
| 67 65 | 
             
              def test_ipv6
         | 
| 68 | 
            -
                h = EmailAddress::Host.new("[IPv6:::1]", host_allow_ip:true, host_local:true)
         | 
| 66 | 
            +
                h = EmailAddress::Host.new("[IPv6:::1]", host_allow_ip: true, host_local: true)
         | 
| 69 67 | 
             
                assert_equal "::1", h.ip_address
         | 
| 70 68 | 
             
                assert_equal true, h.valid?
         | 
| 71 69 | 
             
              end
         | 
| 72 70 |  | 
| 73 71 | 
             
              def test_comment
         | 
| 74 72 | 
             
                h = EmailAddress::Host.new("(oops)gmail.com")
         | 
| 75 | 
            -
                assert_equal  | 
| 76 | 
            -
                assert_equal  | 
| 73 | 
            +
                assert_equal "gmail.com", h.to_s
         | 
| 74 | 
            +
                assert_equal "oops", h.comment
         | 
| 77 75 | 
             
                h = EmailAddress::Host.new("gmail.com(oops)")
         | 
| 78 | 
            -
                assert_equal  | 
| 79 | 
            -
                assert_equal  | 
| 76 | 
            +
                assert_equal "gmail.com", h.to_s
         | 
| 77 | 
            +
                assert_equal "oops", h.comment
         | 
| 80 78 | 
             
              end
         | 
| 81 79 |  | 
| 82 80 | 
             
              def test_matches
         | 
| 83 81 | 
             
                h = EmailAddress::Host.new("yahoo.co.jp")
         | 
| 84 82 | 
             
                assert_equal false, h.matches?("gmail.com")
         | 
| 85 | 
            -
                assert_equal  | 
| 86 | 
            -
                assert_equal  | 
| 87 | 
            -
                assert_equal  | 
| 88 | 
            -
                assert_equal  | 
| 89 | 
            -
                assert_equal  | 
| 83 | 
            +
                assert_equal "yahoo.co.jp", h.matches?("yahoo.co.jp")
         | 
| 84 | 
            +
                assert_equal ".co.jp", h.matches?(".co.jp")
         | 
| 85 | 
            +
                assert_equal ".jp", h.matches?(".jp")
         | 
| 86 | 
            +
                assert_equal "yahoo.", h.matches?("yahoo.")
         | 
| 87 | 
            +
                assert_equal "yah*.jp", h.matches?("yah*.jp")
         | 
| 90 88 | 
             
              end
         | 
| 91 89 |  | 
| 92 90 | 
             
              def test_ipv4_matches
         | 
| 93 | 
            -
                h = EmailAddress::Host.new("[123.123.123.8]", host_allow_ip:true)
         | 
| 91 | 
            +
                h = EmailAddress::Host.new("[123.123.123.8]", host_allow_ip: true)
         | 
| 94 92 | 
             
                assert_equal "123.123.123.8", h.ip_address
         | 
| 95 93 | 
             
                assert_equal false, h.matches?("127.0.0.0/8")
         | 
| 96 | 
            -
                assert_equal  | 
| 94 | 
            +
                assert_equal "123.123.123.0/24", h.matches?("123.123.123.0/24")
         | 
| 97 95 | 
             
              end
         | 
| 98 96 |  | 
| 99 97 | 
             
              def test_ipv6_matches
         | 
| 100 | 
            -
                h = EmailAddress::Host.new("[IPV6:2001:db8::1]", host_allow_ip:true)
         | 
| 98 | 
            +
                h = EmailAddress::Host.new("[IPV6:2001:db8::1]", host_allow_ip: true)
         | 
| 101 99 | 
             
                assert_equal "2001:db8::1", h.ip_address
         | 
| 102 100 | 
             
                assert_equal false, h.matches?("2002:db8::/118")
         | 
| 103 | 
            -
                assert_equal  | 
| 101 | 
            +
                assert_equal "2001:db8::/118", h.matches?("2001:db8::/118")
         | 
| 104 102 | 
             
              end
         | 
| 105 103 |  | 
| 106 104 | 
             
              def test_regexen
         | 
| @@ -112,18 +110,18 @@ class TestHost < MiniTest::Test | |
| 112 110 | 
             
              end
         | 
| 113 111 |  | 
| 114 112 | 
             
              def test_hosted_service
         | 
| 115 | 
            -
                assert EmailAddress.valid?( | 
| 116 | 
            -
                assert ! | 
| 113 | 
            +
                assert EmailAddress.valid?("test@jiff.com", dns_lookup: :mx)
         | 
| 114 | 
            +
                assert !EmailAddress.valid?("test@gmail.com", dns_lookup: :mx)
         | 
| 117 115 | 
             
              end
         | 
| 118 116 |  | 
| 119 117 | 
             
              def test_yahoo_bad_tld
         | 
| 120 | 
            -
                assert ! | 
| 121 | 
            -
                assert ! | 
| 118 | 
            +
                assert !EmailAddress.valid?("test@yahoo.badtld")
         | 
| 119 | 
            +
                assert !EmailAddress.valid?("test@yahoo.wtf") # Registered, but MX IP = 0.0.0.0
         | 
| 122 120 | 
             
              end
         | 
| 123 121 |  | 
| 124 122 | 
             
              def test_bad_formats
         | 
| 125 | 
            -
                assert ! | 
| 126 | 
            -
                assert EmailAddress::Host.new( | 
| 123 | 
            +
                assert !EmailAddress::Host.new("ya  hoo.com").valid?
         | 
| 124 | 
            +
                assert EmailAddress::Host.new("ya  hoo.com", host_remove_spaces: true).valid?
         | 
| 127 125 | 
             
              end
         | 
| 128 126 |  | 
| 129 127 | 
             
              def test_errors
         | 
| @@ -133,7 +131,7 @@ class TestHost < MiniTest::Test | |
| 133 131 | 
             
                assert_nil EmailAddress::Host.new("ajsdfhajshdfklasjhd.wtf", host_validation: :syntax).error
         | 
| 134 132 | 
             
                assert_equal EmailAddress::Host.new("ya  hoo.com", host_validation: :syntax).error, "Invalid Domain Name"
         | 
| 135 133 | 
             
                assert_equal EmailAddress::Host.new("[127.0.0.1]").error, "IP Addresses are not allowed"
         | 
| 136 | 
            -
                assert_equal EmailAddress::Host.new("[127.0.0.666]", host_allow_ip:true).error, "This is not a valid IPv4 address"
         | 
| 137 | 
            -
                assert_equal EmailAddress::Host.new("[IPv6::12t]", host_allow_ip:true).error, "This is not a valid IPv6 address"
         | 
| 134 | 
            +
                assert_equal EmailAddress::Host.new("[127.0.0.666]", host_allow_ip: true).error, "This is not a valid IPv4 address"
         | 
| 135 | 
            +
                assert_equal EmailAddress::Host.new("[IPv6::12t]", host_allow_ip: true).error, "This is not a valid IPv6 address"
         | 
| 138 136 | 
             
              end
         | 
| 139 137 | 
             
            end
         | 
| @@ -0,0 +1,54 @@ | |
| 1 | 
            +
            # encoding: UTF-8
         | 
| 2 | 
            +
            require_relative 'test_helper'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            class TestAliasing < MiniTest::Test
         | 
| 5 | 
            +
              def setup
         | 
| 6 | 
            +
                Object.send(:const_set, :EmailAddressValidator, EmailAddress)
         | 
| 7 | 
            +
                Object.send(:remove_const, :EmailAddress)
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              def test_email_address_not_defined
         | 
| 11 | 
            +
                assert_nil defined?(EmailAddress)
         | 
| 12 | 
            +
                assert_nil defined?(EmailAddress::Address)
         | 
| 13 | 
            +
                assert_nil defined?(EmailAddress::Config)
         | 
| 14 | 
            +
                assert_nil defined?(EmailAddress::Exchanger)
         | 
| 15 | 
            +
                assert_nil defined?(EmailAddress::Host)
         | 
| 16 | 
            +
                assert_nil defined?(EmailAddress::Local)
         | 
| 17 | 
            +
                assert_nil defined?(EmailAddress::Rewriter)
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              def test_alias_defined
         | 
| 21 | 
            +
                assert_equal defined?(EmailAddressValidator), "constant"
         | 
| 22 | 
            +
                assert_equal defined?(EmailAddressValidator::Address), "constant"
         | 
| 23 | 
            +
                assert_equal defined?(EmailAddressValidator::Config), "constant"
         | 
| 24 | 
            +
                assert_equal defined?(EmailAddressValidator::Exchanger), "constant"
         | 
| 25 | 
            +
                assert_equal defined?(EmailAddressValidator::Host), "constant"
         | 
| 26 | 
            +
                assert_equal defined?(EmailAddressValidator::Local), "constant"
         | 
| 27 | 
            +
                assert_equal defined?(EmailAddressValidator::Rewriter), "constant"
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
              def test_alias_class_methods
         | 
| 31 | 
            +
                assert_equal true, EmailAddressValidator.valid?("user@yahoo.com")
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
              def test_alias_host_methods
         | 
| 35 | 
            +
                assert_equal true, EmailAddressValidator::Host.new("yahoo.com").valid?
         | 
| 36 | 
            +
              end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
              def test_alias_address_methods
         | 
| 39 | 
            +
                assert_equal true, EmailAddressValidator::Address.new("user@yahoo.com").valid?
         | 
| 40 | 
            +
              end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
              def test_alias_config_methods
         | 
| 43 | 
            +
                assert Hash, EmailAddressValidator::Config.new.to_h
         | 
| 44 | 
            +
              end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
              def test_alias_local_methods
         | 
| 47 | 
            +
                assert_equal true, EmailAddressValidator::Local.new("user").valid?
         | 
| 48 | 
            +
              end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
              def teardown
         | 
| 51 | 
            +
                Object.send(:const_set, :EmailAddress, EmailAddressValidator)
         | 
| 52 | 
            +
                Object.send(:remove_const, :EmailAddressValidator)
         | 
| 53 | 
            +
              end
         | 
| 54 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: email_address
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.18
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Allen Fair
         | 
| 8 | 
            -
            autorequire: | 
| 8 | 
            +
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2020- | 
| 11 | 
            +
            date: 2020-06-24 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rake
         | 
| @@ -162,13 +162,14 @@ files: | |
| 162 162 | 
             
            - test/email_address/test_host.rb
         | 
| 163 163 | 
             
            - test/email_address/test_local.rb
         | 
| 164 164 | 
             
            - test/email_address/test_rewriter.rb
         | 
| 165 | 
            +
            - test/test_aliasing.rb
         | 
| 165 166 | 
             
            - test/test_email_address.rb
         | 
| 166 167 | 
             
            - test/test_helper.rb
         | 
| 167 168 | 
             
            homepage: https://github.com/afair/email_address
         | 
| 168 169 | 
             
            licenses:
         | 
| 169 170 | 
             
            - MIT
         | 
| 170 171 | 
             
            metadata: {}
         | 
| 171 | 
            -
            post_install_message: | 
| 172 | 
            +
            post_install_message:
         | 
| 172 173 | 
             
            rdoc_options: []
         | 
| 173 174 | 
             
            require_paths:
         | 
| 174 175 | 
             
            - lib
         | 
| @@ -183,8 +184,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 183 184 | 
             
                - !ruby/object:Gem::Version
         | 
| 184 185 | 
             
                  version: '0'
         | 
| 185 186 | 
             
            requirements: []
         | 
| 186 | 
            -
            rubygems_version: 3. | 
| 187 | 
            -
            signing_key: | 
| 187 | 
            +
            rubygems_version: 3.0.6
         | 
| 188 | 
            +
            signing_key:
         | 
| 188 189 | 
             
            specification_version: 4
         | 
| 189 190 | 
             
            summary: This gem provides a ruby language library for working with and validating
         | 
| 190 191 | 
             
              email addresses. By default, it validates against conventional usage, the format
         | 
| @@ -199,5 +200,6 @@ test_files: | |
| 199 200 | 
             
            - test/email_address/test_host.rb
         | 
| 200 201 | 
             
            - test/email_address/test_local.rb
         | 
| 201 202 | 
             
            - test/email_address/test_rewriter.rb
         | 
| 203 | 
            +
            - test/test_aliasing.rb
         | 
| 202 204 | 
             
            - test/test_email_address.rb
         | 
| 203 205 | 
             
            - test/test_helper.rb
         |