samwise 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +36 -3
- data/lib/samwise/client.rb +3 -3
- data/lib/samwise/error.rb +9 -0
- data/lib/samwise/util.rb +47 -3
- data/lib/samwise/version.rb +1 -2
- data/lib/samwise.rb +1 -0
- data/spec/client_spec.rb +10 -10
- data/spec/util_spec.rb +72 -8
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 51829ef71b62ddf9e69b989b2c82a79a58cd3b44
|
4
|
+
data.tar.gz: 55b99795f3f3557c936afbad12aa0f6b8c45f196
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ded464ceac3d0780727bcebb709f5ede19fa79dd7c4aa399b50a233e51f4bed3ed0127026b785bfa7ed9148d8191f10e67de593789483de96beb1b472f4d62ef
|
7
|
+
data.tar.gz: 97951c2cd954eef771e5435111fc0717429b57dbbbb22d9ca9ba5b411d9f2d5e5282be961ece1e370e2a6d32d2811dc037b8485d96f533f3342ab237e59302ed
|
data/README.md
CHANGED
@@ -29,10 +29,10 @@ client = Samwise::Client.new(api_key: 'my key ...')
|
|
29
29
|
client = Samwise::Client.new
|
30
30
|
```
|
31
31
|
|
32
|
-
### Verify DUNS number
|
32
|
+
### Verify DUNS number is in SAM.gov
|
33
33
|
|
34
34
|
```ruby
|
35
|
-
client.
|
35
|
+
client.duns_is_in_sam?(duns: '080037478')
|
36
36
|
#=> true
|
37
37
|
```
|
38
38
|
|
@@ -68,7 +68,40 @@ client.get_duns_info(duns: '080037478')
|
|
68
68
|
}
|
69
69
|
```
|
70
70
|
|
71
|
-
|
71
|
+
### Validate the format of a DUNS number
|
72
|
+
|
73
|
+
This does not need an API key and makes no network calls.
|
74
|
+
|
75
|
+
```ruby
|
76
|
+
Samwise::Util.duns_is_properly_formatted?(duns: '88371771')
|
77
|
+
#=> true
|
78
|
+
|
79
|
+
Samwise::Util.duns_is_properly_formatted?(duns: '883717717')
|
80
|
+
#=> true
|
81
|
+
|
82
|
+
Samwise::Util.duns_is_properly_formatted?(duns: '0223841150000')
|
83
|
+
#=> true
|
84
|
+
|
85
|
+
Samwise::Util.duns_is_properly_formatted?(duns: '08-011-5718')
|
86
|
+
#=> true
|
87
|
+
|
88
|
+
Samwise::Util.duns_is_properly_formatted?(duns: 'abc1234567')
|
89
|
+
#=> false
|
90
|
+
|
91
|
+
Samwise::Util.duns_is_properly_formatted?(duns: '1234567891234567890')
|
92
|
+
#=> false
|
93
|
+
```
|
94
|
+
|
95
|
+
### Format a DUNS number
|
96
|
+
|
97
|
+
This removes any hyphens and appends `0`s where appropriate (does not need an API key and makes no network calls):
|
98
|
+
|
99
|
+
```ruby
|
100
|
+
Samwise::Util.format_duns(duns: '08-011-5718')
|
101
|
+
#=> "0801157180000"
|
102
|
+
```
|
103
|
+
|
104
|
+
`duns` can be an 8, 9, or 13 digit number (hyphens are removed):
|
72
105
|
|
73
106
|
- If it is 8 digits, `0` is prepended, and `0000` is added to the end.
|
74
107
|
- If it is 9 digits, `0000` is added to the end.
|
data/lib/samwise/client.rb
CHANGED
@@ -3,7 +3,7 @@ require 'json'
|
|
3
3
|
|
4
4
|
module Samwise
|
5
5
|
class Client
|
6
|
-
def initialize(api_key:
|
6
|
+
def initialize(api_key: nil)
|
7
7
|
@api_key = api_key || ENV['DATA_DOT_GOV_API_KEY']
|
8
8
|
end
|
9
9
|
|
@@ -12,14 +12,14 @@ module Samwise
|
|
12
12
|
JSON.parse(response.body)
|
13
13
|
end
|
14
14
|
|
15
|
-
def
|
15
|
+
def duns_is_in_sam?(duns: nil)
|
16
16
|
response = lookup_duns(duns: duns)
|
17
17
|
response.status == 200
|
18
18
|
end
|
19
19
|
|
20
20
|
private
|
21
21
|
|
22
|
-
def lookup_duns(duns:
|
22
|
+
def lookup_duns(duns: nil)
|
23
23
|
duns = Samwise::Util.format_duns(duns: duns)
|
24
24
|
response = Faraday.get(Samwise::Protocol.duns_url(duns: duns, api_key: @api_key))
|
25
25
|
end
|
data/lib/samwise/util.rb
CHANGED
@@ -2,14 +2,58 @@ require 'pry'
|
|
2
2
|
|
3
3
|
module Samwise
|
4
4
|
module Util
|
5
|
-
def self.
|
6
|
-
|
5
|
+
def self.duns_is_properly_formatted?(duns: nil)
|
6
|
+
duns.gsub!('-', '')
|
7
|
+
|
8
|
+
return true if duns_contains_forbidden_characters?(duns: duns)
|
9
|
+
|
10
|
+
return true if duns_is_eight_digits?(duns: duns)
|
11
|
+
return true if duns_is_nine_digits?(duns: duns)
|
12
|
+
return true if duns_is_thirteen_digits?(duns: duns)
|
13
|
+
|
14
|
+
return false
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.format_duns(duns: nil)
|
18
|
+
raise Samwise::Error::InvalidFormat unless duns_is_properly_formatted?(duns: duns)
|
19
|
+
|
20
|
+
duns.gsub!('-', '')
|
21
|
+
|
22
|
+
if duns_is_nine_digits?(duns: duns)
|
7
23
|
duns = "#{duns}0000"
|
8
|
-
elsif duns
|
24
|
+
elsif duns_is_eight_digits?(duns: duns)
|
9
25
|
duns = "0#{duns}0000"
|
10
26
|
end
|
11
27
|
|
12
28
|
duns
|
13
29
|
end
|
30
|
+
|
31
|
+
def self.duns_contains_forbidden_characters?(duns: nil)
|
32
|
+
duns.split('').each do |character|
|
33
|
+
return false if self.string_is_numeric?(string: character)
|
34
|
+
end
|
35
|
+
|
36
|
+
false
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.string_is_numeric?(string: nil)
|
40
|
+
string.split('').each do |character|
|
41
|
+
return false unless character.to_i.to_s == character
|
42
|
+
end
|
43
|
+
|
44
|
+
return true
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.duns_is_eight_digits?(duns: nil)
|
48
|
+
duns.length == 8
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.duns_is_nine_digits?(duns: nil)
|
52
|
+
duns.length == 9
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.duns_is_thirteen_digits?(duns: nil)
|
56
|
+
duns.length == 13
|
57
|
+
end
|
14
58
|
end
|
15
59
|
end
|
data/lib/samwise/version.rb
CHANGED
data/lib/samwise.rb
CHANGED
data/spec/client_spec.rb
CHANGED
@@ -8,31 +8,31 @@ describe Samwise::Client, vcr: { cassette_name: "Samwise::Client", record: :new_
|
|
8
8
|
let(:thirteen_duns) { '0223841150000' }
|
9
9
|
let(:non_existent_duns) { '0000001000000' }
|
10
10
|
|
11
|
-
context '#
|
12
|
-
it "should verify that a 9 digit DUNS number exists" do
|
11
|
+
context '#duns_is_in_sam?' do
|
12
|
+
it "should verify that a 9 digit DUNS number exists in sam.gov" do
|
13
13
|
client = Samwise::Client.new(api_key: api_key)
|
14
|
-
response = client.
|
14
|
+
response = client.duns_is_in_sam?(duns: nine_duns)
|
15
15
|
|
16
16
|
expect(response).to be(true)
|
17
17
|
end
|
18
18
|
|
19
|
-
it "should verify that an 8 digit DUNS number exists" do
|
19
|
+
it "should verify that an 8 digit DUNS number exists in sam.gov" do
|
20
20
|
client = Samwise::Client.new(api_key: api_key)
|
21
|
-
response = client.
|
21
|
+
response = client.duns_is_in_sam?(duns: eight_duns)
|
22
22
|
|
23
23
|
expect(response).to be(true)
|
24
24
|
end
|
25
25
|
|
26
|
-
it "should verify that a 13 digit DUNS number exists" do
|
26
|
+
it "should verify that a 13 digit DUNS number exists in sam.gov" do
|
27
27
|
client = Samwise::Client.new(api_key: api_key)
|
28
|
-
response = client.
|
28
|
+
response = client.duns_is_in_sam?(duns: thirteen_duns)
|
29
29
|
|
30
30
|
expect(response).to be(true)
|
31
31
|
end
|
32
32
|
|
33
|
-
it "should return false given a
|
33
|
+
it "should return false given a DUNS number that is not in sam.gov" do
|
34
34
|
client = Samwise::Client.new(api_key: api_key)
|
35
|
-
response = client.
|
35
|
+
response = client.duns_is_in_sam?(duns: non_existent_duns)
|
36
36
|
|
37
37
|
expect(response).to be(false)
|
38
38
|
end
|
@@ -60,7 +60,7 @@ describe Samwise::Client, vcr: { cassette_name: "Samwise::Client", record: :new_
|
|
60
60
|
expect(response).to be_a(Hash)
|
61
61
|
end
|
62
62
|
|
63
|
-
it "should return an error given a
|
63
|
+
it "should return an error given a DUNS number that is not in sam.gov" do
|
64
64
|
client = Samwise::Client.new(api_key: api_key)
|
65
65
|
response = client.get_duns_info(duns: non_existent_duns)
|
66
66
|
|
data/spec/util_spec.rb
CHANGED
@@ -2,18 +2,82 @@ require 'spec_helper'
|
|
2
2
|
require 'samwise'
|
3
3
|
|
4
4
|
describe Samwise::Util do
|
5
|
-
let(:eight_duns)
|
6
|
-
let(:nine_duns)
|
5
|
+
let(:eight_duns) { '88371771' }
|
6
|
+
let(:nine_duns) { '883717717' }
|
7
|
+
let(:thirteen_duns) { '0223841150000' }
|
8
|
+
let(:hyphen_duns) { '08-011-5718' }
|
9
|
+
let(:letters_duns) { 'abc12345678'}
|
10
|
+
let(:bad_dunses) do
|
11
|
+
[
|
12
|
+
'1234567890',
|
13
|
+
'12345678901',
|
14
|
+
'123456789011',
|
15
|
+
'1',
|
16
|
+
'',
|
17
|
+
'--',
|
18
|
+
'12345678901234567890'
|
19
|
+
]
|
20
|
+
end
|
21
|
+
|
22
|
+
context '#duns_is_properly_formatted?' do
|
23
|
+
it 'should return true when the DUNS is 13 digits (not counting hyphens)' do
|
24
|
+
is_formatted = Samwise::Util.duns_is_properly_formatted?(duns: thirteen_duns)
|
25
|
+
|
26
|
+
expect(is_formatted).to be(true)
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should return true when the DUNS is 9 digits (not counting hyphens)' do
|
30
|
+
is_formatted = Samwise::Util.duns_is_properly_formatted?(duns: nine_duns)
|
31
|
+
|
32
|
+
expect(is_formatted).to be(true)
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'should return true when the DUNS is 8 digits (not counting hyphens)' do
|
36
|
+
is_formatted = Samwise::Util.duns_is_properly_formatted?(duns: eight_duns)
|
37
|
+
|
38
|
+
expect(is_formatted).to be(true)
|
39
|
+
end
|
7
40
|
|
8
|
-
|
9
|
-
|
41
|
+
it 'should return false when the DUNS is not 8, 9, or 13 digits (not counting hyphens)' do
|
42
|
+
bad_dunses.each do |bad_duns|
|
43
|
+
is_formatted = Samwise::Util.duns_is_properly_formatted?(duns: bad_duns)
|
10
44
|
|
11
|
-
|
45
|
+
expect(is_formatted).to be(false)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'should return false when the DUNS contains letters' do
|
50
|
+
is_formatted = Samwise::Util.duns_is_properly_formatted?(duns: letters_duns)
|
51
|
+
|
52
|
+
expect(is_formatted).to be(false)
|
53
|
+
end
|
12
54
|
end
|
13
55
|
|
14
|
-
|
15
|
-
|
56
|
+
context '#format_duns' do
|
57
|
+
it 'should format an 8 digit DUNS into a 13 digit DUNS' do
|
58
|
+
formatted_duns = Samwise::Util.format_duns(duns: eight_duns)
|
59
|
+
|
60
|
+
expect(formatted_duns.length).to eq(13)
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'should format a 9 digit DUNS into a 13 digit DUNS' do
|
64
|
+
formatted_duns = Samwise::Util.format_duns(duns: nine_duns)
|
65
|
+
|
66
|
+
expect(formatted_duns.length).to eq(13)
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'should remove hyphens from a DUNS number' do
|
70
|
+
formatted_duns = Samwise::Util.format_duns(duns: hyphen_duns)
|
71
|
+
|
72
|
+
expect(formatted_duns).to eq('0801157180000')
|
73
|
+
end
|
16
74
|
|
17
|
-
|
75
|
+
it 'should raise a Samwise::Error::InvalidFormat error if the DUNS is invalid' do
|
76
|
+
bad_dunses.each do |bad_duns|
|
77
|
+
expect do
|
78
|
+
Samwise::Util.format_duns(duns: bad_duns)
|
79
|
+
end.to raise_error(Samwise::Error::InvalidFormat)
|
80
|
+
end
|
81
|
+
end
|
18
82
|
end
|
19
83
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: samwise
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alan deLevie
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-01-
|
11
|
+
date: 2016-01-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: codeclimate-test-reporter
|
@@ -155,6 +155,7 @@ files:
|
|
155
155
|
- Rakefile
|
156
156
|
- lib/samwise.rb
|
157
157
|
- lib/samwise/client.rb
|
158
|
+
- lib/samwise/error.rb
|
158
159
|
- lib/samwise/protocol.rb
|
159
160
|
- lib/samwise/util.rb
|
160
161
|
- lib/samwise/version.rb
|