mailcheck 0.0.3 → 1.0.0
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 +7 -0
- data/CHANGELOG.md +20 -0
- data/README.md +14 -0
- data/lib/mailcheck.rb +16 -40
- data/lib/mailcheck/version.rb +1 -1
- metadata +8 -11
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 21c3d128c13eda91b1f8bf305da706facb6969ad
|
4
|
+
data.tar.gz: cd9e1e287b16d7c0d7b7777dc3cb0d4a819a0116
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 19e733f90679eb1d10ddc72a2e5196de6378bc45d87ac624693dfa0d32a69b118712ad20280801275f709ff816baaba97d6fa64ddbde58ab64284f45dafb9508
|
7
|
+
data.tar.gz: 1d5f30c38f9173819a9f1feeeb2795ae5acbab7f4d2db47745c56b07ce8fba76c283693a28a34e8169ab05c4c4113e2d6af4f32e0ffe76020c39ed5188f627f8
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
### Oct 18, 2013 - v1.0.0
|
2
|
+
|
3
|
+
* Fixes by Alexander Shapiotko
|
4
|
+
* Fixed distance calculation.
|
5
|
+
* Re-written some unoptimal code
|
6
|
+
* Make code closer to style guide
|
7
|
+
|
8
|
+
* Added examples to docs
|
9
|
+
|
10
|
+
### Feb 19, 2013 - v0.0.3
|
11
|
+
|
12
|
+
* Actually fix homepage
|
13
|
+
|
14
|
+
### Feb 19, 2013 - v0.0.2
|
15
|
+
|
16
|
+
* Fix homepage
|
17
|
+
|
18
|
+
### Feb 19, 2013 - v0.0.1
|
19
|
+
|
20
|
+
* Initial version
|
data/README.md
CHANGED
@@ -34,6 +34,20 @@ Or install it yourself as:
|
|
34
34
|
# }
|
35
35
|
```
|
36
36
|
|
37
|
+
Returns false if no suggestion:
|
38
|
+
```ruby
|
39
|
+
> mailcheck.suggest("user@hotmail.com")
|
40
|
+
# => false
|
41
|
+
```
|
42
|
+
|
43
|
+
Pass in a custom list of domains and TLDs:
|
44
|
+
```ruby
|
45
|
+
mailcheck = Mailcheck.new(
|
46
|
+
:domains => ["gmail.com", "hotmail.com", "aol.com"],
|
47
|
+
:top_level_domains => ["com", "net", "org"]
|
48
|
+
)
|
49
|
+
```
|
50
|
+
|
37
51
|
## Contributing
|
38
52
|
|
39
53
|
1. Fork it
|
data/lib/mailcheck.rb
CHANGED
@@ -8,7 +8,7 @@ class Mailcheck
|
|
8
8
|
|
9
9
|
TOP_LEVEL_DOMAINS = ['co.uk', 'com', 'net', 'org', 'info', 'edu', 'gov', 'mil']
|
10
10
|
|
11
|
-
def initialize(opts={})
|
11
|
+
def initialize(opts = {})
|
12
12
|
@domains = opts[:domains] || DOMAINS
|
13
13
|
@top_level_domains = opts[:top_level_domains] || TOP_LEVEL_DOMAINS
|
14
14
|
end
|
@@ -16,7 +16,7 @@ class Mailcheck
|
|
16
16
|
def suggest(email)
|
17
17
|
email_parts = split_email(email.downcase)
|
18
18
|
|
19
|
-
return false
|
19
|
+
return false unless email_parts
|
20
20
|
|
21
21
|
closest_domain = find_closest_domain(email_parts[:domain], @domains)
|
22
22
|
|
@@ -43,22 +43,22 @@ class Mailcheck
|
|
43
43
|
|
44
44
|
def find_closest_domain(domain, domains)
|
45
45
|
min_dist = 99
|
46
|
+
closest_domain = nil
|
47
|
+
return nil if domains.nil? || domains.size == 0
|
46
48
|
|
47
|
-
|
48
|
-
if domain
|
49
|
-
|
50
|
-
end
|
51
|
-
dist = sift_3distance(domain, domains[i])
|
49
|
+
domains.each do |dmn|
|
50
|
+
return domain if domain == dmn
|
51
|
+
dist = sift_3distance(domain, dmn)
|
52
52
|
if dist < min_dist
|
53
53
|
min_dist = dist
|
54
|
-
closest_domain =
|
54
|
+
closest_domain = dmn
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
58
|
if min_dist <= THRESHOLD && closest_domain
|
59
59
|
closest_domain
|
60
60
|
else
|
61
|
-
|
61
|
+
nil
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
@@ -77,7 +77,7 @@ class Mailcheck
|
|
77
77
|
else
|
78
78
|
offset1 = 0
|
79
79
|
offset2 = 0
|
80
|
-
|
80
|
+
max_offset.times do |i|
|
81
81
|
if c + i < s1.length && s1[c + i] == s2[c]
|
82
82
|
offset1 = i
|
83
83
|
break
|
@@ -90,47 +90,23 @@ class Mailcheck
|
|
90
90
|
end
|
91
91
|
c += 1
|
92
92
|
end
|
93
|
-
|
93
|
+
(s1.length + s2.length) / 2.0 - lcs
|
94
94
|
end
|
95
95
|
|
96
96
|
def split_email(email)
|
97
|
-
|
98
97
|
parts = email.split('@')
|
99
98
|
|
100
|
-
if parts.length < 2
|
101
|
-
return false
|
102
|
-
end
|
103
|
-
|
104
|
-
for i in 0...parts.length do
|
105
|
-
if parts[i] === ''
|
106
|
-
return false
|
107
|
-
end
|
108
|
-
end
|
99
|
+
return false if parts.length < 2 || parts.any?{ |p| p == '' }
|
109
100
|
|
110
101
|
domain = parts.pop
|
111
102
|
domain_parts = domain.split('.')
|
112
|
-
|
113
|
-
|
114
|
-
if domain_parts.length == 0
|
115
|
-
# The address does not have a top-level domain
|
116
|
-
return false
|
117
|
-
elsif domain_parts.length == 1
|
118
|
-
# The address has only a top-level domain (valid under RFC)
|
119
|
-
tld = domain_parts[0]
|
120
|
-
else
|
121
|
-
# The address has a domain and a top-level domain
|
122
|
-
for i in 1...domain_parts.length do
|
123
|
-
tld << "#{domain_parts[i]}."
|
124
|
-
end
|
125
|
-
if domain_parts.length >= 2
|
126
|
-
tld = tld[0, tld.length - 1]
|
127
|
-
end
|
128
|
-
end
|
103
|
+
|
104
|
+
return false if domain_parts.length == 0
|
129
105
|
|
130
106
|
{
|
131
|
-
:top_level_domain =>
|
107
|
+
:top_level_domain => domain_parts[1..-1].join('.'),
|
132
108
|
:domain => domain,
|
133
|
-
:address => parts.
|
109
|
+
:address => parts.first
|
134
110
|
}
|
135
111
|
end
|
136
112
|
end
|
data/lib/mailcheck/version.rb
CHANGED
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mailcheck
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
5
|
-
prerelease:
|
4
|
+
version: 1.0.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Scott Becker
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-10-18 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rspec
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -36,6 +33,7 @@ extensions: []
|
|
36
33
|
extra_rdoc_files: []
|
37
34
|
files:
|
38
35
|
- .gitignore
|
36
|
+
- CHANGELOG.md
|
39
37
|
- Gemfile
|
40
38
|
- LICENSE
|
41
39
|
- README.md
|
@@ -47,27 +45,26 @@ files:
|
|
47
45
|
- spec/spec_helper.rb
|
48
46
|
homepage: https://github.com/sbecker/mailcheck-ruby
|
49
47
|
licenses: []
|
48
|
+
metadata: {}
|
50
49
|
post_install_message:
|
51
50
|
rdoc_options: []
|
52
51
|
require_paths:
|
53
52
|
- lib
|
54
53
|
required_ruby_version: !ruby/object:Gem::Requirement
|
55
|
-
none: false
|
56
54
|
requirements:
|
57
|
-
- -
|
55
|
+
- - '>='
|
58
56
|
- !ruby/object:Gem::Version
|
59
57
|
version: '0'
|
60
58
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
61
|
-
none: false
|
62
59
|
requirements:
|
63
|
-
- -
|
60
|
+
- - '>='
|
64
61
|
- !ruby/object:Gem::Version
|
65
62
|
version: '0'
|
66
63
|
requirements: []
|
67
64
|
rubyforge_project:
|
68
|
-
rubygems_version:
|
65
|
+
rubygems_version: 2.0.3
|
69
66
|
signing_key:
|
70
|
-
specification_version:
|
67
|
+
specification_version: 4
|
71
68
|
summary: When your user types in "user@hotnail.con", Mailcheck will suggest "user@hotmail.com".
|
72
69
|
Mailcheck will offer up suggestions for top level domains too, and suggest ".com"
|
73
70
|
when a user types in "user@hotmail.cmo".
|