email_address 0.1.3 → 0.1.4

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
  SHA1:
3
- metadata.gz: 57afc3d96aad109de1df3904de39a5abe068363f
4
- data.tar.gz: 968572e1c29c8c0f71b14a8e449da7314e83c3c6
3
+ metadata.gz: 86863c7db99499852dc1d4176ecef8a8a372124c
4
+ data.tar.gz: e646a1808a0ca57048be6bcdb945c3621cfd053c
5
5
  SHA512:
6
- metadata.gz: 0c0381813f1572a9071db541f353dc135b807359f1dc217d7f6e87096079c61074763697955f849dc6b1cf3d0b279744172a0d41a78c15408123431085921ed8
7
- data.tar.gz: ec0f98df2a8b9a177ff3514f752d49bef6f7160c751d75325de58e4429b74062a2205df1a477ac3ef5d37974bf5fe2744138511dbc1f91a64d930ba946cf9d95
6
+ metadata.gz: 51c31c52963534e41a74cb87ead583be88ddaa08e630fd3ebe8540acbf015d50d63418893ac84f540b39067db00ab37d0a0de17a20604a3ae6dd3dafe93c42cf
7
+ data.tar.gz: d356139bb7776f3dc82449f6b27240dd99ec7fe4ab704d2be0177bce9dc7b8a71924944b0340742eb050a85c4b1aa2b28786f1a13e882f48e818bfa906680472
data/README.md CHANGED
@@ -26,6 +26,41 @@ want to continue using with your current version.
26
26
 
27
27
  Requires Ruby 2.0 or later.
28
28
 
29
+ ## Quick Start
30
+
31
+ To quickly validate email addresses, use the valid? and error helpers.
32
+ `valid?` returns a boolean, and `error` returns nil if valid, otherwise
33
+ a basic error message.
34
+
35
+ EmailAddress.valid? "allen@google.com" #=> true
36
+ EmailAddress.error "allen@bad-d0main.com" #=> "Invalid Host/Domain Name"
37
+
38
+ `EmailAddress` deeply validates your email addresses. It checks:
39
+
40
+ * Host name format and DNS setup
41
+ * Mailbox format according to "conventional" form. This matches most used user
42
+ email accounts, but is a subset of the RFC specification.
43
+
44
+ It does not check:
45
+
46
+ * The mail server is configured to accept connections
47
+ * The mailbox is valid and accepts email.
48
+
49
+ By default, MX records are required in DNS. MX or "mail exchanger" records
50
+ tell where to deliver email for the domain. Many domains run their
51
+ website on one provider (ISP, Heroku, etc.), and email on a different
52
+ provider (such as Google Apps). Note that `example.com`, while
53
+ a valid domain name, does not have MX records.
54
+
55
+ EmailAddress.valid? "allen@example.com" #=> false
56
+ EmailAddress.valid? "allen@example.com", dns_lookup: :off #=> true
57
+
58
+ Most mail servers do not yet support Unicode mailboxes, so the default here is ASCII.
59
+
60
+ EmailAddress.error "Pelé@google.com" #=> "Invalid Recipient/Mailbox"
61
+ EmailAddress.valid? "Pelé@google.com", local_encoding: :unicode #=> true
62
+
63
+
29
64
  ## Background
30
65
 
31
66
  The email address specification is complex and often not what you want
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency "rake"
22
22
  spec.add_development_dependency "minitest", "~> 5.8.3"
23
23
  spec.add_development_dependency "bundler", "~> 1.3"
24
- spec.add_development_dependency "activerecord", "~> 5.0.1" if RUBY_PLATFORM != 'java'
24
+ spec.add_development_dependency "activerecord", "~> 5.1.3" if RUBY_PLATFORM != 'java'
25
25
  spec.add_development_dependency "activerecord", "~> 4.2.5" if RUBY_PLATFORM == 'java'
26
26
  spec.add_development_dependency "sqlite3" if RUBY_PLATFORM != 'java'
27
27
  spec.add_development_dependency "activerecord-jdbcsqlite3-adapter" if RUBY_PLATFORM == 'java'
@@ -144,7 +144,11 @@ module EmailAddress
144
144
 
145
145
  def host_name=(name)
146
146
  @host_name = name = name.strip.downcase.gsub(' ', '').gsub(/\(.*\)/, '')
147
- @dns_name = ::SimpleIDN.to_ascii(self.host_name)
147
+ if host_name =~ /[^[:ascii:]]/
148
+ @dns_name = ::SimpleIDN.to_ascii(self.host_name)
149
+ else
150
+ @dns_name = self.host_name
151
+ end
148
152
 
149
153
  # Subdomain only (root@localhost)
150
154
  if name.index('.').nil?
@@ -166,6 +170,9 @@ module EmailAddress
166
170
  end
167
171
  self.domain_name = self.registration_name + '.' + self.tld2
168
172
  self.find_provider
173
+ else # Bad format
174
+ self.subdomains = self.tld = self.tld2 = ""
175
+ self.domain_name = self.registration_name = name
169
176
  end
170
177
  end
171
178
 
@@ -356,9 +363,7 @@ module EmailAddress
356
363
 
