opencnam 0.0.1

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