mailcheck 0.0.3 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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".