357
364
  # Returns true if the host name is valid according to the current configuration
358
365
  def valid?(rule=@config[:dns_lookup]||:mx)
359
- if self.provider != :default # well known
360
- true
361
- elsif self.ip_address
366
+ if self.ip_address
362
367
  @config[:host_allow_ip] && self.valid_ip?
363
368
  elsif rule == :mx
364
369
  self.exchangers.mx_ips.size > 0
@@ -378,9 +383,9 @@ module EmailAddress
378
383
  if self.ip_address.nil?
379
384
  false
380
385
  elsif self.ip_address.include?(":")
381
- self.ip_address =~ Resolv::IPv6::Regex
386
+ self.ip_address =~ Resolv::IPv6::Regex ? true : false
382
387
  elsif self.ip_address.include?(".")
383
- self.ip_address =~ Resolv::IPv4::Regex
388
+ self.ip_address =~ Resolv::IPv4::Regex ? true : false
384
389
  end
385
390
  end
386
391
 
@@ -122,10 +122,10 @@ module EmailAddress
122
122
  if raw =~ /\A\"(.*)\"\z/ # Quoted
123
123
  raw = $1
124
124
  raw.gsub!(/\\(.)/, '\1') # Unescape
125
- elsif @config[:local_fix]
125
+ elsif @config[:local_fix] && @config[:local_format] != :standard
126
126
  raw.gsub!(' ','')
127
127
  raw.gsub!(',','.')
128
- raw.gsub!(/([^\p{L}\p{N}]{2,10})/) {|s| s[0] } # Stutter punctuation typo
128
+ #raw.gsub!(/([^\p{L}\p{N}]{2,10})/) {|s| s[0] } # Stutter punctuation typo
129
129
  end
130
130
  raw, comment = self.parse_comment(raw)
131
131
  mailbox, tag = self.parse_tag(raw)
@@ -314,7 +314,7 @@ module EmailAddress
314
314
 
315
315
  def valid_encoding?(enc=@config[:local_encoding]||:ascii)
316
316
  return false if enc == :ascii && self.unicode?
317
- return false if enc == :unicode && self.ascii?
317
+ #return false if enc == :unicode && self.ascii?
318
318
  true
319
319
  end
320
320
 
@@ -1,3 +1,3 @@
1
1
  module EmailAddress
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
@@ -92,4 +92,10 @@ class TestAddress < Minitest::Test
92
92
  assert true, EmailAddress.valid?("first_last@hotmail.com") # #8
93
93
  end
94
94
 
95
+ def test_issue9
96
+ assert ! EmailAddress.valid?('example.user@foo.')
97
+ assert ! EmailAddress.valid?('ogog@sss.c')
98
+ assert ! EmailAddress.valid?('example.user@foo.com/')
99
+ end
100
+
95
101
  end
@@ -101,4 +101,12 @@ class TestHost < MiniTest::Test
101
101
  assert EmailAddress.valid?('test@jiff.com', dns_lookup: :mx)
102
102
  assert ! EmailAddress.valid?('test@gmail.com', dns_lookup: :mx)
103
103
  end
104
+
105
+ def test_yahoo_bad_tld
106
+ assert ! EmailAddress.valid?('test@yahoo.badtld')
107
+ end
108
+
109
+ def test_bad_formats
110
+ #assert EmailAddress::Host.new('example.com:w').registration_name
111
+ end
104
112
  end
@@ -48,6 +48,7 @@ class TestLocal < MiniTest::Test
48
48
  def test_unicode
49
49
  assert ! EmailAddress::Local.new("üñîçøðé1", local_encoding: :ascii).standard?, "not üñîçøðé1"
50
50
  assert EmailAddress::Local.new("üñîçøðé2", local_encoding: :unicode).standard?, "üñîçøðé2"
51
+ assert EmailAddress::Local.new("test", local_encoding: :unicode).valid?, "unicode should include ascii"
51
52
  assert ! EmailAddress::Local.new("üñîçøðé3").valid?, "üñîçøðé3 valid"
52
53
  end
53
54
 
@@ -37,7 +37,7 @@ class TestEmailAddress < MiniTest::Test
37
37
  end
38
38
 
39
39
  def test_cases
40
- %w( miles.o'brien@yahoo.com first..last@gmail.com a-b.c_d+e@f.gx
40
+ %w( miles.o'brien@yahoo.com first.last@gmail.com a-b.c_d+e@f.gx
41
41
  ).each do |address|
42
42
  assert EmailAddress.valid?(address, dns_lookup: :off), "valid?(#{address})"
43
43
  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.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Allen Fair
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-10 00:00:00.000000000 Z
11
+ date: 2017-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 5.0.1
61
+ version: 5.1.3
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 5.0.1
68
+ version: 5.1.3
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: sqlite3
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -175,7 +175,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
175
175
  version: '0'
176
176
  requirements: []
177
177
  rubyforge_project:
178
- rubygems_version: 2.5.1
178
+ rubygems_version: 2.6.11
179
179
  signing_key:
180
180
  specification_version: 4
181
181
  summary: This gem provides a ruby language library for working with and validating