email_address 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,13 +5,47 @@ class TestEmailAddress < MiniTest::Test
5
5
 
6
6
  def test_new
7
7
  a = EmailAddress.new('user@example.com')
8
- assert_equal a.local.to_s, 'user'
9
- assert_equal a.host.to_s, 'example.com'
8
+ assert_equal 'user', a.local.to_s
9
+ assert_equal 'example.com', a.host.to_s
10
+ end
11
+
12
+ def test_canonical
13
+ assert_equal "firstlast@gmail.com", EmailAddress.canonical('First.Last+TAG@gmail.com')
14
+ a = EmailAddress.new_canonical('First.Last+TAG@gmail.com')
15
+ assert_equal 'firstlast', a.local.to_s
16
+ end
17
+
18
+ def test_normal
19
+ assert_equal 'user+tag@gmail.com', EmailAddress.normal('USER+TAG@GMAIL.com')
10
20
  end
11
21
 
12
22
  def test_valid
13
- v = EmailAddress.valid?('user@yahoo.com')
14
- assert_equal v, true
23
+ assert_equal true, EmailAddress.valid?('user@yahoo.com')
24
+ assert_equal true, EmailAddress.valid?('a@yahoo.com')
25
+ end
26
+
27
+ def test_matches
28
+ assert_equal 'yahoo.', EmailAddress.matches?('user@yahoo.com', 'yahoo.')
29
+ end
30
+
31
+ def test_reference
32
+ assert_equal 'dfeafc750cecde54f9a4775f5713bf01', EmailAddress.reference('user@yahoo.com')
33
+ end
34
+
35
+ def test_redact
36
+ assert_equal '{e037b6c476357f34f92b8f35b25d179a4f573f1e}@yahoo.com', EmailAddress.redact('user@yahoo.com')
37
+ end
38
+
39
+ def test_cases
40
+ %w( miles.o'brien@yahoo.com first..last@gmail.com a-b.c_d+e@f.gx
41
+ ).each do |address|
42
+ assert EmailAddress.valid?(address, dns_lookup: :off), "valid?(#{address})"
43
+ end
44
+ end
45
+
46
+ def test_empty
47
+ assert_equal "", EmailAddress.normal("")
48
+ assert_equal "", EmailAddress.normal(" ")
15
49
  end
16
50
 
17
51
  end
data/test/test_helper.rb CHANGED
@@ -1,9 +1,11 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+
3
+ require 'codeclimate-test-reporter'
4
+ CodeClimate::TestReporter.start
5
+
6
+ require 'active_record'
1
7
  require 'rubygems'
2
8
  require 'minitest/autorun'
9
+ require 'minitest/unit'
3
10
  require 'minitest/pride'
4
-
5
- $LOAD_PATH.unshift(File.dirname(__FILE__))
6
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
7
11
  require 'email_address'
8
-
9
- # Go!
metadata CHANGED
@@ -1,88 +1,128 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: email_address
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.1.0
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: 2015-12-30 00:00:00.000000000 Z
11
+ date: 2016-01-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0'
19
+ name: rake
20
+ prerelease: false
21
+ type: :development
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
15
28
  requirement: !ruby/object:Gem::Requirement
16
29
  requirements:
17
30
  - - "~>"
18
31
  - !ruby/object:Gem::Version
19
- version: '1.3'
32
+ version: 5.8.3
33
+ name: minitest
34
+ prerelease: false
20
35
  type: :development
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 5.8.3
41
+ - !ruby/object:Gem::Dependency
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '1.3'
47
+ name: bundler
21
48
  prerelease: false
49
+ type: :development
22
50
  version_requirements: !ruby/object:Gem::Requirement
23
51
  requirements:
24
52
  - - "~>"
25
53
  - !ruby/object:Gem::Version
26
54
  version: '1.3'
27
55
  - !ruby/object:Gem::Dependency
28
- name: activemodel
29
56
  requirement: !ruby/object:Gem::Requirement
30
57
  requirements:
31
58
  - - "~>"
32
59
  - !ruby/object:Gem::Version
