email_address 0.1.2 → 0.1.3

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
  SHA1:
3
- metadata.gz: b6a59891931ddfd551f8ead37a376795d22e70eb
4
- data.tar.gz: 8b71384418e8b1a4eb505faa5e95e021f0b30b7d
3
+ metadata.gz: 57afc3d96aad109de1df3904de39a5abe068363f
4
+ data.tar.gz: 968572e1c29c8c0f71b14a8e449da7314e83c3c6
5
5
  SHA512:
6
- metadata.gz: 62af3189a51354059a4d05e03c294e12a3e76839bb4cafd0697231fae638cbe5959324034cbdeea4d83f8a10303e6f7e6bad4c7aa0d2bd90bd7ef3bbafc0c930
7
- data.tar.gz: 34d7af8021c044f4cc4e1e00c4d2aa0e0066881178f7300c6322ccad52dd7787448b0929efb1148cfc582e6b073d9ae318fe515937bab9085a94e6ddfa98ab3b
6
+ metadata.gz: 0c0381813f1572a9071db541f353dc135b807359f1dc217d7f6e87096079c61074763697955f849dc6b1cf3d0b279744172a0d41a78c15408123431085921ed8
7
+ data.tar.gz: ec0f98df2a8b9a177ff3514f752d49bef6f7160c751d75325de58e4429b74062a2205df1a477ac3ef5d37974bf5fe2744138511dbc1f91a64d930ba946cf9d95
@@ -29,7 +29,7 @@ module EmailAddress
29
29
  end
30
30
  @host = EmailAddress::Host.new(host, config)
31
31
  @config = @host.config
32
- @local = EmailAddress::Local.new(local, @config)
32
+ @local = EmailAddress::Local.new(local, @config, @host)
33
33
  end
34
34
 
35
35
  ############################################################################
@@ -119,13 +119,14 @@ module EmailAddress
119
119
  },
120
120
  google: {
121
121
  host_match: %w(gmail.com googlemail.com),
122
- exchanger_match: %w(google.com),
122
+ exchanger_match: %w(google.com googlemail.com),
123
123
  local_size: 5..64,
124
+ local_private_size: 1..64, # When hostname not in host_match (private label)
124
125
  mailbox_canonical: ->(m) {m.gsub('.','')},
125
126
  },
126
127
  msn: {
127
128
  host_match: %w(msn. hotmail. outlook. live.),
128
- mailbox_validator: ->(m,t) { m =~ /\A[a-z0-9][\.\-a-z0-9]{5,29}\z/i},
129
+ mailbox_validator: ->(m,t) { m =~ /\A[a-z][\-\w]*(?:\.[\-\w]+)*\z/i},
129
130
  },
130
131
  yahoo: {
131
132
  host_match: %w(yahoo. ymail. rocketmail.),
@@ -169,6 +169,14 @@ module EmailAddress
169
169
  end
170
170
  end
171
171
 
172
+ # True if host is hosted at the provider, not a public provider host name
173
+ def hosted_service?
174
+ return false unless registration_name
175
+ find_provider
176
+ return false unless config[:host_match]
177
+ ! matches?(config[:host_match])
178
+ end
179
+
172
180
  def find_provider # :nodoc:
173
181
  return self.provider if self.provider
174
182
 
@@ -98,9 +98,10 @@ module EmailAddress
98
98
 
99
99
  REDACTED_REGEX = /\A \{ [0-9a-f]{40} \} \z/x # {sha1}
100
100
 
101
- def initialize(local, config={})
101
+ def initialize(local, config={}, host=nil)
102
102
  self.config = config.empty? ? EmailAddress::Config.all_settings : config
103
103
  self.local = local
104
+ @host = host
104
105
  end
105
106
 
106
107
  def local=(raw)
@@ -299,7 +300,13 @@ module EmailAddress
299
300
  end
300
301
 
301
302
  def valid_size?
302
- return false if @config[:local_size] && !@config[:local_size].include?(self.local.size)
303
+ if @host && @host.hosted_service?
304
+ return false if @config[:local_private_size] &&
305
+ !@config[:local_private_size].include?(self.local.size)
306
+ else
307
+ return false if @config[:local_size] &&
308
+ !@config[:local_size].include?(self.local.size)
309
+ end
303
310
  return false if @config[:mailbox_size] && !@config[:mailbox_size].include?(self.mailbox.size)
304
311
  return false if self.local.size > STANDARD_MAX_SIZE
305
312
  true
@@ -1,3 +1,3 @@
1
1
  module EmailAddress
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
@@ -85,4 +85,11 @@ class TestAddress < Minitest::Test
85
85
  assert "aasdf-34-.z@example.com".match(EmailAddress::Address::RELAXED_REGEX)
86
86
  end
87
87
 
88
+ # Quick Regression tests for addresses that should have been valid (but fixed)
89
+ def test_issues
90
+ assert true, EmailAddress.valid?('test@jiff.com', dns_lookup: :mx) # #7
91
+ assert true, EmailAddress.valid?("w.-asdf-_@hotmail.com") # #8
92
+ assert true, EmailAddress.valid?("first_last@hotmail.com") # #8
93
+ end
94
+
88
95
  end
@@ -10,9 +10,9 @@ class TestHost < MiniTest::Test
10
10
  assert_equal "example", a.registration_name
11
11
  assert_equal "com", a.tld
12
12
  assert_equal "ex*****", a.munge
13
- assert_equal nil, a.subdomains
13
+ assert_nil a.subdomains
14
14
  end
15
-
15
+
16
16
  def test_dns_enabled
17
17
  a = EmailAddress::Host.new("example.com")
18
18
  assert_instance_of TrueClass, a.dns_enabled?
@@ -94,6 +94,11 @@ class TestHost < MiniTest::Test
94
94
  assert "xn--5ca.com".match EmailAddress::Host::CANONICAL_HOST_REGEX
95
95
  assert "[127.0.0.1]".match EmailAddress::Host::STANDARD_HOST_REGEX
96
96
  assert "[IPv6:2001:dead::1]".match EmailAddress::Host::STANDARD_HOST_REGEX
97
- assert_equal nil, "[256.0.0.1]".match(EmailAddress::Host::STANDARD_HOST_REGEX)
97
+ assert_nil "[256.0.0.1]".match(EmailAddress::Host::STANDARD_HOST_REGEX)
98
+ end
99
+
100
+ def test_hosted_service
101
+ assert EmailAddress.valid?('test@jiff.com', dns_lookup: :mx)
102
+ assert ! EmailAddress.valid?('test@gmail.com', dns_lookup: :mx)
98
103
  end
99
104
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: email_address
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Allen Fair
@@ -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.6.8
178
+ rubygems_version: 2.5.1
179
179
  signing_key:
180
180
  specification_version: 4
181
181
  summary: This gem provides a ruby language library for working with and validating