opencnam 0.0.1

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,79 @@
1
+ require "net/http"
2
+
3
+ require "opencnam/version"
4
+ require "opencnam/util"
5
+ require "opencnam/errors/opencnam_error"
6
+ require "opencnam/errors/bad_request_error"
7
+ require "opencnam/errors/invalid_phone_number_error"
8
+ require "opencnam/errors/no_info_error"
9
+ require "opencnam/errors/running_lookup_error"
10
+ require "opencnam/errors/throttled_error"
11
+
12
+ module OpenCNAM
13
+ @@api_base = 'https://api.opencnam.com'
14
+ @@api_user = nil
15
+ @@api_key = nil
16
+
17
+ def self.api_user=(api_user)
18
+ @@api_user = api_user
19
+ end
20
+
21
+ def self.api_key=(api_key)
22
+ @@api_key = api_key
23
+ end
24
+
25
+ def self.lookup(number)
26
+ # Clean phone number
27
+ clean_number = OpenCNAM::Util.clean_phone_number(number)
28
+
29
+ # Build query
30
+ query = URI.encode_www_form(
31
+ :format => 'text',
32
+ :username => @@api_user,
33
+ :api_key => @@api_key,
34
+ )
35
+
36
+ # Send request
37
+ uri = URI.parse(@@api_base)
38
+ http = Net::HTTP.new(uri.host, uri.port)
39
+ http.use_ssl = true
40
+
41
+ res = http.request_get("/v1/phone/#{clean_number}?#{query}")
42
+
43
+ # 200 - OK
44
+ if res.kind_of?(Net::HTTPOK)
45
+ return {
46
+ :name => res.body,
47
+ :number => clean_number,
48
+ }
49
+ end
50
+
51
+ error_attrs = {
52
+ :http_status => res.code,
53
+ :message => res.message,
54
+ }
55
+
56
+ # 202 - Currently running a lookup for phone number
57
+ if res.kind_of?(Net::HTTPAccepted)
58
+ raise RunningLookupError.new(error_attrs)
59
+ end
60
+
61
+ # 403 - Forbidden, requests throttled
62
+ if res.kind_of?(Net::HTTPForbidden)
63
+ raise ThrottledError.new(error_attrs)
64
+ end
65
+
66
+ # 400 - Bad request
67
+ if res.kind_of?(Net::HTTPBadRequest)
68
+ raise BadRequestError.new(error_attrs)
69
+ end
70
+
71
+ # 404 - No caller ID name information
72
+ if res.kind_of?(Net::HTTPNotFound)
73
+ raise NoInfoError.new(error_attrs)
74
+ end
75
+
76
+ # Unkown response
77
+ raise OpenCNAMError.new(error_attrs)
78
+ end
79
+ end
@@ -0,0 +1,4 @@
1
+ module OpenCNAM
2
+ class BadRequestError < OpenCNAMError
3
+ end
4
+ end
@@ -0,0 +1,7 @@
1
+ module OpenCNAM
2
+ class InvalidPhoneNumberError < OpenCNAMError
3
+ def initialize(phone_number)
4
+ super(:message => "#{phone_number} could not be parsed as a valid US phone number")
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,4 @@
1
+ module OpenCNAM
2
+ class NoInfoError < OpenCNAMError
3
+ end
4
+ end
@@ -0,0 +1,18 @@
1
+ module OpenCNAM
2
+ class OpenCNAMError < StandardError
3
+ attr_reader :message
4
+ attr_reader :http_status
5
+ attr_reader :http_body
6
+
7
+ def initialize(opts = {})
8
+ @message = opts[:message] || nil
9
+ @http_status = opts[:http_status] || nil
10
+ @http_body = opts[:http_body] || nil
11
+ end
12
+
13
+ def to_s
14
+ status = @http_status.nil? ? "" : "(Status #{@http_status}) "
15
+ "#{status}#{@message}"
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,4 @@
1
+ module OpenCNAM
2
+ class RunningLookupError < OpenCNAMError
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module OpenCNAM
2
+ class ThrottledError < OpenCNAMError
3
+ end
4
+ end
@@ -0,0 +1,14 @@
1
+ module OpenCNAM
2
+ module Util
3
+ def self.clean_phone_number(number)
4
+ # Drop all characters except integers
5
+ clean_number = number.to_s
6
+ clean_number.tr!('^0-9', '')
7
+ clean_number = clean_number[-10..-1]
8
+
9
+ raise InvalidPhoneNumberError.new(number) if !clean_number || clean_number.length < 10
10
+
11
+ clean_number
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,3 @@
1
+ module OpenCNAM
2
+ VERSION = '0.0.1'
3
+ end
metadata ADDED
@@ -0,0 +1,102 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: opencnam
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Nysa Vann
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-06-21 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: fakeweb
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.3'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '1.3'
30
+ - !ruby/object:Gem::Dependency
31
+ name: minitest
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 3.1.0
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 3.1.0
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ description: OpenCNAM provides a simple, elegant, and RESTful API to get Caller ID
63
+ data.
64
+ email: nysa@nysavann.com
65
+ executables: []
66
+ extensions: []
67
+ extra_rdoc_files: []
68
+ files:
69
+ - lib/opencnam/errors/bad_request_error.rb
70
+ - lib/opencnam/errors/invalid_phone_number_error.rb
71
+ - lib/opencnam/errors/no_info_error.rb
72
+ - lib/opencnam/errors/opencnam_error.rb
73
+ - lib/opencnam/errors/running_lookup_error.rb
74
+ - lib/opencnam/errors/throttled_error.rb
75
+ - lib/opencnam/util.rb
76
+ - lib/opencnam/version.rb
77
+ - lib/opencnam.rb
78
+ homepage: http://github.com/nysa/ruby-opencnam
79
+ licenses: []
80
+ post_install_message:
81
+ rdoc_options: []
82
+ require_paths:
83
+ - lib
84
+ required_ruby_version: !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ required_rubygems_version: !ruby/object:Gem::Requirement
91
+ none: false
92
+ requirements:
93
+ - - ! '>='
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ requirements: []
97
+ rubyforge_project:
98
+ rubygems_version: 1.8.22
99
+ signing_key:
100
+ specification_version: 3
101
+ summary: Ruby bindings for the OpenCNAM API
102
+ test_files: []