33
- version: '4.2'
34
- type: :development
60
+ version: 4.2.5
61
+ name: activerecord
35
62
  prerelease: false
63
+ type: :development
36
64
  version_requirements: !ruby/object:Gem::Requirement
37
65
  requirements:
38
66
  - - "~>"
39
67
  - !ruby/object:Gem::Version
40
- version: '4.2'
68
+ version: 4.2.5
41
69
  - !ruby/object:Gem::Dependency
42
- name: rake
43
70
  requirement: !ruby/object:Gem::Requirement
44
71
  requirements:
45
72
  - - ">="
46
73
  - !ruby/object:Gem::Version
47
74
  version: '0'
48
- type: :development
75
+ name: activerecord-jdbcsqlite3-adapter
49
76
  prerelease: false
77
+ type: :development
50
78
  version_requirements: !ruby/object:Gem::Requirement
51
79
  requirements:
52
80
  - - ">="
53
81
  - !ruby/object:Gem::Version
54
82
  version: '0'
55
83
  - !ruby/object:Gem::Dependency
56
- name: simpleidn
57
84
  requirement: !ruby/object:Gem::Requirement
58
85
  requirements:
59
86
  - - ">="
60
87
  - !ruby/object:Gem::Version
61
88
  version: '0'
62
- type: :runtime
89
+ name: codeclimate-test-reporter
63
90
  prerelease: false
91
+ type: :development
64
92
  version_requirements: !ruby/object:Gem::Requirement
65
93
  requirements:
66
94
  - - ">="
67
95
  - !ruby/object:Gem::Version
68
96
  version: '0'
69
97
  - !ruby/object:Gem::Dependency
70
- name: netaddr
71
98
  requirement: !ruby/object:Gem::Requirement
72
99
  requirements:
73
100
  - - ">="
74
101
  - !ruby/object:Gem::Version
75
102
  version: '0'
103
+ name: simpleidn
104
+ prerelease: false
76
105
  type: :runtime
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ name: netaddr
77
118
  prerelease: false
119
+ type: :runtime
78
120
  version_requirements: !ruby/object:Gem::Requirement
79
121
  requirements:
80
122
  - - ">="
81
123
  - !ruby/object:Gem::Version
82
124
  version: '0'
83
- description: |-
84
- The EmailAddress library is an _opinionated_ email address handler and
85
- validator.
125
+ description: The EmailAddress Gem to work with and validate email addresses.
86
126
  email:
87
127
  - allen.fair@gmail.com
88
128
  executables: []
@@ -90,6 +130,7 @@ extensions: []
90
130
  extra_rdoc_files: []
91
131
  files:
92
132
  - ".gitignore"
133
+ - ".travis.yml"
93
134
  - Gemfile
94
135
  - LICENSE.txt
95
136
  - README.md
@@ -98,32 +139,27 @@ files:
98
139
  - lib/email_address.rb
99
140
  - lib/email_address/active_record_validator.rb
100
141
  - lib/email_address/address.rb
142
+ - lib/email_address/canonical_email_address_type.rb
101
143
  - lib/email_address/config.rb
102
- - lib/email_address/domain_matcher.rb
103
- - lib/email_address/domain_parser.rb
104
144
  - lib/email_address/email_address_type.rb
105
145
  - lib/email_address/exchanger.rb
106
146
  - lib/email_address/host.rb
107
147
  - lib/email_address/local.rb
108
- - lib/email_address/matcher.rb
109
- - lib/email_address/validator.rb
110
148
  - lib/email_address/version.rb
149
+ - test/activerecord/test_ar.rb
150
+ - test/activerecord/user.rb
111
151
  - test/email_address/test_address.rb
112
152
  - test/email_address/test_config.rb
113
- - test/email_address/test_domain_matcher.rb
114
- - test/email_address/test_domain_parser.rb
115
153
  - test/email_address/test_exchanger.rb
116
154
  - test/email_address/test_host.rb
117
155
  - test/email_address/test_local.rb
118
- - test/email_address/test_matcher.rb
119
- - test/email_address/test_validator.rb
120
156
  - test/test_email_address.rb
