gman 0.0.2 → 0.0.3

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: 334405ee7b8d7e8277e8fa070f048725e8189f20
4
+ data.tar.gz: 579a6efbb98841f92c49775fd4902551407303d7
5
+ SHA512:
6
+ metadata.gz: fbb201ea872a5a481285ff39da33a7b7db6fb75064970e1931edd60f0a55bf30341b65c19534bd82b902b486fd30d8f9a8ef7370b6f28c51394e6a2ecb09b185
7
+ data.tar.gz: 51e3c96b16b6dec39ca0817ad050489bcb982985b74a34f9a7212f84897ccdd3e1b0190ad4e4c83576ad73c58dfdf29e718b1e5e535fad6330b885081863d1de
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Gman Gem
2
2
 
3
+ [![Build Status](https://travis-ci.org/benbalter/gman.png)](https://travis-ci.org/benbalter/gman) [![Gem Version](https://badge.fury.io/rb/gman.png)](http://badge.fury.io/rb/gman)
4
+
3
5
  A ruby gem to check if the owner of a given email address or website is working for THE MAN (a.k.a verifies government domains). It does this by leveraging the power of the [Public Suffix List](http://publicsuffix.org/), and the associated [Ruby Gem](https://github.com/weppos/publicsuffix-ruby).
4
6
 
5
7
  You could theoretically [use regex](https://gist.github.com/benbalter/6147066), but either you'll a bunch of false positives, or your regex will be insanely complicated. `gov.uk`, may be valid, for example, but `gov.fr` is not (it's `gouv.fr`, for what it's worth).
@@ -2,9 +2,9 @@ Gem::Specification.new do |s|
2
2
  s.name = "gman"
3
3
  s.summary = "Check if a given domain or email address belong to a governemnt entity"
4
4
  s.description = "A ruby gem to check if the owner of a given email address is working for THE MAN."
5
- s.version = "0.0.2"
5
+ s.version = "0.0.3"
6
6
  s.authors = ["Ben Balter"]
7
- s.date = "2013-08-30"
7
+ s.date = "2013-09-30"
8
8
  s.email = "ben.balter@github.com"
9
9
  s.homepage = "https://github.com/benbalter/gman"
10
10
  s.licenses = ["MIT"]
@@ -15,7 +15,7 @@ Gem::Specification.new do |s|
15
15
  "CONTRIBUTING.md",
16
16
  "LICENSE",
17
17
  "lib/gman.rb",
18
- "lib/domains.yml",
18
+ "lib/domains.txt",
19
19
  "script/build",
20
20
  "script/release",
21
21
  "gman.gemspec",
@@ -0,0 +1,196 @@
1
+ // US Federal
2
+ fed.us
3
+ gov
4
+ mil
5
+
6
+ // Non-US gov
7
+ gc.ca
8
+ gob.bo
9
+ gob.cl
10
+ gob.do
11
+ gob.ec
12
+ gob.es
13
+ gob.gt
14
+ gob.hn
15
+ gob.mx
16
+ gob.pa
17
+ gob.pe
18
+ gob.pk
19
+ gouv.bj
20
+ gouv.ci
21
+ gouv.fr
22
+ gouv.ht
23
+ gouv.km
24
+ gouv.ml
25
+ gouv.rw
26
+ gouv.sn
27
+ gov.ac
28
+ gov.ae
29
+ gov.af
30
+ gov.al
31
+ gov.as
32
+ gov.au
33
+ gov.az
34
+ gov.ba
35
+ gov.bb
36
+ gov.bf
37
+ gov.bh
38
+ gov.bm
39
+ gov.bo
40
+ gov.br
41
+ gov.bs
42
+ gov.bt
43
+ gov.by
44
+ gov.bz
45
+ gov.cd
46
+ gov.cl
47
+ gov.cm
48
+ gov.cn
49
+ gov.co
50
+ gov.cu
51
+ gov.cx
52
+ gov.dm
53
+ gov.do
54
+ gov.dz
55
+ gov.ec
56
+ gov.ee
57
+ gov.eg
58
+ gov.ge
59
+ gov.gg
60
+ gov.gh
61
+ gov.gi
62
+ gov.gn
63
+ gov.gr
64
+ gov.hk
65
+ gov.ie
66
+ gov.im
67
+ gov.in
68
+ gov.iq
69
+ gov.ir
70
+ gov.is
71
+ gov.it
72
+ gov.je
73
+ gov.jo
74
+ gov.kg
75
+ gov.ki
76
+ gov.km
77
+ gov.kn
78
+ gov.kp
79
+ gov.ky
80
+ gov.kz
81
+ gov.la
82
+ gov.lb
83
+ gov.lc
84
+ gov.lk
85
+ gov.lr
86
+ gov.lt
87
+ gov.lv
88
+ gov.ly
89
+ gov.ma
90
+ gov.me
91
+ gov.mg
92
+ gov.mk
93
+ gov.ml
94
+ gov.mn
95
+ gov.mo
96
+ gov.mr
97
+ gov.mu
98
+ gov.mv
99
+ gov.mw
100
+ gov.my
101
+ gov.ng
102
+ gov.nr
103
+ gov.ph
104
+ gov.pk
105
+ gov.pl
106
+ gov.pn
107
+ gov.pr
108
+ gov.ps
109
+ gov.pt
110
+ gov.py
111
+ gov.qa
112
+ gov.rs
113
+ gov.ru
114
+ gov.rw
115
+ gov.sa
116
+ gov.sb
117
+ gov.sc
118
+ gov.sd
119
+ gov.sg
120
+ gov.sh
121
+ gov.sl
122
+ gov.st
123
+ gov.sx
124
+ gov.sy
125
+ gov.tj
126
+ gov.tl
127
+ gov.tm
128
+ gov.tn
129
+ gov.to
130
+ gov.tt
131
+ gov.tw
132
+ gov.ua
133
+ gov.vc
134
+ gov.ve
135
+ gov.vn
136
+ gov.ws
137
+ gub.uy
138
+
139
+ //non-US mil
140
+ mil.ac
141
+ mil.ae
142
+ mil.al
143
+ mil.az
144
+ mil.ba
145
+ mil.bo
146
+ mil.br
147
+ mil.by
148
+ mil.cl
149
+ mil.cn
150
+ mil.co
151
+ mil.do
152
+ mil.ec
153
+ mil.eg
154
+ mil.ge
155
+ mil.gh
156
+ mil.gt
157
+ mil.hn
158
+ mil.id
159
+ mil.in
160
+ mil.iq
161
+ mil.jo
162
+ mil.kg
163
+ mil.km
164
+ mil.kr
165
+ mil.kz
166
+ mil.lv
167
+ mil.mg
168
+ mil.mv
169
+ mil.my
170
+ mil.no
171
+ mil.pe
172
+ mil.ph
173
+ mil.pl
174
+ mil.py
175
+ mil.qa
176
+ mil.ru
177
+ mil.rw
178
+ mil.sh
179
+ mil.st
180
+ mil.sy
181
+ mil.tj
182
+ mil.tm
183
+ mil.to
184
+ mil.tw
185
+ mil.tz
186
+ mil.uy
187
+ mil.vc
188
+ mil.ve
189
+
190
+ // US State, County, Local
191
+ boudercounty.org
192
+ ci.champaign.il.us
193
+ ci.longmont.co.us
194
+ sfgov.org
195
+ state.de.us
196
+ state.or.us
@@ -3,7 +3,7 @@ require 'yaml'
3
3
 
4
4
  module Gman
5
5
 
6
- VERSION='0.0.2'
6
+ VERSION='0.0.3'
7
7
 
8
8
  class << self
9
9
 
@@ -18,35 +18,22 @@ module Gman
18
18
  # Returns boolean true if a government domain
19
19
  def valid?(text)
20
20
  return false if text.nil?
21
- text.strip!
21
+ domain = get_domain text
22
22
 
23
- begin
24
- domain = get_domain(text)
25
- return false if domain.nil?
26
-
27
- match_government_domain?(domain)
28
-
29
- rescue PublicSuffix::DomainInvalid => di
30
- false
31
-
32
- rescue PublicSuffix::DomainNotAllowed => dna
33
- false
34
- end
23
+ # check using public suffix's standard logic
24
+ rule = list.find domain
25
+ return true if !rule.nil? && rule.allow?(domain)
35
26
 
27
+ # also allow for explicit matches to domain list
28
+ # but still make sure it's at least a valid domain
29
+ return false unless PublicSuffix.valid? domain
30
+ list.rules.any? { |rule| rule.value == domain }
36
31
  end
37
32
 
38
- # Checks the TLD (e.g., .gov) or TLD+SLD (e.g., .gov.uk)
39
- # Against list of known government domains
40
- def match_government_domain?(domain)
41
- domains.include?(domain.tld) || domains.include?("#{domain.tld}.#{domain.sld}")
42
- end
43
-
44
- # Parses YML domain list into an array
45
- # TODO: Cache this
46
- #
47
- # Returns an array of TLD and TLD+SLD known government domains
48
- def domains
49
- YAML.load_file File.expand_path("../domains.yml", __FILE__)
33
+ # returns an instance of our custom public suffix list
34
+ # list behaves like PublicSuffix::List but is limited to our whitelisted domains
35
+ def list
36
+ @list || PublicSuffix::List::parse( File.new(File.join(File.dirname(__FILE__), "domains.txt"), "r:utf-8"))
50
37
  end
51
38
 
52
39
  # Get the FQDN name from a URL or email address.
@@ -54,7 +41,7 @@ module Gman
54
41
  # Returns a string with the FQDN; nil if there's an error.
55
42
  # Source: https://github.com/leereilly/swot/blob/master/lib/swot.rb#L190
56
43
  def get_domain(text)
57
- PublicSuffix.parse text.downcase.match(domain_regex).captures.first
44
+ text.strip.downcase.match(domain_regex).captures.first
58
45
  rescue
59
46
  return nil
60
47
  end
@@ -1,15 +1,15 @@
1
1
  require 'helper'
2
2
 
3
- VALID = ["foo.gov", "http://foo.mil", "foo@bar.gc.ca", "foo.gov.au", "http://www.foo.gouv.fr"]
4
- INVALID = ["foo.bar.com", "bar@foo.biz", "http://www.foo.biz", "foo.uk", "gov"]
3
+ VALID = ["foo.gov", "http://foo.mil", "foo@bar.gc.ca", "foo.gov.au", "http://www.foo.gouv.fr", "foo@ci.champaign.il.us", "foo.bar.baz.gov.au"]
4
+ INVALID = ["foo.bar.com", "bar@foo.biz", "http://www.foo.biz", "foo.uk", "gov", "foo@k12.champaign.il.us"]
5
5
 
6
6
  class TestGman < Test::Unit::TestCase
7
7
  should "recognize government email addresses and domains" do
8
8
  VALID.each do |test|
9
- assert_equal Gman::is_government?(test), true
9
+ assert_equal true, Gman::valid?(test), "#{test} should be detected as a valid government domain"
10
10
  end
11
11
  INVALID.each do |test|
12
- assert_equal Gman::is_government?(test), false
12
+ assert_equal false, Gman::valid?(test), "#{test} should be detected as an invalid government domain"
13
13
  end
14
14
  end
15
15
  end
metadata CHANGED
@@ -1,30 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gman
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
5
- prerelease:
4
+ version: 0.0.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - Ben Balter
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-08-30 00:00:00.000000000 Z
11
+ date: 2013-09-30 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: public_suffix
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
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
29
26
  version: '0'
30
27
  description: A ruby gem to check if the owner of a given email address is working
@@ -39,7 +36,7 @@ files:
39
36
  - CONTRIBUTING.md
40
37
  - LICENSE
41
38
  - lib/gman.rb
42
- - lib/domains.yml
39
+ - lib/domains.txt
43
40
  - script/build
44
41
  - script/release
45
42
  - gman.gemspec
@@ -50,26 +47,25 @@ files:
50
47
  homepage: https://github.com/benbalter/gman
51
48
  licenses:
52
49
  - MIT
50
+ metadata: {}
53
51
  post_install_message:
54
52
  rdoc_options: []
55
53
  require_paths:
56
54
  - lib
57
55
  required_ruby_version: !ruby/object:Gem::Requirement
58
- none: false
59
56
  requirements:
60
- - - ! '>='
57
+ - - '>='
61
58
  - !ruby/object:Gem::Version
62
59
  version: '0'
63
60
  required_rubygems_version: !ruby/object:Gem::Requirement
64
- none: false
65
61
  requirements:
66
- - - ! '>='
62
+ - - '>='
67
63
  - !ruby/object:Gem::Version
68
64
  version: '0'
69
65
  requirements: []
70
66
  rubyforge_project:
71
- rubygems_version: 1.8.23
67
+ rubygems_version: 2.0.3
72
68
  signing_key:
73
- specification_version: 3
69
+ specification_version: 4
74
70
  summary: Check if a given domain or email address belong to a governemnt entity
75
71
  test_files: []
@@ -1,184 +0,0 @@
1
- ---
2
- - fed.us
3
- - gc.ca
4
- - gob.bo
5
- - gob.cl
6
- - gob.do
7
- - gob.ec
8
- - gob.es
9
- - gob.gt
10
- - gob.hn
11
- - gob.mx
12
- - gob.pa
13
- - gob.pe
14
- - gob.pk
15
- - gouv.bj
16
- - gouv.ci
17
- - gouv.fr
18
- - gouv.ht
19
- - gouv.km
20
- - gouv.ml
21
- - gouv.rw
22
- - gouv.sn
23
- - gov
24
- - gov.ac
25
- - gov.ae
26
- - gov.af
27
- - gov.al
28
- - gov.as
29
- - gov.au
30
- - gov.az
31
- - gov.ba
32
- - gov.bb
33
- - gov.bf
34
- - gov.bh
35
- - gov.bm
36
- - gov.bo
37
- - gov.br
38
- - gov.bs
39
- - gov.bt
40
- - gov.by
41
- - gov.bz
42
- - gov.cd
43
- - gov.cl
44
- - gov.cm
45
- - gov.cn
46
- - gov.co
47
- - gov.cu
48
- - gov.cx
49
- - gov.dm
50
- - gov.do
51
- - gov.dz
52
- - gov.ec
53
- - gov.ee
54
- - gov.eg
55
- - gov.ge
56
- - gov.gg
57
- - gov.gh
58
- - gov.gi
59
- - gov.gn
60
- - gov.gr
61
- - gov.hk
62
- - gov.ie
63
- - gov.im
64
- - gov.in
65
- - gov.iq
66
- - gov.ir
67
- - gov.is
68
- - gov.it
69
- - gov.je
70
- - gov.jo
71
- - gov.kg
72
- - gov.ki
73
- - gov.km
74
- - gov.kn
75
- - gov.kp
76
- - gov.ky
77
- - gov.kz
78
- - gov.la
79
- - gov.lb
80
- - gov.lc
81
- - gov.lk
82
- - gov.lr
83
- - gov.lt
84
- - gov.lv
85
- - gov.ly
86
- - gov.ma
87
- - gov.me
88
- - gov.mg
89
- - gov.mk
90
- - gov.ml
91
- - gov.mn
92
- - gov.mo
93
- - gov.mr
94
- - gov.mu
95
- - gov.mv
96
- - gov.mw
97
- - gov.my
98
- - gov.ng
99
- - gov.nr
100
- - gov.ph
101
- - gov.pk
102
- - gov.pl
103
- - gov.pn
104
- - gov.pr
105
- - gov.ps
106
- - gov.pt
107
- - gov.py
108
- - gov.qa
109
- - gov.rs
110
- - gov.ru
111
- - gov.rw
112
- - gov.sa
113
- - gov.sb
114
- - gov.sc
115
- - gov.sd
116
- - gov.sg
117
- - gov.sh
118
- - gov.sl
119
- - gov.st
120
- - gov.sx
121
- - gov.sy
122
- - gov.tj
123
- - gov.tl
124
- - gov.tm
125
- - gov.tn
126
- - gov.to
127
- - gov.tt
128
- - gov.tw
129
- - gov.ua
130
- - gov.vc
131
- - gov.ve
132
- - gov.vn
133
- - gov.ws
134
- - gub.uy
135
- - mil
136
- - mil.ac
137
- - mil.ae
138
- - mil.al
139
- - mil.az
140
- - mil.ba
141
- - mil.bo
142
- - mil.br
143
- - mil.by
144
- - mil.cl
145
- - mil.cn
146
- - mil.co
147
- - mil.do
148
- - mil.ec
149
- - mil.eg
150
- - mil.ge
151
- - mil.gh
152
- - mil.gt
153
- - mil.hn
154
- - mil.id
155
- - mil.in
156
- - mil.iq
157
- - mil.jo
158
- - mil.kg
159
- - mil.km
160
- - mil.kr
161
- - mil.kz
162
- - mil.lv
163
- - mil.mg
164
- - mil.mv
165
- - mil.my
166
- - mil.no
167
- - mil.pe
168
- - mil.ph
169
- - mil.pl
170
- - mil.py
171
- - mil.qa
172
- - mil.ru
173
- - mil.rw
174
- - mil.sh
175
- - mil.st
176
- - mil.sy
177
- - mil.tj
178
- - mil.tm
179
- - mil.to
180
- - mil.tw
181
- - mil.tz
182
- - mil.uy
183
- - mil.vc
184
- - mil.ve