sms_broker 1.0.0 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +16 -0
- data/.travis.yml +3 -0
- data/Gemfile +1 -0
- data/Rakefile +1 -1
- data/lib/sms_broker/client/base.rb +7 -8
- data/lib/sms_broker/client/nexmo.rb +6 -17
- data/lib/sms_broker/client/response/error.rb +1 -5
- data/lib/sms_broker/client/response/nexmo_error.rb +1 -5
- data/lib/sms_broker/client/response/nexmo_success.rb +13 -13
- data/lib/sms_broker/client/response/success.rb +0 -4
- data/lib/sms_broker/client/response/twilio_error.rb +5 -9
- data/lib/sms_broker/client/response/twilio_success.rb +14 -19
- data/lib/sms_broker/client/twilio.rb +16 -31
- data/lib/sms_broker/configuration.rb +9 -13
- data/lib/sms_broker/exceptions/invalid_service.rb +0 -3
- data/lib/sms_broker/exceptions/invalid_setup.rb +0 -4
- data/lib/sms_broker/message_sender.rb +14 -15
- data/lib/sms_broker/service.rb +3 -9
- data/lib/sms_broker/setup.rb +8 -12
- data/lib/sms_broker/version.rb +1 -3
- data/lib/sms_broker.rb +2 -6
- data/spec/sms_broker/nexmo_spec.rb +41 -37
- data/spec/sms_broker/real_call_spec.rb +63 -0
- data/spec/sms_broker/setup_spec.rb +12 -26
- data/spec/sms_broker/sms_broker_spec.rb +19 -93
- data/spec/sms_broker/twilio_spec.rb +35 -56
- data/spec/spec_helper.rb +8 -14
- data/spec/support/nexmo_helpers.rb +19 -72
- data/spec/support/vcr_cassettes/twilio/create_invalid_phone_error.yml +61 -0
- data/spec/support/vcr_cassettes/twilio/create_success.yml +68 -0
- metadata +10 -2
@@ -1,9 +1,6 @@
|
|
1
1
|
require 'rack'
|
2
2
|
|
3
3
|
module NexmoHelpers
|
4
|
-
|
5
|
-
# NEXMO CREATE MESSAGE -------------------------------------------------------
|
6
|
-
|
7
4
|
def stub_nexmo_create_message(request_body, response_body)
|
8
5
|
stub_request(:post, 'https://rest.nexmo.com/sms/json')
|
9
6
|
.with(body: request_body)
|
@@ -16,36 +13,18 @@ module NexmoHelpers
|
|
16
13
|
)
|
17
14
|
end
|
18
15
|
|
19
|
-
def
|
20
|
-
|
16
|
+
def build_request_body(from, to, message)
|
17
|
+
{
|
21
18
|
to: to,
|
22
|
-
from:
|
19
|
+
from: from,
|
23
20
|
text: message,
|
24
|
-
api_key:
|
25
|
-
api_secret:
|
26
|
-
}
|
27
|
-
|
28
|
-
response_body = {
|
29
|
-
'message-count' => '1',
|
30
|
-
'messages' => [
|
31
|
-
{
|
32
|
-
'status' => '2',
|
33
|
-
'error-text' => 'Missing from param'
|
34
|
-
}
|
35
|
-
]
|
21
|
+
api_key: 'api_key',
|
22
|
+
api_secret: 'api_secret'
|
36
23
|
}
|
37
|
-
|
38
|
-
stub_nexmo_create_message(request_body, response_body)
|
39
24
|
end
|
40
25
|
|
41
26
|
def stub_nexmo_create_message_invalid_sender_id_request(sender_id, to, message)
|
42
|
-
request_body =
|
43
|
-
to: to,
|
44
|
-
from: sender_id,
|
45
|
-
text: message,
|
46
|
-
api_key: ENV['NEXMO_API_KEY'],
|
47
|
-
api_secret: ENV['NEXMO_API_SECRET']
|
48
|
-
}
|
27
|
+
request_body = build_request_body(sender_id, to, message)
|
49
28
|
|
50
29
|
response_body = {
|
51
30
|
'message-count' => '1',
|
@@ -61,13 +40,10 @@ module NexmoHelpers
|
|
61
40
|
end
|
62
41
|
|
63
42
|
def stub_nexmo_create_message_invalid_credentials(from, to, message)
|
64
|
-
request_body =
|
65
|
-
|
66
|
-
from: from,
|
67
|
-
text: message,
|
43
|
+
request_body = build_request_body(from, to, message)
|
44
|
+
request_body.merge! \
|
68
45
|
api_key: 'invalid',
|
69
46
|
api_secret: 'invalid'
|
70
|
-
}
|
71
47
|
|
72
48
|
response_body = {
|
73
49
|
'message-count' => '1',
|
@@ -83,13 +59,7 @@ module NexmoHelpers
|
|
83
59
|
end
|
84
60
|
|
85
61
|
def stub_nexmo_create_message_success(from, to, message)
|
86
|
-
request_body =
|
87
|
-
to: to,
|
88
|
-
from: from,
|
89
|
-
text: message,
|
90
|
-
api_key: ENV['NEXMO_API_KEY'],
|
91
|
-
api_secret: ENV['NEXMO_API_SECRET']
|
92
|
-
}
|
62
|
+
request_body = build_request_body(from, to, message)
|
93
63
|
|
94
64
|
response_body = {
|
95
65
|
'message-count': '1',
|
@@ -109,42 +79,19 @@ module NexmoHelpers
|
|
109
79
|
stub_nexmo_create_message(request_body, response_body)
|
110
80
|
end
|
111
81
|
|
112
|
-
|
113
|
-
|
114
|
-
def stub_nexmo_get_message(message_id, response_body)
|
115
|
-
query_string = \
|
116
|
-
Rack::Utils.build_query \
|
117
|
-
id: message_id,
|
118
|
-
api_key: ENV['NEXMO_API_KEY'],
|
119
|
-
api_secret: ENV['NEXMO_API_SECRET']
|
120
|
-
|
121
|
-
stub_request(:get, "https://rest.nexmo.com/search/message?#{query_string}")
|
122
|
-
.to_return(
|
123
|
-
status: 200,
|
124
|
-
body: response_body.to_json,
|
125
|
-
headers: {
|
126
|
-
'Content-Type' => 'application/json'
|
127
|
-
}
|
128
|
-
)
|
129
|
-
end
|
82
|
+
def stub_nexmo_create_message_unknown_error(from, to, message)
|
83
|
+
request_body = build_request_body(from, to, message)
|
130
84
|
|
131
|
-
def stub_nexmo_get_message_success(message_id)
|
132
85
|
response_body = {
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
"message-id" => message_id,
|
141
|
-
"account-id" => "12345678",
|
142
|
-
"date-closed" => "2016-05-03 12:03:56",
|
143
|
-
"final-status" => "DELIVRD",
|
144
|
-
"date-received" => "2016-05-03 12:03:53"
|
86
|
+
'message-count' => '1',
|
87
|
+
'messages' => [
|
88
|
+
{
|
89
|
+
'status' => '1',
|
90
|
+
'error-text' => 'Unknown'
|
91
|
+
}
|
92
|
+
]
|
145
93
|
}
|
146
94
|
|
147
|
-
|
95
|
+
stub_nexmo_create_message(request_body, response_body)
|
148
96
|
end
|
149
|
-
|
150
97
|
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://api.twilio.com/2010-04-01/Accounts/account_sid/Messages.json
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: Body=Hello+World&From=%2B15005550001&To=%2B15005550006
|
9
|
+
headers:
|
10
|
+
Accept:
|
11
|
+
- application/json
|
12
|
+
Accept-Charset:
|
13
|
+
- utf-8
|
14
|
+
User-Agent:
|
15
|
+
- twilio-ruby/4.13.0 (ruby/x86_64-darwin14 2.2.1-p85)
|
16
|
+
Accept-Encoding:
|
17
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
18
|
+
Authorization:
|
19
|
+
- Basic YWNjb3VudF9pZDphdXRoX3Rva2Vu
|
20
|
+
Content-Type:
|
21
|
+
- application/x-www-form-urlencoded
|
22
|
+
response:
|
23
|
+
status:
|
24
|
+
code: 400
|
25
|
+
message: BAD REQUEST
|
26
|
+
headers:
|
27
|
+
Access-Control-Allow-Credentials:
|
28
|
+
- 'true'
|
29
|
+
Access-Control-Allow-Headers:
|
30
|
+
- Accept, Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match,
|
31
|
+
If-Unmodified-Since
|
32
|
+
Access-Control-Allow-Methods:
|
33
|
+
- GET, POST, DELETE, OPTIONS
|
34
|
+
Access-Control-Allow-Origin:
|
35
|
+
- "*"
|
36
|
+
Access-Control-Expose-Headers:
|
37
|
+
- ETag
|
38
|
+
Content-Type:
|
39
|
+
- application/json; charset=utf-8
|
40
|
+
Date:
|
41
|
+
- Fri, 23 Sep 2016 12:53:22 GMT
|
42
|
+
Twilio-Request-Duration:
|
43
|
+
- '0.093'
|
44
|
+
Twilio-Request-Id:
|
45
|
+
- Twilio-Request-Id
|
46
|
+
X-Powered-By:
|
47
|
+
- AT-5000
|
48
|
+
X-Shenanigans:
|
49
|
+
- none
|
50
|
+
Content-Length:
|
51
|
+
- '199'
|
52
|
+
Connection:
|
53
|
+
- keep-alive
|
54
|
+
body:
|
55
|
+
encoding: UTF-8
|
56
|
+
string: '{"code": 21212, "message": "The ''From'' number +15005550001 is not
|
57
|
+
a valid phone number, shortcode, or alphanumeric sender ID.", "more_info":
|
58
|
+
"https://www.twilio.com/docs/errors/21212", "status": 400}'
|
59
|
+
http_version:
|
60
|
+
recorded_at: Fri, 23 Sep 2016 12:53:22 GMT
|
61
|
+
recorded_with: VCR 3.0.3
|
@@ -0,0 +1,68 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://api.twilio.com/2010-04-01/Accounts/account_sid/Messages.json
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: Body=Hello+World&From=%2B15005550006&To=%2B15005550006
|
9
|
+
headers:
|
10
|
+
Accept:
|
11
|
+
- application/json
|
12
|
+
Accept-Charset:
|
13
|
+
- utf-8
|
14
|
+
User-Agent:
|
15
|
+
- twilio-ruby/4.13.0 (ruby/x86_64-darwin14 2.2.1-p85)
|
16
|
+
Accept-Encoding:
|
17
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
18
|
+
Authorization:
|
19
|
+
- Basic YWNjb3VudF9pZDphdXRoX3Rva2Vu
|
20
|
+
Content-Type:
|
21
|
+
- application/x-www-form-urlencoded
|
22
|
+
response:
|
23
|
+
status:
|
24
|
+
code: 201
|
25
|
+
message: CREATED
|
26
|
+
headers:
|
27
|
+
Access-Control-Allow-Credentials:
|
28
|
+
- 'true'
|
29
|
+
Access-Control-Allow-Headers:
|
30
|
+
- Accept, Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match,
|
31
|
+
If-Unmodified-Since
|
32
|
+
Access-Control-Allow-Methods:
|
33
|
+
- GET, POST, DELETE, OPTIONS
|
34
|
+
Access-Control-Allow-Origin:
|
35
|
+
- "*"
|
36
|
+
Access-Control-Expose-Headers:
|
37
|
+
- ETag
|
38
|
+
Content-Type:
|
39
|
+
- application/json; charset=utf-8
|
40
|
+
Date:
|
41
|
+
- Fri, 23 Sep 2016 12:53:22 GMT
|
42
|
+
Strict-Transport-Security:
|
43
|
+
- max-age=15768000
|
44
|
+
Twilio-Request-Duration:
|
45
|
+
- '0.034'
|
46
|
+
Twilio-Request-Id:
|
47
|
+
- Twilio-Request-Id
|
48
|
+
X-Powered-By:
|
49
|
+
- AT-5000
|
50
|
+
X-Shenanigans:
|
51
|
+
- none
|
52
|
+
Content-Length:
|
53
|
+
- '775'
|
54
|
+
Connection:
|
55
|
+
- keep-alive
|
56
|
+
body:
|
57
|
+
encoding: UTF-8
|
58
|
+
string: '{"sid": "message_sid", "date_created": "Fri,
|
59
|
+
23 Sep 2016 12:53:22 +0000", "date_updated": "Fri, 23 Sep 2016 12:53:22 +0000",
|
60
|
+
"date_sent": null, "account_sid": "account_sid", "to":
|
61
|
+
"+15005550006", "from": "+15005550006", "messaging_service_sid": null, "body":
|
62
|
+
"Hello World", "status": "queued", "num_segments": "1", "num_media": "0",
|
63
|
+
"direction": "outbound-api", "api_version": "2010-04-01", "price": null, "price_unit":
|
64
|
+
"USD", "error_code": null, "error_message": null, "uri": "/2010-04-01/Accounts/account_sid/Messages/message_sid.json",
|
65
|
+
"subresource_uris": {"media": "/2010-04-01/Accounts/account_sid/Messages/message_sid/Media.json"}}'
|
66
|
+
http_version:
|
67
|
+
recorded_at: Fri, 23 Sep 2016 12:53:22 GMT
|
68
|
+
recorded_with: VCR 3.0.3
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sms_broker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Streetbees Dev Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-09-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nexmo
|
@@ -117,6 +117,8 @@ extra_rdoc_files: []
|
|
117
117
|
files:
|
118
118
|
- ".gitignore"
|
119
119
|
- ".rspec"
|
120
|
+
- ".rubocop.yml"
|
121
|
+
- ".travis.yml"
|
120
122
|
- Gemfile
|
121
123
|
- README.md
|
122
124
|
- Rakefile
|
@@ -139,11 +141,14 @@ files:
|
|
139
141
|
- lib/sms_broker/version.rb
|
140
142
|
- sms_broker.gemspec
|
141
143
|
- spec/sms_broker/nexmo_spec.rb
|
144
|
+
- spec/sms_broker/real_call_spec.rb
|
142
145
|
- spec/sms_broker/setup_spec.rb
|
143
146
|
- spec/sms_broker/sms_broker_spec.rb
|
144
147
|
- spec/sms_broker/twilio_spec.rb
|
145
148
|
- spec/spec_helper.rb
|
146
149
|
- spec/support/nexmo_helpers.rb
|
150
|
+
- spec/support/vcr_cassettes/twilio/create_invalid_phone_error.yml
|
151
|
+
- spec/support/vcr_cassettes/twilio/create_success.yml
|
147
152
|
homepage: https://github.com/streetbees/sms_broker
|
148
153
|
licenses: []
|
149
154
|
metadata: {}
|
@@ -169,8 +174,11 @@ specification_version: 4
|
|
169
174
|
summary: Sms Broker
|
170
175
|
test_files:
|
171
176
|
- spec/sms_broker/nexmo_spec.rb
|
177
|
+
- spec/sms_broker/real_call_spec.rb
|
172
178
|
- spec/sms_broker/setup_spec.rb
|
173
179
|
- spec/sms_broker/sms_broker_spec.rb
|
174
180
|
- spec/sms_broker/twilio_spec.rb
|
175
181
|
- spec/spec_helper.rb
|
176
182
|
- spec/support/nexmo_helpers.rb
|
183
|
+
- spec/support/vcr_cassettes/twilio/create_invalid_phone_error.yml
|
184
|
+
- spec/support/vcr_cassettes/twilio/create_success.yml
|