121
157
  - test/test_helper.rb
122
158
  homepage: https://github.com/afair/email_address
123
159
  licenses:
124
160
  - MIT
125
161
  metadata: {}
126
- post_install_message:
162
+ post_install_message:
127
163
  rdoc_options: []
128
164
  require_paths:
129
165
  - lib
@@ -138,20 +174,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
174
  - !ruby/object:Gem::Version
139
175
  version: '0'
140
176
  requirements: []
141
- rubyforge_project:
142
- rubygems_version: 2.5.1
143
- signing_key:
177
+ rubyforge_project:
178
+ rubygems_version: 2.4.8
179
+ signing_key:
144
180
  specification_version: 4
145
- summary: EmailAddress checks on validates an acceptable set of email addresses.
181
+ summary: This gem provides a ruby language library for working with and validating email addresses. By default, it validates against conventional usage, the format preferred for user email addresses. It can be configured to validate against RFC “Standard” formats, common email service provider formats, and perform DNS validation.
146
182
  test_files:
183
+ - test/activerecord/test_ar.rb
184
+ - test/activerecord/user.rb
147
185
  - test/email_address/test_address.rb
148
186
  - test/email_address/test_config.rb
149
- - test/email_address/test_domain_matcher.rb
150
- - test/email_address/test_domain_parser.rb
151
187
  - test/email_address/test_exchanger.rb
152
188
  - test/email_address/test_host.rb
153
189
  - test/email_address/test_local.rb
154
- - test/email_address/test_matcher.rb
155
- - test/email_address/test_validator.rb
156
190
  - test/test_email_address.rb
157
191
  - test/test_helper.rb
