nexmo-saddle-client 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,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8d05ecb184f084c53bddcff6f9e784d70fc6a9dc
4
+ data.tar.gz: d9abbd1eb4a85de7a768aa79f325ab256b16e672
5
+ SHA512:
6
+ metadata.gz: 26e9c5be45709837503bfd863267fe0765ef13be8ebac50d50c246a34514b7c27a10b741ed2ee7f4c42958fc62911d5892b32ea5a41a2679555de139c22965d1
7
+ data.tar.gz: e0c883e85d485e31280c91a8ef0a4a3bc98eb933045c3b5e302ed1f6958c1f139d6d5ead2f42a6757972b9056fccf1b7f541277b43c0659d0db53da5a009f7d8
@@ -0,0 +1,18 @@
1
+ # Ignore the _creds.rb spec file
2
+ spec/_creds.rb
3
+ spec/_creds.stub.rb
4
+
5
+ # Ignore tempfiles
6
+ *.sw[op]
7
+ .DS_Store
8
+
9
+ # RVM
10
+ .rvmrc
11
+
12
+ # Gem stuff
13
+ Gemfile.lock
14
+ *.gem
15
+
16
+ # IDEs
17
+ .idea
18
+ .project
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ group :test do
6
+ gem 'rspec', '~> 2.14.1'
7
+ gem 'rspec-instafail', '~> 0.2'
8
+ gem 'pry'
9
+ end
@@ -0,0 +1,5 @@
1
+ # nexmo-client
2
+ ruby client for nexmo api built on saddle
3
+
4
+ ## License
5
+ nexmo-client is released under the [MIT License](http://www.opensource.org/licenses/MIT).
@@ -0,0 +1,54 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'saddle'
4
+
5
+ require 'nexmo-client/middleware/exception_raiser'
6
+ require 'nexmo-client/version'
7
+
8
+
9
+ module NEXMO
10
+
11
+ class Client < Saddle::Client
12
+ #extend NEXMO::Stub
13
+
14
+ def initialize args
15
+ args.each do |k,v|
16
+ instance_variable_set("@#{k}", v) unless v.nil?
17
+ end
18
+ end
19
+
20
+ def self.host
21
+ @host || 'api.nexmo.com'
22
+ end
23
+
24
+ def self.path_prefix
25
+ @path_prefix || nil
26
+ end
27
+
28
+ def self.use_ssl
29
+ true
30
+ end
31
+
32
+ def self.num_retries
33
+ @num_retries || 2
34
+ end
35
+
36
+ def self.timeout
37
+ # seconds
38
+ @timeout || 5
39
+ end
40
+
41
+ def self.request_style
42
+ @request_style || :json
43
+ end
44
+
45
+ def self.port
46
+ @port || 443
47
+ end
48
+
49
+ add_middleware({
50
+ :klass => Middleware::ExceptionRaiser,
51
+ })
52
+
53
+ end
54
+ end
@@ -0,0 +1,19 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'saddle/endpoint'
4
+ module NEXMO
5
+ module Endpoints
6
+
7
+ class Verify < Saddle::TraversalEndpoint
8
+
9
+ def verify_request(number, brand, params = {}, opts = {})
10
+ get("json", params.merge({:number => number, :brand => brand}), opts)
11
+ end
12
+
13
+ def check_request(request_id, code, params = {}, opts = {})
14
+ get("check/json", params.merge({:request_id => request_id, :code => code}), opts)
15
+ end
16
+
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,34 @@
1
+ # encoding: UTF-8
2
+
3
+ ##
4
+ # Exceptions for using the Nexmo client
5
+ # It is recommended that you handle these.
6
+ ##
7
+
8
+ module NEXMO
9
+
10
+ class GenericException < StandardError; end
11
+
12
+ class TimeoutError < GenericException; end
13
+
14
+ # Some problems might take care of themselves if you try again later. Others won't.
15
+ class TemporaryError < GenericException; end # fire warnings on these
16
+ class PermanentError < GenericException; end # fire errors on these
17
+
18
+ ## Error codes are based upon:
19
+ ## https://docs.nexmo.com/index.php/verify/search#verify_return_code
20
+
21
+ # 1
22
+ class SystemBusy < TemporaryError; end
23
+ # 2 - 4, 15 - 18
24
+ class BadRequest < PermanentError; end
25
+ # 5 - 7
26
+ class SystemError < TemporaryError; end
27
+ # 8
28
+ class AccessDenied < PermanentError; end
29
+ # 9
30
+ class InsufficientAppPermission < AccessDenied; end
31
+ # 101
32
+ class NotFound < PermanentError; end
33
+
34
+ end
@@ -0,0 +1,53 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'faraday'
4
+ require 'nexmo-client/exceptions'
5
+
6
+
7
+ module NEXMO
8
+ module Middleware
9
+
10
+ ## Raise beautiful exceptions
11
+ #
12
+ class ExceptionRaiser < Faraday::Middleware
13
+
14
+ def call(env)
15
+ begin
16
+ response = @app.call(env)
17
+ verify_return_code = response.body.try(:[], 'status').to_i
18
+
19
+ if verify_return_code != 0
20
+ # Error codes are based upon:
21
+ # https://docs.nexmo.com/index.php/verify/search#verify_return_code
22
+
23
+ # Translate our error code into an exception
24
+ exception =
25
+ case verify_return_code
26
+ when 1
27
+ NEXMO::SystemBusy
28
+ when 2..4, 15..18
29
+ NEXMO::BadRequest
30
+ when 5..7
31
+ NEXMO::SystemError
32
+ when 8
33
+ NEXMO::AccessDenied
34
+ when 9
35
+ NEXMO::InsufficientAppPermission
36
+ when 101
37
+ NEXMO::NotFound
38
+ else
39
+ NEXMO::GenericException
40
+ end
41
+
42
+ raise exception, response.body.try(:[], 'error_text')
43
+ end
44
+ response
45
+ rescue Saddle::TimeoutError => e
46
+ raise NEXMO::TimeoutError, e.response
47
+ end
48
+ end
49
+
50
+ end
51
+
52
+ end
53
+ end
@@ -0,0 +1,5 @@
1
+ # encoding: UTF-8
2
+
3
+ module NEXMO
4
+ VERSION = '0.0.1'
5
+ end
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/nexmo-client/version', __FILE__)
3
+
4
+ lib = File.expand_path('../lib', __FILE__)
5
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
6
+
7
+ Gem::Specification.new do |s|
8
+ s.name = 'nexmo-saddle-client'
9
+ s.version = ::NEXMO::VERSION
10
+ s.authors = ['Henry Cai']
11
+ s.email = ['minghangcai@gmail.com']
12
+ s.description = %q{Nexmo api ruby client}
13
+ s.summary = %q{
14
+ This is a NEXMO api client implemented on Saddle
15
+ }
16
+ s.homepage = 'https://github.com/hcai/nexmo-client.git'
17
+ s.license = 'MIT'
18
+
19
+ s.require_path = 'lib'
20
+ s.files = `git ls-files`.split($\)
21
+ s.executables = s.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
22
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
23
+
24
+ s.add_dependency 'saddle', '~> 0.0.49'
25
+ s.add_dependency 'simple_oauth', '~> 0.2.0'
26
+ end
@@ -0,0 +1,37 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'spec_helper'
4
+
5
+ ###
6
+ # NOTE: This spec will actually hit Nexmo's servers
7
+ ###
8
+
9
+ describe 'NEXMO::Endpoints::Verify' do
10
+ context "Test integration of verify endpoint" do
11
+
12
+ # Skip if the creds aren't setup
13
+ if defined?(API_KEY) && defined?(API_SECRET)
14
+
15
+ before :each do
16
+ @client = NEXMO::Client.create()
17
+ end
18
+
19
+ it 'sends verify request successfully' do
20
+ response = @client.verify.verify_request("16503530279", "Thinplify", {:api_key => API_KEY, :api_secret => API_SECRET})
21
+ response.should be_a(Hash)
22
+ response['request_id'].should_not be_nil
23
+ response['status'].should eq('0')
24
+ end
25
+
26
+ it 'should verify successfully' do
27
+ response = @client.verify.check_request("8bd16ef5d9664bc0bd86592157145efe", "0874", {:api_key => API_KEY, :api_secret => API_SECRET})
28
+ response.should be_a(Hash)
29
+ response['status'].should eq('0')
30
+ end
31
+
32
+ else
33
+ puts "You should put valid creds in _creds.rb"
34
+ end
35
+
36
+ end
37
+ end
@@ -0,0 +1,15 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'nexmo-client'
4
+
5
+ # Load credentials from ENV if possible, or load from _creds.rb
6
+ if ENV['API_KEY'] && ENV['API_SECRET']
7
+ API_KEY = ENV['API_KEY']
8
+ API_SECRET = ENV['API_SECRET']
9
+ else
10
+ begin
11
+ require '_creds'
12
+ rescue LoadError
13
+ puts "Using _creds.stub.rb, create a _creds.rb with actual credentials for a live test."
14
+ end
15
+ end
metadata ADDED
@@ -0,0 +1,85 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nexmo-saddle-client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Henry Cai
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-01-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: saddle
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.0.49
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.0.49
27
+ - !ruby/object:Gem::Dependency
28
+ name: simple_oauth
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.2.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.2.0
41
+ description: Nexmo api ruby client
42
+ email:
43
+ - minghangcai@gmail.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - ".gitignore"
49
+ - Gemfile
50
+ - README.md
51
+ - lib/nexmo-client.rb
52
+ - lib/nexmo-client/endpoints/verify.rb
53
+ - lib/nexmo-client/exceptions.rb
54
+ - lib/nexmo-client/middleware/exception_raiser.rb
55
+ - lib/nexmo-client/version.rb
56
+ - nexmo-client.gemspec
57
+ - spec/integration/verify_spec.rb
58
+ - spec/spec_helper.rb
59
+ homepage: https://github.com/hcai/nexmo-client.git
60
+ licenses:
61
+ - MIT
62
+ metadata: {}
63
+ post_install_message:
64
+ rdoc_options: []
65
+ require_paths:
66
+ - lib
67
+ required_ruby_version: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
72
+ required_rubygems_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ requirements: []
78
+ rubyforge_project:
79
+ rubygems_version: 2.2.2
80
+ signing_key:
81
+ specification_version: 4
82
+ summary: This is a NEXMO api client implemented on Saddle
83
+ test_files:
84
+ - spec/integration/verify_spec.rb
85
+ - spec/spec_helper.rb