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.
@@ -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
@@ -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
@@ -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 if email_parts == 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
- for i in 0...domains.length do
48
- if domain === domains[i]
49
- return domain
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 = domains[i]
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
- false
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
- for i in 0...max_offset do
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
- return (s1.length + s2.length) / 2 - lcs
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
- tld = ''
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 => tld,
107
+ :top_level_domain => domain_parts[1..-1].join('.'),
132
108
  :domain => domain,
133
- :address => parts.join('@')
109
+ :address => parts.first
134
110
  }
135
111
  end
136
112
  end
@@ -1,3 +1,3 @@
1
1
  class Mailcheck
2
- VERSION = "0.0.3"
2
+ VERSION = "1.0.0"
3
3
  end
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.3
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-02-19 00:00:00.000000000 Z
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: 1.8.25
65
+ rubygems_version: 2.0.3
69
66
  signing_key:
70
- specification_version: 3
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".