@@ -1,98 +0,0 @@
1
- module EmailAddress
2
- ##############################################################################
3
- #
4
- # DEPRECATING... See EmailAddress::Matcher now
5
- #
6
- # DomainMatcher - Matches a domain to a set of patterns
7
- #
8
- # Match Patterns
9
- # hostname sub.domain.tld
10
- # domain domain.tld
11
- # registration domain
12
- # tld .tld, .domain.tld
13
- ##############################################################################
14
- class DomainMatcher
15
- attr_reader :host_name, :parts, :domain_name, :registration_name,
16
- :tld, :subdomains, :ip_address
17
-
18
- def self.matches?(domain, rule)
19
- DomainMatcher.new(domain, rule).matches?
20
- end
21
-
22
- def initialize(host_name, rule=nil)
23
- @host_name = host_name.downcase
24
- @host = EmailAddress::Host.new(@host_name)
25
- @rule = rule
26
- matches?
27
- end
28
-
29
- def matches?(rule=nil)
30
- rule ||= @rule
31
- case rule
32
- when String
33
- rule_matches?(rule)
34
- when Array
35
- list_matches?(rule)
36
- else
37
- false
38
- end
39
- end
40
-
41
- def rule_matches?(rule)
42
- rule.downcase!
43
- @host_name == rule || registration_name_matches?(rule) ||
44
- domain_matches?(rule) || tld_matches?(rule) || glob_matches?(rule)
45
- end
46
-
47
- def list_matches?(list)
48
- list.each {|rule| return true if rule_matches?(rule) }
49
- false
50
- end
51
-
52
- # Matches a rule as a glob match, with * and ? characters
53
- def glob_matches?(rule)
54
- File.fnmatch?(rule, @host_name)
55
- end
56
-
57
- # Does "sub.example.com" match "example" registration name
58
- def registration_name_matches?(rule)
59
- rule.match(/\A(\w+)\z/) && @host.registration_name == rule.downcase ? true : false
60
- end
61
-
62
- # Does "sub.example.com" match "example.com" domain name
63
- def domain_matches?(rule)
64
- rule.match(/\A[^\.]+\.[^\.]+\z/) && @host.domain_name == rule.downcase ? true : false
65
- end
66
-
67
- # Does "sub.example.com" match ".com" and ".example.com" top level names?
68
- def tld_matches?(rule)
69
- rule.match(/\A\..+\z/) &&
70
- ( @host_name[-rule.size, rule.size] == rule.downcase || ".#{@host_name}" == rule) \
71
- ? true : false
72
- end
73
-
74
- # Does an IP of mail exchanger for "sub.example.com" match "xxx.xx.xx.xx/xx"?
75
- def ip_cidr_matches?(rule)
76
- return false unless rule.match(/\A\d.+\/\d+\z/) && @host.exchanger
77
- @host.exchanger.in_cidr?(r) ? true : false
78
- end
79
-
80
- #def provider_matches?(rule)
81
- # if rule.downcase.match(/\A\:(\w+)\z/)
82
- # p ["PROVIDER", rule, @host_name, provider_by_domain ]
83
- # prov = provider_by_domain
84
- # prov && prov == $1 ? true : false
85
- # end
86
- #end
87
-
88
- ## Match only by
89
- #def provider_by_domain
90
- # base = EmailAddress::Config.providers[:default]
91
- # EmailAddress::Config.providers.first do |name, defn|
92
- # defn = base.merge(defn)
93
- # return name if matches?(defn[:domains])
94
- # end
95
- # nil
96
- #end
97
- end
98
- end
@@ -1,69 +0,0 @@
1
- require 'simpleidn'
2
-
3
- module EmailAddress
4
- ##############################################################################
5
- # Builds hash of host name/domain name parts
6
- # For: subdomain.example.co.uk
7
- # host_name: "subdomain.example.co.uk"
8
- # subdomains: "subdomain"
9
- # registration_name: "example"
10
- # domain_name: "example.co.uk"
11
- # tld: "co.uk"
12
- # ip_address: nil or "ipaddress" used in [ipaddress] syntax
13
- ##############################################################################
14
- class DomainParser
15
- attr_reader :host_name, :parts, :domain_name, :registration_name,
16
- :tld, :subdomains, :ip_address
17
-
18
- def self.parse(domain)
19
- EmailAddress::DomainParser.new(domain).parts
20
- end
21
-
22
- def initialize(host_name)
23
- @host_name = host_name.downcase
24
- parse_host(@host_name)
25
- end
26
-
27
- def parse_host(host)
28
- @host_name = host.strip.downcase.gsub(' ', '').gsub(/\(.*\)/, '')
29
- @subdomains = @registration_name = @domain_name = @tld = ''
30
- @ip_address = nil
31
-
32
- # IP Address: [127.0.0.1], [IPV6:.....]
33
- if @host_name =~ /\A\[(.+)\]\z/
34
- @ip_address = $1
35
-
36
- # Subdomain only (root@localhost)
37
- elsif @host_name.index('.').nil?
38
- @subdomains = @host_name
39
-
40
- # Split sub.domain from .tld: *.com, *.xx.cc, *.cc
41
- elsif @host_name =~ /\A(.+)\.(\w{3,10})\z/ ||
42
- @host_name =~ /\A(.+)\.(\w{1,3}\.\w\w)\z/ ||
43
- @host_name =~ /\A(.+)\.(\w\w)\z/
44
-
45
- @tld = $2;
46
- sld = $1 # Second level domain
47
- if sld =~ /\A(.+)\.(.+)\z/ # is subdomain? sub.example [.tld]
48
- @subdomains = $1
49
- @registration_name = $2
50
- else
51
- @registration_name = sld
52
- @domain_name = sld + '.' + @tld
53
- end
54
- @domain_name = @registration_name + '.' + @tld
55
- end
56
- @parts = {host_name:@host_name, subdomains:@subdomains, domain_name:@domain_name,
57
- registration_name:@registration_name, tld:@tld, ip_address:@ip_address}
58
- end
59
-
60
- # Returns provider based on configured domain name matches, or nil if unmatched
61
- # For best results, # consider the Exchanger.provider result as well.
62
- def provider
63
- EmailAddress::Config.providers.each do |name, defn|
64
- return name if EmailAddress::DomainMatcher.matches?(@host_name, defn[:domains])
65
- end
66
- nil
67
- end
68
- end
69
- end