sinch-ruby 0.1.3
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/lib/sinch/bogus_gateway.rb +37 -0
- data/lib/sinch/builder/request/base.rb +19 -0
- data/lib/sinch/builder/request/report_verification.rb +19 -0
- data/lib/sinch/builder/request/verification.rb +26 -0
- data/lib/sinch/gateway.rb +41 -0
- data/lib/sinch/request/base.rb +61 -0
- data/lib/sinch/request/report_verification.rb +20 -0
- data/lib/sinch/request/verification.rb +20 -0
- data/lib/sinch/response/base.rb +17 -0
- data/lib/sinch/response/report_verification.rb +9 -0
- data/lib/sinch/response/verification.rb +15 -0
- data/lib/sinch.rb +21 -0
- metadata +155 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 59012bffb5dff58ee281598f4dce079cca6988ba
|
4
|
+
data.tar.gz: ccd9b315f3a84929de3dd9168b4d064d1d04906e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d76e4f8e789b077db67ecbaa1aac969b692402532d26c121798fb3bcc00cfbb06e6215725861ed50c51795c6cf8840d674aa71fc95891ec181061d3b97aeaef2
|
7
|
+
data.tar.gz: fcaa5e1bb3f157d7cc852dbefa6633701ec0963aa4bdf748be7acfb16160d0a41e2ee5b92d574d2d2121acc7dae760690c925cedbee07b8335cc2278315f90cc
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Sinch
|
2
|
+
# Bogus Gateway for Sinch
|
3
|
+
class BogusGateway
|
4
|
+
# Stub the Response
|
5
|
+
Response = Struct.new(:code, :success?, :json)
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def request(endpoint, _params = {})
|
9
|
+
new.send(endpoint)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def verification
|
14
|
+
Response.new(
|
15
|
+
200,
|
16
|
+
true,
|
17
|
+
'request_id' => '323208e2-5e06-4f89-9109-febe2422e715',
|
18
|
+
'sms' => {
|
19
|
+
'template' => 'Your verification code is code',
|
20
|
+
'interceptionTimeout' => 120
|
21
|
+
},
|
22
|
+
'method' => 'sms'
|
23
|
+
)
|
24
|
+
end
|
25
|
+
|
26
|
+
def report_verification
|
27
|
+
# response = Struct.new(:code, :success?, :body)
|
28
|
+
Response.new(
|
29
|
+
200,
|
30
|
+
true,
|
31
|
+
'request_id' => '323208e2-5e06-4f89-9109-febe2422e715',
|
32
|
+
'method' => 'sms',
|
33
|
+
'status' => 'SUCCESSFUL'
|
34
|
+
)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Sinch
|
2
|
+
module Builder
|
3
|
+
module Request
|
4
|
+
# Base Builder for Sinch API request
|
5
|
+
class Base
|
6
|
+
attr_reader :params
|
7
|
+
|
8
|
+
def initialize(params)
|
9
|
+
@params = params
|
10
|
+
end
|
11
|
+
|
12
|
+
def build
|
13
|
+
raise NotImplementedError,
|
14
|
+
"#{self.class.name} must implement a `build` method"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require_relative './base'
|
2
|
+
|
3
|
+
module Sinch
|
4
|
+
module Builder
|
5
|
+
module Request
|
6
|
+
# ReportVerification Request Builder
|
7
|
+
class ReportVerification < Base
|
8
|
+
def build
|
9
|
+
{
|
10
|
+
method: 'sms',
|
11
|
+
sms: {
|
12
|
+
code: params[:code]
|
13
|
+
}
|
14
|
+
}
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require_relative './base'
|
2
|
+
|
3
|
+
module Sinch
|
4
|
+
module Builder
|
5
|
+
module Request
|
6
|
+
# Verification Request Builder
|
7
|
+
class Verification < Base
|
8
|
+
def build
|
9
|
+
{
|
10
|
+
identity: {
|
11
|
+
type: 'number',
|
12
|
+
endpoint: phone_number
|
13
|
+
},
|
14
|
+
method: 'sms'
|
15
|
+
}
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def phone_number
|
21
|
+
params[:phone_number]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
|
3
|
+
module Sinch
|
4
|
+
# Sinch Api Gateway
|
5
|
+
class Gateway
|
6
|
+
class << self
|
7
|
+
def request(endpoint, params)
|
8
|
+
request =
|
9
|
+
"Sinch::Request::#{endpoint.to_s.classify}".constantize.new params
|
10
|
+
response = "Sinch::Response::#{endpoint.to_s.classify}".constantize.new
|
11
|
+
new(request, response, params).do_request
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize(request, response, params)
|
16
|
+
@request = request
|
17
|
+
@response = response
|
18
|
+
@params = params
|
19
|
+
end
|
20
|
+
|
21
|
+
def do_request
|
22
|
+
begin
|
23
|
+
response.response = ::HTTParty.send(
|
24
|
+
method,
|
25
|
+
url,
|
26
|
+
headers: headers, body: payload.to_json
|
27
|
+
)
|
28
|
+
rescue ::HTTParty::ResponseError => e
|
29
|
+
response.error = e
|
30
|
+
end
|
31
|
+
|
32
|
+
response
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
delegate :headers, :payload, :method, :url, to: :request
|
38
|
+
|
39
|
+
attr_reader :request, :response, :params
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module Sinch
|
2
|
+
module Request
|
3
|
+
# Base Sinch Api Request
|
4
|
+
class Base
|
5
|
+
attr_reader :params
|
6
|
+
|
7
|
+
def initialize(params)
|
8
|
+
@params = params
|
9
|
+
end
|
10
|
+
|
11
|
+
def method
|
12
|
+
raise NotImplementedError,
|
13
|
+
"#{self.class.name} must implement a `method` method"
|
14
|
+
end
|
15
|
+
|
16
|
+
def payload
|
17
|
+
raise NotImplementedError,
|
18
|
+
"#{self.class.name} must implement a `payload` method"
|
19
|
+
end
|
20
|
+
|
21
|
+
def headers
|
22
|
+
{
|
23
|
+
'content-type' => content_type,
|
24
|
+
'x-timestamp' => timestamp,
|
25
|
+
'authorization' => authorization
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
def endpoint
|
30
|
+
raise NotImplementedError,
|
31
|
+
"#{self.class.name} must implement an `endpoint` method"
|
32
|
+
end
|
33
|
+
|
34
|
+
def url
|
35
|
+
[base_url, endpoint].join
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def base_url
|
41
|
+
'https://verificationapi-v1.sinch.com'
|
42
|
+
end
|
43
|
+
|
44
|
+
def authorization
|
45
|
+
"Application #{application_key}"
|
46
|
+
end
|
47
|
+
|
48
|
+
def content_type
|
49
|
+
'application/json'
|
50
|
+
end
|
51
|
+
|
52
|
+
def timestamp
|
53
|
+
Time.now.utc.iso8601
|
54
|
+
end
|
55
|
+
|
56
|
+
def application_key
|
57
|
+
Sinch.config.application_key
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative './base'
|
2
|
+
|
3
|
+
module Sinch
|
4
|
+
module Request
|
5
|
+
# Report on Verification Request [PUT] /verifications/{type}/{endpoint}
|
6
|
+
class ReportVerification < Base
|
7
|
+
def method
|
8
|
+
:put
|
9
|
+
end
|
10
|
+
|
11
|
+
def payload
|
12
|
+
@payload ||= Builder::Request::ReportVerification.new(params).build
|
13
|
+
end
|
14
|
+
|
15
|
+
def endpoint
|
16
|
+
"/verification/v1/verifications/number/#{params[:phone_number]}"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative './base'
|
2
|
+
|
3
|
+
module Sinch
|
4
|
+
module Request
|
5
|
+
# Verification Request [POST] /verifications/
|
6
|
+
class Verification < Base
|
7
|
+
def method
|
8
|
+
:post
|
9
|
+
end
|
10
|
+
|
11
|
+
def payload
|
12
|
+
@payload ||= Builder::Request::Verification.new(params).build
|
13
|
+
end
|
14
|
+
|
15
|
+
def endpoint
|
16
|
+
'/verification/v1/verifications'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'active_support/core_ext/module'
|
2
|
+
|
3
|
+
module Sinch
|
4
|
+
module Response
|
5
|
+
# Base Sinch API Response
|
6
|
+
class Base
|
7
|
+
attr_accessor :response
|
8
|
+
|
9
|
+
delegate :success?, :body, :code, to: :response
|
10
|
+
|
11
|
+
def json
|
12
|
+
return {} unless success?
|
13
|
+
response.parsed_response.to_json
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require_relative './base'
|
2
|
+
|
3
|
+
module Sinch
|
4
|
+
module Response
|
5
|
+
# Sinch API Response For Verification Request
|
6
|
+
class Verification < Base
|
7
|
+
def json
|
8
|
+
return {} unless success?
|
9
|
+
|
10
|
+
response_hash = response.parsed_response
|
11
|
+
response_hash.merge('request_id' => response_hash['id'])
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/sinch.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'active_support'
|
2
|
+
|
3
|
+
# Sinch API Wrapper
|
4
|
+
module Sinch
|
5
|
+
include ::ActiveSupport::Configurable
|
6
|
+
end
|
7
|
+
|
8
|
+
require 'sinch/builder/request/base'
|
9
|
+
require 'sinch/builder/request/verification'
|
10
|
+
require 'sinch/builder/request/report_verification'
|
11
|
+
|
12
|
+
require 'sinch/request/base'
|
13
|
+
require 'sinch/request/verification'
|
14
|
+
require 'sinch/request/report_verification'
|
15
|
+
|
16
|
+
require 'sinch/response/base'
|
17
|
+
require 'sinch/response/verification'
|
18
|
+
require 'sinch/response/report_verification'
|
19
|
+
|
20
|
+
require 'sinch/gateway'
|
21
|
+
require 'sinch/bogus_gateway'
|
metadata
ADDED
@@ -0,0 +1,155 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sinch-ruby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.3
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- David Freiman
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-02-14 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rspec
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.2'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.2'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activesupport
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '5.1'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '5.1'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: vcr
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '4.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '4.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: webmock
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.3'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.3'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: simplecov
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.14.0
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.14.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rubocop
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 0.49.0
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.49.0
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: httparty
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 0.15.6
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 0.15.6
|
111
|
+
description: A library for communicating with the Sinch Rest API
|
112
|
+
email: dfreiman@feedbackapp.ca
|
113
|
+
executables: []
|
114
|
+
extensions: []
|
115
|
+
extra_rdoc_files: []
|
116
|
+
files:
|
117
|
+
- lib/sinch.rb
|
118
|
+
- lib/sinch/bogus_gateway.rb
|
119
|
+
- lib/sinch/builder/request/base.rb
|
120
|
+
- lib/sinch/builder/request/report_verification.rb
|
121
|
+
- lib/sinch/builder/request/verification.rb
|
122
|
+
- lib/sinch/gateway.rb
|
123
|
+
- lib/sinch/request/base.rb
|
124
|
+
- lib/sinch/request/report_verification.rb
|
125
|
+
- lib/sinch/request/verification.rb
|
126
|
+
- lib/sinch/response/base.rb
|
127
|
+
- lib/sinch/response/report_verification.rb
|
128
|
+
- lib/sinch/response/verification.rb
|
129
|
+
homepage: https://github.com/davefreiman/sinch-ruby
|
130
|
+
licenses:
|
131
|
+
- MIT
|
132
|
+
metadata:
|
133
|
+
source_code_url: https://github.com/davefreiman/sinch-ruby
|
134
|
+
homepage_url: https://github.com/davefreiman/sinch-ruby
|
135
|
+
post_install_message:
|
136
|
+
rdoc_options: []
|
137
|
+
require_paths:
|
138
|
+
- lib
|
139
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
140
|
+
requirements:
|
141
|
+
- - ">="
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
version: '2.0'
|
144
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
145
|
+
requirements:
|
146
|
+
- - ">="
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: '0'
|
149
|
+
requirements: []
|
150
|
+
rubyforge_project:
|
151
|
+
rubygems_version: 2.6.8
|
152
|
+
signing_key:
|
153
|
+
specification_version: 4
|
154
|
+
summary: Sinch REST Api Wrapper
|
155
|
+
test_files: []
|