NeverBounce 0.1.0
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.
- checksums.yaml +7 -0
- data/NeverBounce.rb +107 -0
- data/NeverBounce/Errors.rb +15 -0
- data/NeverBounce/Single.rb +53 -0
- metadata +89 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 750d0e93775760d313217a7b614a3c8b4ce8f240
|
4
|
+
data.tar.gz: bdaa1506374b3943afb32656f23dceebf100bace
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 87b28a0bbe4af34d05be84a8d3709e13c6d566bcead7f7fd146f49c69fd4b0ff3f7fbe89bdfd131ff1491ecf82707fabe4595c4a325c55bcb939e381e1f7713f
|
7
|
+
data.tar.gz: e74d3be74eb2bdc15b5d0879b3bf84b00716c0ba699c9f19e5c3b537486ab2fb99fd8353fc6f19a5e1628bb7fc4357307ad7c41707bc52da0e76ddec106a898e
|
data/NeverBounce.rb
ADDED
@@ -0,0 +1,107 @@
|
|
1
|
+
require 'HTTParty'
|
2
|
+
require 'json';
|
3
|
+
|
4
|
+
require './NeverBounce/Errors'
|
5
|
+
require './NeverBounce/Single'
|
6
|
+
|
7
|
+
module NeverBounce
|
8
|
+
|
9
|
+
VERSION = "0.1.0"
|
10
|
+
|
11
|
+
class API
|
12
|
+
include HTTParty
|
13
|
+
attr_accessor :host, :path, :apikey, :apiSecret, :accessToken, :options
|
14
|
+
base_uri 'https://api.neverbounce.com'
|
15
|
+
# base_uri 'http://localhost:8000'
|
16
|
+
|
17
|
+
def initialize(apiKey, apiSecret)
|
18
|
+
@apiKey = apiKey;
|
19
|
+
@apiSecret = apiSecret;
|
20
|
+
@accessToken = nil;
|
21
|
+
@options = {:headers => {
|
22
|
+
"Content-Type" => "application/x-www-form-urlencoded",
|
23
|
+
"User-Agent" => "NeverBounce-Ruby/" + VERSION}
|
24
|
+
}
|
25
|
+
|
26
|
+
raise AuthError, "You must provide a NeverBounce API key" unless @apiKey
|
27
|
+
raise AuthError, "You must provide a NeverBounce API secret key" unless @apiSecret
|
28
|
+
end
|
29
|
+
|
30
|
+
# Rescuable json parser
|
31
|
+
parser(
|
32
|
+
proc do |body, format|
|
33
|
+
begin
|
34
|
+
JSON.parse(body)
|
35
|
+
rescue JSON::ParserError => e
|
36
|
+
raise ResponseError, "The response from NeverBounce was unable " \
|
37
|
+
"to be parsed as json. Try the request " \
|
38
|
+
"again, if this error persists " \
|
39
|
+
"let us know at support@neverbounce.com." \
|
40
|
+
"\n\n(Internal error)"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
)
|
44
|
+
|
45
|
+
# Call api endpoint
|
46
|
+
def call(endpoint, body)
|
47
|
+
begin
|
48
|
+
opts = body.merge({:access_token => getAccessToken})
|
49
|
+
request(endpoint, {:body => opts})
|
50
|
+
# If access token is expired we'll retry the request
|
51
|
+
rescue AccessTokenExpired
|
52
|
+
@accessToken = nil
|
53
|
+
opts = body.merge({:access_token => getAccessToken})
|
54
|
+
request(endpoint, {:body => opts})
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# Makes the actual api request
|
59
|
+
def request(endpoint, params)
|
60
|
+
opts = options.merge(params)
|
61
|
+
response = self.class.post(endpoint, opts)
|
62
|
+
|
63
|
+
# Handle non successful requests
|
64
|
+
if response['success'] === false
|
65
|
+
if response['msg'] === 'Authentication failed'
|
66
|
+
raise AccessTokenExpired
|
67
|
+
end
|
68
|
+
|
69
|
+
raise RequestError, "We were unable to complete your request. " \
|
70
|
+
"The following information was supplied: " \
|
71
|
+
"#{response['msg']} " \
|
72
|
+
"\n\n(Request error)"
|
73
|
+
end
|
74
|
+
response
|
75
|
+
end
|
76
|
+
|
77
|
+
# Lets get the access token
|
78
|
+
# If we don't have one available
|
79
|
+
# already we'll request a new one
|
80
|
+
def getAccessToken
|
81
|
+
# Get existing access token if available
|
82
|
+
if @accessToken != nil
|
83
|
+
return @accessToken
|
84
|
+
end
|
85
|
+
|
86
|
+
# Perform request if no existing access token
|
87
|
+
response = request('/v3/access_token',
|
88
|
+
:body => {:grant_type => 'client_credentials', :scope => 'basic user'},
|
89
|
+
:basic_auth => {:username => @apiKey, :password => @apiSecret}
|
90
|
+
)
|
91
|
+
|
92
|
+
if response['error'] != nil
|
93
|
+
raise AuthError, "We were unable to complete your request. " \
|
94
|
+
"The following information was supplied: " \
|
95
|
+
"#{response['error_description']}" \
|
96
|
+
"\n\n(Request error [#{response['error']}])"
|
97
|
+
end
|
98
|
+
|
99
|
+
@accessToken = response['access_token']
|
100
|
+
end
|
101
|
+
|
102
|
+
# Initializes the single method
|
103
|
+
def single
|
104
|
+
Single.new(self)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module NeverBounce
|
2
|
+
class Single
|
3
|
+
attr_accessor :master
|
4
|
+
|
5
|
+
def initialize(master)
|
6
|
+
@master = master
|
7
|
+
end
|
8
|
+
|
9
|
+
# Makes verification request
|
10
|
+
# Returns VerifiedEmail instance
|
11
|
+
def verify(email)
|
12
|
+
VerifiedEmail.new(@master.call('/v3/single', {:email => email}))
|
13
|
+
end
|
14
|
+
end
|
15
|
+
class VerifiedEmail
|
16
|
+
|
17
|
+
def initialize(response)
|
18
|
+
@response = response
|
19
|
+
@textCodes = ['valid','invalid','disposable','catchall','unknown']
|
20
|
+
end
|
21
|
+
|
22
|
+
# Returns numeric result code
|
23
|
+
def getResultCode
|
24
|
+
@response['result']
|
25
|
+
end
|
26
|
+
|
27
|
+
# Returns textual result code
|
28
|
+
def getResultTextCode
|
29
|
+
@textCodes[@response['result']]
|
30
|
+
end
|
31
|
+
|
32
|
+
# Returns true if result is in the specified codes
|
33
|
+
# Accepts either array of result codes or single result code
|
34
|
+
def is(codes)
|
35
|
+
if codes.kind_of?(Array)
|
36
|
+
codes.include?(@response['result'])
|
37
|
+
else
|
38
|
+
codes === @response['result']
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# Returns true if result is NOT in the specified codes
|
43
|
+
# Accepts either array of result codes or single result code
|
44
|
+
def not(codes)
|
45
|
+
if codes.kind_of?(Array)
|
46
|
+
!codes.include?(@response['result'])
|
47
|
+
else
|
48
|
+
codes != @response['result']
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
metadata
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: NeverBounce
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mike Mollick
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-02-22 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: httparty
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.13.7
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.13.7
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 3.4.0
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 3.4.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: 'This offers '
|
56
|
+
email:
|
57
|
+
- mike@neverbounce.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- ./NeverBounce.rb
|
63
|
+
- ./NeverBounce/Errors.rb
|
64
|
+
- ./NeverBounce/Single.rb
|
65
|
+
homepage: https://neverbounce.com
|
66
|
+
licenses:
|
67
|
+
- MIT
|
68
|
+
metadata: {}
|
69
|
+
post_install_message:
|
70
|
+
rdoc_options: []
|
71
|
+
require_paths:
|
72
|
+
- lib
|
73
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 1.9.3
|
78
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
requirements: []
|
84
|
+
rubyforge_project:
|
85
|
+
rubygems_version: 2.0.14
|
86
|
+
signing_key:
|
87
|
+
specification_version: 4
|
88
|
+
summary: The official NeverBounce API library for Ruby
|
89
|
+
test_files: []
|