notifications-ruby-client 2.1.0 → 2.2.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 +4 -4
- data/CHANGELOG.md +11 -4
- data/README.md +166 -12
- data/Rakefile +0 -6
- data/bin/generate_docker_env.sh +1 -0
- data/bin/test_client.rb +79 -25
- data/lib/notifications/client/notification.rb +27 -30
- data/lib/notifications/client/response_notification.rb +8 -12
- data/lib/notifications/client/response_template.rb +29 -32
- data/lib/notifications/client/speaker.rb +2 -2
- data/lib/notifications/client/template_collection.rb +2 -2
- data/lib/notifications/client/template_preview.rb +13 -15
- data/lib/notifications/client/version.rb +1 -1
- data/lib/notifications/client.rb +9 -1
- data/notifications-ruby-client.gemspec +0 -1
- metadata +3 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1cacbc8bf726eac5dfde61a8b0f9bad26ece23e6
|
4
|
+
data.tar.gz: 62f6050ebcab00e662124c17bb5f5b32c7b25505
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 01ccf7949dc273065b7a5324f72b0080879d89c7136e5d10fdd13e4e51c92a88e4346378527216e1c7a624666853df1f745895b1d7db3ed03d1c0d3e59c73f3a
|
7
|
+
data.tar.gz: 449bcdb891547ec90f0f026036ad801b213e60288c22ef8a65ab53f76721a2403a3f35dc83a6a1b4c73bd2a401ac7d3bf4dc3aed395dd199b1b7754d4565868c
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,13 @@
|
|
1
|
-
##2.
|
1
|
+
## 2.2.0
|
2
2
|
|
3
|
-
###Changed
|
3
|
+
### Changed
|
4
|
+
* Added a new `send_letter` method
|
5
|
+
* Removed 'govuk-lint' gem as a development dependency
|
6
|
+
|
7
|
+
|
8
|
+
## 2.1.0
|
9
|
+
|
10
|
+
### Changed
|
4
11
|
* Added methods to get templates and generate a preview of a template.
|
5
12
|
* `get_template_by_id` - get the latest version of a template by id.
|
6
13
|
* `get_template_version` - get the template by id and version.
|
@@ -9,9 +16,9 @@
|
|
9
16
|
* See the README for more information about the new template methods.
|
10
17
|
|
11
18
|
|
12
|
-
##2.0.0
|
19
|
+
## 2.0.0
|
13
20
|
|
14
|
-
###Changed
|
21
|
+
### Changed
|
15
22
|
* Using version 2 of the notification-api.
|
16
23
|
* A new `Notifications::Client` no longer requires the `service_id`, only the `api_key` is required.
|
17
24
|
* `Notifications::Client.send_sms()` input parameters and the response object has changed, see the README for more information.
|
data/README.md
CHANGED
@@ -28,7 +28,6 @@ Generate an API key by logging in to GOV.UK Notify [GOV.UK Notify](https://www.n
|
|
28
28
|
Text message:
|
29
29
|
|
30
30
|
```ruby
|
31
|
-
require 'notifications/client/response_notification'
|
32
31
|
sms = client.send_sms(
|
33
32
|
phone_number: number,
|
34
33
|
template_id: template_id,
|
@@ -52,14 +51,12 @@ sms => Notifications::Client::ResponseNotification
|
|
52
51
|
|
53
52
|
sms.id # => uuid for the notification
|
54
53
|
sms.reference # => Reference string you supplied in the request
|
55
|
-
sms.
|
56
|
-
sms.status # => status of the message "created|pending|sent|delivered|permanent-failure|temporary-failure"
|
57
|
-
content # => Hash containing body => the message sent to the recipient, with placeholders replaced.
|
54
|
+
sms.content # => Hash containing body => the message sent to the recipient, with placeholders replaced.
|
58
55
|
# from_number => the sms sender number of your service found **Settings** page
|
59
|
-
template
|
56
|
+
sms.template # => Hash containing id => id of the template
|
60
57
|
# version => version of the template
|
61
|
-
# uri => url of the template
|
62
|
-
uri
|
58
|
+
# uri => url of the template
|
59
|
+
sms.uri # => URL of the notification
|
63
60
|
```
|
64
61
|
|
65
62
|
Otherwise the client will raise a `Notifications::Client::RequestError`:
|
@@ -71,6 +68,19 @@ Otherwise the client will raise a `Notifications::Client::RequestError`:
|
|
71
68
|
</tr>
|
72
69
|
</thead>
|
73
70
|
<tbody>
|
71
|
+
<tr>
|
72
|
+
<td>
|
73
|
+
<pre>429</pre>
|
74
|
+
</td>
|
75
|
+
<td>
|
76
|
+
<pre>
|
77
|
+
[{
|
78
|
+
"error": "RateLimitError",
|
79
|
+
"message": "Exceeded rate limit for key type TEAM of 10 requests per 10 seconds"
|
80
|
+
}]
|
81
|
+
</pre>
|
82
|
+
</td>
|
83
|
+
</tr>
|
74
84
|
<tr>
|
75
85
|
<td>
|
76
86
|
<pre>429</pre>
|
@@ -119,7 +129,6 @@ Otherwise the client will raise a `Notifications::Client::RequestError`:
|
|
119
129
|
Email:
|
120
130
|
|
121
131
|
```ruby
|
122
|
-
require 'notifications/client/response_notification'
|
123
132
|
email = client.send_email(
|
124
133
|
email_address: email_address,
|
125
134
|
template_id: template_id,
|
@@ -143,14 +152,12 @@ email => Notifications::Client::ResponseNotification
|
|
143
152
|
|
144
153
|
email.id # => uuid for the notification
|
145
154
|
email.reference # => Reference string you supplied in the request
|
146
|
-
email.type # => email
|
147
|
-
email.status # => status of the message "created|pending|sent|delivered|permanent-failure|temporary-failure"
|
148
155
|
email.content # => Hash containing body => the message sent to the recipient, with placeholders replaced.
|
149
156
|
# subject => subject of the message sent to the recipient, with placeholders replaced.
|
150
157
|
# from_email => the from email of your service found **Settings** page
|
151
158
|
email.template # => Hash containing id => id of the template
|
152
159
|
# version => version of the template
|
153
|
-
# uri => url of the template
|
160
|
+
# uri => url of the template
|
154
161
|
email.uri # => URL of the notification
|
155
162
|
```
|
156
163
|
|
@@ -163,6 +170,19 @@ Otherwise the client will raise a `Notifications::Client::RequestError`:
|
|
163
170
|
</tr>
|
164
171
|
</thead>
|
165
172
|
<tbody>
|
173
|
+
<tr>
|
174
|
+
<td>
|
175
|
+
<pre>429</pre>
|
176
|
+
</td>
|
177
|
+
<td>
|
178
|
+
<pre>
|
179
|
+
[{
|
180
|
+
"error": "RateLimitError",
|
181
|
+
"message": "Exceeded rate limit for key type TEAM of 10 requests per 10 seconds"
|
182
|
+
}]
|
183
|
+
</pre>
|
184
|
+
</td>
|
185
|
+
</tr>
|
166
186
|
<tr>
|
167
187
|
<td>
|
168
188
|
<pre>429</pre>
|
@@ -207,6 +227,122 @@ Otherwise the client will raise a `Notifications::Client::RequestError`:
|
|
207
227
|
</table>
|
208
228
|
</details>
|
209
229
|
|
230
|
+
Letter:
|
231
|
+
|
232
|
+
```ruby
|
233
|
+
letter = client.send_letter(
|
234
|
+
template_id: template_id,
|
235
|
+
personalisation: {
|
236
|
+
address_line_1: 'Her Majesty The Queen', # required
|
237
|
+
address_line_2: 'Buckingham Palace', # required
|
238
|
+
address_line_3: 'London',
|
239
|
+
postcode: 'SW1 1AA', # required
|
240
|
+
|
241
|
+
... # any other personalisation found in your template
|
242
|
+
},
|
243
|
+
reference: "your_reference_string"
|
244
|
+
) # => Notifications::Client::ResponseNotification
|
245
|
+
```
|
246
|
+
|
247
|
+
<details>
|
248
|
+
<summary>
|
249
|
+
Response
|
250
|
+
</summary>
|
251
|
+
|
252
|
+
If the request is successful, a `Notifications::Client:ResponseNotification` is returned
|
253
|
+
|
254
|
+
```ruby
|
255
|
+
letter => Notifications::Client::ResponseNotification
|
256
|
+
|
257
|
+
letter.id # => uuid for the notification
|
258
|
+
letter.reference # => Reference string you supplied in the request
|
259
|
+
letter.content # => Hash containing body => the body of the letter sent to the recipient, with placeholders replaced
|
260
|
+
# subject => the main heading of the letter
|
261
|
+
letter.template # => Hash containing id => id of the template
|
262
|
+
# version => version of the template
|
263
|
+
# uri => url of the template
|
264
|
+
letter.uri # => URL of the notification
|
265
|
+
```
|
266
|
+
|
267
|
+
Otherwise the client will raise a `Notifications::Client::RequestError`:
|
268
|
+
<table>
|
269
|
+
<thead>
|
270
|
+
<tr>
|
271
|
+
<th>error.code</th>
|
272
|
+
<th>error.message</th>
|
273
|
+
</tr>
|
274
|
+
</thead>
|
275
|
+
<tbody>
|
276
|
+
<tr>
|
277
|
+
<td>
|
278
|
+
<pre>429</pre>
|
279
|
+
</td>
|
280
|
+
<td>
|
281
|
+
<pre>
|
282
|
+
[{
|
283
|
+
"error": "RateLimitError",
|
284
|
+
"message": "Exceeded rate limit for key type TEAM of 10 requests per 10 seconds"
|
285
|
+
}]
|
286
|
+
</pre>
|
287
|
+
</td>
|
288
|
+
</tr>
|
289
|
+
<tr>
|
290
|
+
<td>
|
291
|
+
<pre>429</pre>
|
292
|
+
</td>
|
293
|
+
<td>
|
294
|
+
<pre>
|
295
|
+
[{
|
296
|
+
"error": "TooManyRequestsError",
|
297
|
+
"message": "Exceeded send limits (50) for today"
|
298
|
+
}]
|
299
|
+
</pre>
|
300
|
+
</td>
|
301
|
+
</tr>
|
302
|
+
<tr>
|
303
|
+
<td>
|
304
|
+
<pre>400</pre>
|
305
|
+
</td>
|
306
|
+
<td>
|
307
|
+
<pre>
|
308
|
+
[{
|
309
|
+
"error": "BadRequestError",
|
310
|
+
"message": "Can"t send to this recipient using a team-only API key"
|
311
|
+
]}
|
312
|
+
</pre>
|
313
|
+
</td>
|
314
|
+
</tr>
|
315
|
+
<tr>
|
316
|
+
<td>
|
317
|
+
<pre>400</pre>
|
318
|
+
</td>
|
319
|
+
<td>
|
320
|
+
<pre>
|
321
|
+
[{
|
322
|
+
"error": "BadRequestError",
|
323
|
+
"message": "Can"t send to this recipient when service is in trial mode
|
324
|
+
- see https://www.notifications.service.gov.uk/trial-mode"
|
325
|
+
}]
|
326
|
+
</pre>
|
327
|
+
</td>
|
328
|
+
</tr>
|
329
|
+
<tr>
|
330
|
+
<td>
|
331
|
+
<pre>400</pre>
|
332
|
+
</td>
|
333
|
+
<td>
|
334
|
+
<pre>
|
335
|
+
[{
|
336
|
+
"error": "ValidationError",
|
337
|
+
"message": "personalisation address_line_1 is a required property"
|
338
|
+
}]
|
339
|
+
</pre>
|
340
|
+
</td>
|
341
|
+
</tr>
|
342
|
+
</tbody>
|
343
|
+
</table>
|
344
|
+
</details>
|
345
|
+
|
210
346
|
### Arguments
|
211
347
|
#### `phone_number`
|
212
348
|
The phone number of the recipient, only required when using `client.send_sms`.
|
@@ -232,7 +368,24 @@ If the template has placeholders you need to provide their values as a Hash, for
|
|
232
368
|
}
|
233
369
|
```
|
234
370
|
|
235
|
-
You can omit this argument if the template does not contain placeholders.
|
371
|
+
You can omit this argument if the template does not contain placeholders and is for email or sms.
|
372
|
+
|
373
|
+
#### `personalisation` (for letters)
|
374
|
+
|
375
|
+
If you are sending a letter, you will need to provide the letter fields in the format `"address_line_#"`, for example:
|
376
|
+
|
377
|
+
```ruby
|
378
|
+
personalisation: {
|
379
|
+
'address_line_1' => 'The Occupier',
|
380
|
+
'address_line_2' => '123 High Street',
|
381
|
+
'address_line_3' => 'London',
|
382
|
+
'postcode' => 'SW14 6BH',
|
383
|
+
'first_name' => 'Amala',
|
384
|
+
'reference_number' => '300241',
|
385
|
+
}
|
386
|
+
```
|
387
|
+
|
388
|
+
The fields `address_line_1`, `address_line_2` and `postcode` are required.
|
236
389
|
|
237
390
|
### Get the status of one message
|
238
391
|
|
@@ -306,6 +459,7 @@ Otherwise a `Notification::Client::RequestError` is raised
|
|
306
459
|
</details>
|
307
460
|
|
308
461
|
</details>
|
462
|
+
|
309
463
|
### Get the status of all messages
|
310
464
|
|
311
465
|
```ruby
|
data/Rakefile
CHANGED
data/bin/generate_docker_env.sh
CHANGED
data/bin/test_client.rb
CHANGED
@@ -15,8 +15,10 @@ def main
|
|
15
15
|
test_generate_template_preview(client, ENV['EMAIL_TEMPLATE_ID'])
|
16
16
|
email_notification = test_send_email_endpoint(client)
|
17
17
|
sms_notification = test_send_sms_endpoint(client)
|
18
|
+
letter_notification = test_send_letter_endpoint(client)
|
18
19
|
test_get_notification_by_id_endpoint(client, email_notification.id, 'email')
|
19
20
|
test_get_notification_by_id_endpoint(client, sms_notification.id, 'sms')
|
21
|
+
test_get_notification_by_id_endpoint(client, letter_notification.id, 'letter')
|
20
22
|
test_get_all_notifications(client)
|
21
23
|
p 'ruby client integration tests pass'
|
22
24
|
exit 0
|
@@ -34,25 +36,26 @@ end
|
|
34
36
|
|
35
37
|
def test_get_all_templates(client)
|
36
38
|
response = client.get_all_templates()
|
37
|
-
unless response.is_a?(Notifications::Client::TemplateCollection)
|
39
|
+
unless response.is_a?(Notifications::Client::TemplateCollection)
|
38
40
|
p 'failed test_get_all_templates response is not a Notifications::Client::TemplateCollection'
|
39
41
|
exit 1
|
40
42
|
end
|
41
|
-
unless response.collection.length >=
|
42
|
-
p 'failed test_get_all_templates, expected at least
|
43
|
+
unless response.collection.length >= 3
|
44
|
+
p 'failed test_get_all_templates, expected at least 3 templates returned.'
|
43
45
|
exit 1
|
44
46
|
end
|
45
47
|
test_template_response(response.collection[0], 'test_get_all_templates')
|
46
48
|
test_template_response(response.collection[1], 'test_get_all_templates')
|
49
|
+
test_template_response(response.collection[2], 'test_get_all_templates')
|
47
50
|
end
|
48
51
|
|
49
52
|
def test_get_all_templates_filter_by_type(client)
|
50
53
|
response = client.get_all_templates({'type' => 'sms'})
|
51
|
-
unless response.is_a?(Notifications::Client::TemplateCollection)
|
54
|
+
unless response.is_a?(Notifications::Client::TemplateCollection)
|
52
55
|
p 'failed test_get_all_templates response is not a Notifications::Client::TemplateCollection'
|
53
56
|
exit 1
|
54
57
|
end
|
55
|
-
unless response.collection.length >= 1
|
58
|
+
unless response.collection.length >= 1
|
56
59
|
p 'failed test_get_all_templates, expected at least 2 templates returned.'
|
57
60
|
exit 1
|
58
61
|
end
|
@@ -66,11 +69,11 @@ def test_generate_template_preview(client, id)
|
|
66
69
|
end
|
67
70
|
|
68
71
|
def test_template_response(response, test_method)
|
69
|
-
unless response.is_a?(Notifications::Client::Template)
|
72
|
+
unless response.is_a?(Notifications::Client::Template)
|
70
73
|
p 'failed test_get_template_by_id response is not a Notifications::Client::Template'
|
71
74
|
exit 1
|
72
75
|
end
|
73
|
-
unless response.id.is_a?(String)
|
76
|
+
unless response.id.is_a?(String)
|
74
77
|
p 'failed template id is not a String'
|
75
78
|
exit 1
|
76
79
|
end
|
@@ -78,11 +81,11 @@ def test_template_response(response, test_method)
|
|
78
81
|
end
|
79
82
|
|
80
83
|
def test_template_preview(response)
|
81
|
-
unless response.is_a?(Notifications::Client::TemplatePreview)
|
84
|
+
unless response.is_a?(Notifications::Client::TemplatePreview)
|
82
85
|
p 'failed test_generate_template_preview response is not a Notifications::Client::TemplatePreview'
|
83
86
|
exit 1
|
84
87
|
end
|
85
|
-
unless response.id.is_a?(String)
|
88
|
+
unless response.id.is_a?(String)
|
86
89
|
p 'failed template id is not a String'
|
87
90
|
exit 1
|
88
91
|
end
|
@@ -105,50 +108,67 @@ def test_send_sms_endpoint(client)
|
|
105
108
|
sms_resp
|
106
109
|
end
|
107
110
|
|
111
|
+
def test_send_letter_endpoint(client)
|
112
|
+
letter_resp = client.send_letter(
|
113
|
+
template_id: ENV['LETTER_TEMPLATE_ID'],
|
114
|
+
personalisation: {
|
115
|
+
address_line_1: "Her Majesty The Queen",
|
116
|
+
address_line_2: "Buckingham Palace",
|
117
|
+
postcode: "SW1 1AA"
|
118
|
+
},
|
119
|
+
reference: "some reference"
|
120
|
+
)
|
121
|
+
test_notification_response_data_type(letter_resp, 'letter')
|
122
|
+
letter_resp
|
123
|
+
end
|
124
|
+
|
108
125
|
def test_notification_response_data_type(notification, message_type)
|
109
|
-
unless notification.is_a?(Notifications::Client::ResponseNotification)
|
126
|
+
unless notification.is_a?(Notifications::Client::ResponseNotification)
|
110
127
|
p 'failed ' + message_type +' response is not a Notifications::Client::ResponseNotification'
|
111
128
|
exit 1
|
112
129
|
end
|
113
|
-
unless notification.id.is_a?(String)
|
130
|
+
unless notification.id.is_a?(String)
|
114
131
|
p 'failed '+ message_type + 'id is not a String'
|
115
132
|
exit 1
|
116
133
|
end
|
117
134
|
field_should_not_be_nil(expected_fields_in_notification_response, notification, 'send_'+message_type)
|
118
135
|
hash_key_should_not_be_nil(expected_fields_in_template, notification.send('template'), 'send_'+message_type+'.template')
|
119
|
-
|
136
|
+
|
137
|
+
if message_type == 'email'
|
120
138
|
hash_key_should_not_be_nil(expected_fields_in_email_content, notification.send('content'), 'send_'+message_type+'.content')
|
121
|
-
|
122
|
-
if message_type == 'sms' then
|
139
|
+
elsif message_type == 'sms'
|
123
140
|
hash_key_should_not_be_nil(expected_fields_in_sms_content, notification.send('content'),'send_'+message_type+'.content')
|
141
|
+
elsif message_type == 'letter'
|
142
|
+
hash_key_should_not_be_nil(expected_fields_in_letter_content, notification.send('content'),'send_'+message_type+'.content')
|
124
143
|
end
|
125
|
-
|
126
144
|
end
|
127
145
|
|
128
146
|
def test_get_notification_by_id_endpoint(client, id, message_type)
|
129
147
|
get_notification_response = client.get_notification(id)
|
130
148
|
|
131
|
-
unless get_notification_response.is_a?(Notifications::Client::Notification)
|
149
|
+
unless get_notification_response.is_a?(Notifications::Client::Notification)
|
132
150
|
p 'get notification is not a Notifications::Client::Notification for id ' + id
|
133
151
|
exit 1
|
134
152
|
end
|
135
|
-
|
153
|
+
|
154
|
+
if message_type == 'email'
|
136
155
|
field_should_not_be_nil(expected_fields_in_email_notification, get_notification_response, 'Notifications::Client::Notification for type email')
|
137
156
|
field_should_be_nil(expected_fields_in_email_notification_that_are_nil, get_notification_response, 'Notifications::Client::Notification for type email')
|
138
157
|
hash_key_should_not_be_nil(expected_fields_in_template, get_notification_response.send('template'), 'Notifications::Client::Notification.template for type email')
|
139
|
-
|
140
|
-
if message_type == 'sms' then
|
158
|
+
elsif message_type == 'sms'
|
141
159
|
field_should_not_be_nil(expected_fields_in_sms_notification, get_notification_response, 'Notifications::Client::Notification for type sms')
|
142
160
|
field_should_be_nil(expected_fields_in_sms_notification_that_are_nil, get_notification_response, 'Notifications::Client::Notification for type sms')
|
143
161
|
hash_key_should_not_be_nil(expected_fields_in_template, get_notification_response.send('template'), 'Notifications::Client::Notification.template for type sms')
|
162
|
+
elsif message_type == 'letter'
|
163
|
+
field_should_not_be_nil(expected_fields_in_letter_notification, get_notification_response, 'Notifications::Client::Notification for type letter')
|
164
|
+
field_should_be_nil(expected_fields_in_letter_notification_that_are_nil, get_notification_response, 'Notifications::Client::Notification for type letter')
|
165
|
+
hash_key_should_not_be_nil(expected_fields_in_template, get_notification_response.send('template'), 'Notifications::Client::Notification.template for type letter')
|
144
166
|
end
|
145
|
-
|
146
167
|
end
|
147
168
|
|
148
|
-
|
149
169
|
def hash_key_should_not_be_nil(fields, obj, method_name)
|
150
170
|
fields.each do |field|
|
151
|
-
if obj.has_value?(:"#{field}")
|
171
|
+
if obj.has_value?(:"#{field}")
|
152
172
|
p 'contract test failed because ' + field + ' should not be nil for ' + method_name + ' response'
|
153
173
|
exit 1
|
154
174
|
end
|
@@ -157,7 +177,7 @@ end
|
|
157
177
|
|
158
178
|
def field_should_not_be_nil(fields, obj, method_name)
|
159
179
|
fields.each do |field|
|
160
|
-
if obj.send(:"#{field}") == nil
|
180
|
+
if obj.send(:"#{field}") == nil
|
161
181
|
p 'contract test failed because ' + field + ' should not be nil for ' + method_name + ' response'
|
162
182
|
exit 1
|
163
183
|
end
|
@@ -166,7 +186,7 @@ end
|
|
166
186
|
|
167
187
|
def field_should_be_nil(fields, obj, method_name)
|
168
188
|
fields.each do |field|
|
169
|
-
if obj.send(:"#{field}") != nil
|
189
|
+
if obj.send(:"#{field}") != nil
|
170
190
|
p 'contract test failed because ' + field + ' should be nil for ' + method_name + ' response'
|
171
191
|
exit 1
|
172
192
|
end
|
@@ -212,6 +232,13 @@ def expected_fields_in_sms_content
|
|
212
232
|
)
|
213
233
|
end
|
214
234
|
|
235
|
+
def expected_fields_in_letter_content
|
236
|
+
%w(
|
237
|
+
body
|
238
|
+
subject
|
239
|
+
)
|
240
|
+
end
|
241
|
+
|
215
242
|
def expected_fields_in_email_notification
|
216
243
|
%w(id
|
217
244
|
email_address
|
@@ -261,6 +288,33 @@ def expected_fields_in_sms_notification_that_are_nil
|
|
261
288
|
subject)
|
262
289
|
end
|
263
290
|
|
291
|
+
def expected_fields_in_letter_notification
|
292
|
+
%w(
|
293
|
+
id
|
294
|
+
type
|
295
|
+
status
|
296
|
+
template
|
297
|
+
body
|
298
|
+
subject
|
299
|
+
line_1
|
300
|
+
line_2
|
301
|
+
postcode
|
302
|
+
created_at
|
303
|
+
)
|
304
|
+
end
|
305
|
+
|
306
|
+
def expected_fields_in_letter_notification_that_are_nil
|
307
|
+
%w(
|
308
|
+
phone_number
|
309
|
+
email_address
|
310
|
+
line_3
|
311
|
+
line_4
|
312
|
+
line_5
|
313
|
+
line_5
|
314
|
+
line_6
|
315
|
+
)
|
316
|
+
end
|
317
|
+
|
264
318
|
def expected_fields_in_template
|
265
319
|
%w(id
|
266
320
|
version
|
@@ -269,7 +323,7 @@ end
|
|
269
323
|
|
270
324
|
def test_get_all_notifications(client)
|
271
325
|
notifications = client.get_notifications()
|
272
|
-
unless notifications.is_a?(Notifications::Client::NotificationsCollection)
|
326
|
+
unless notifications.is_a?(Notifications::Client::NotificationsCollection)
|
273
327
|
p 'get all notifications is not Notifications::Client::NotificationsCollection'
|
274
328
|
exit 1
|
275
329
|
end
|
@@ -1,43 +1,41 @@
|
|
1
1
|
module Notifications
|
2
2
|
class Client
|
3
3
|
class Notification
|
4
|
-
FIELDS =
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
4
|
+
FIELDS = %i(
|
5
|
+
id
|
6
|
+
reference
|
7
|
+
email_address
|
8
|
+
phone_number
|
9
|
+
line_1
|
10
|
+
line_2
|
11
|
+
line_3
|
12
|
+
line_4
|
13
|
+
line_5
|
14
|
+
line_6
|
15
|
+
postcode
|
16
|
+
type
|
17
|
+
status
|
18
|
+
template
|
19
|
+
body
|
20
|
+
subject
|
21
|
+
sent_at
|
22
|
+
created_at
|
23
|
+
completed_at
|
24
|
+
).freeze
|
25
25
|
|
26
26
|
attr_reader(*FIELDS)
|
27
27
|
|
28
28
|
def initialize(notification)
|
29
|
-
|
30
29
|
FIELDS.each do |field|
|
31
|
-
|
32
|
-
)
|
30
|
+
instance_variable_set(:"@#{field}", notification.fetch(field.to_s, nil))
|
33
31
|
end
|
34
32
|
end
|
35
33
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
34
|
+
%i(
|
35
|
+
sent_at
|
36
|
+
created_at
|
37
|
+
completed_at
|
38
|
+
).each do |field|
|
41
39
|
define_method field do
|
42
40
|
begin
|
43
41
|
value = instance_variable_get(:"@#{field}")
|
@@ -47,7 +45,6 @@ module Notifications
|
|
47
45
|
end
|
48
46
|
end
|
49
47
|
end
|
50
|
-
|
51
48
|
end
|
52
49
|
end
|
53
50
|
end
|
@@ -1,25 +1,21 @@
|
|
1
1
|
module Notifications
|
2
2
|
class Client
|
3
3
|
class ResponseNotification
|
4
|
-
FIELDS =
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
4
|
+
FIELDS = %i(
|
5
|
+
id
|
6
|
+
reference
|
7
|
+
content
|
8
|
+
template
|
9
|
+
uri
|
10
|
+
).freeze
|
12
11
|
|
13
12
|
attr_reader(*FIELDS)
|
14
13
|
|
15
14
|
def initialize(notification)
|
16
|
-
|
17
15
|
FIELDS.each do |field|
|
18
|
-
|
19
|
-
)
|
16
|
+
instance_variable_set(:"@#{field}", notification.fetch(field.to_s, nil))
|
20
17
|
end
|
21
18
|
end
|
22
|
-
|
23
19
|
end
|
24
20
|
end
|
25
21
|
end
|
@@ -1,41 +1,38 @@
|
|
1
1
|
module Notifications
|
2
2
|
class Client
|
3
3
|
class Template
|
4
|
-
FIELDS =
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
4
|
+
FIELDS = %i(
|
5
|
+
id
|
6
|
+
type
|
7
|
+
created_at
|
8
|
+
updated_at
|
9
|
+
created_by
|
10
|
+
version
|
11
|
+
body
|
12
|
+
subject
|
13
|
+
).freeze
|
14
14
|
|
15
|
-
|
15
|
+
attr_reader(*FIELDS)
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
[
|
26
|
-
:created_at,
|
27
|
-
:updated_at
|
28
|
-
].each do |field|
|
29
|
-
define_method field do
|
30
|
-
begin
|
31
|
-
value = instance_variable_get(:"@#{field}")
|
32
|
-
Time.parse value
|
33
|
-
rescue
|
34
|
-
value
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
17
|
+
def initialize(notification)
|
18
|
+
FIELDS.each do |field|
|
19
|
+
instance_variable_set(:"@#{field}", notification.fetch(field.to_s, nil))
|
20
|
+
end
|
21
|
+
end
|
38
22
|
|
23
|
+
%i(
|
24
|
+
created_at
|
25
|
+
updated_at
|
26
|
+
).each do |field|
|
27
|
+
define_method field do
|
28
|
+
begin
|
29
|
+
value = instance_variable_get(:"@#{field}")
|
30
|
+
Time.parse value
|
31
|
+
rescue
|
32
|
+
value
|
39
33
|
end
|
40
34
|
end
|
41
35
|
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -24,7 +24,7 @@ module Notifications
|
|
24
24
|
end
|
25
25
|
|
26
26
|
##
|
27
|
-
# @param kind [String] 'email' or '
|
27
|
+
# @param kind [String] 'email', 'sms' or 'letter'
|
28
28
|
# @param form_data [Hash]
|
29
29
|
# @option form_data [String] :phone_number
|
30
30
|
# phone number of the sms recipient
|
@@ -89,7 +89,7 @@ module Notifications
|
|
89
89
|
perform_request!(request)
|
90
90
|
end
|
91
91
|
|
92
|
-
|
92
|
+
private
|
93
93
|
|
94
94
|
##
|
95
95
|
# @return [Hash] JSON parsed response
|
@@ -1,23 +1,21 @@
|
|
1
1
|
module Notifications
|
2
2
|
class Client
|
3
3
|
class TemplatePreview
|
4
|
-
FIELDS =
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
4
|
+
FIELDS = %i(
|
5
|
+
id
|
6
|
+
version
|
7
|
+
body
|
8
|
+
subject
|
9
|
+
type
|
10
|
+
).freeze
|
11
11
|
|
12
|
-
|
12
|
+
attr_reader(*FIELDS)
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
end
|
20
|
-
end
|
14
|
+
def initialize(notification)
|
15
|
+
FIELDS.each do |field|
|
16
|
+
instance_variable_set(:"@#{field}", notification.fetch(field.to_s, nil))
|
17
|
+
end
|
18
|
+
end
|
21
19
|
end
|
22
20
|
end
|
23
21
|
end
|
data/lib/notifications/client.rb
CHANGED
@@ -41,6 +41,15 @@ module Notifications
|
|
41
41
|
)
|
42
42
|
end
|
43
43
|
|
44
|
+
##
|
45
|
+
# @see Notifications::Client::Speaker#post
|
46
|
+
# @return [ResponseNotification]
|
47
|
+
def send_letter(args)
|
48
|
+
ResponseNotification.new(
|
49
|
+
speaker.post("letter", args)
|
50
|
+
)
|
51
|
+
end
|
52
|
+
|
44
53
|
##
|
45
54
|
# @param id [String]
|
46
55
|
# @see Notifications::Client::Speaker#get
|
@@ -112,6 +121,5 @@ module Notifications
|
|
112
121
|
speaker.post_with_url(path, options)
|
113
122
|
)
|
114
123
|
end
|
115
|
-
|
116
124
|
end
|
117
125
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: notifications-ruby-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Government Digital Service
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-08-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jwt
|
@@ -94,20 +94,6 @@ dependencies:
|
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '4.7'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: govuk-lint
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - "~>"
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: 1.1.0
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - "~>"
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: 1.1.0
|
111
97
|
description:
|
112
98
|
email:
|
113
99
|
- notify@digital.cabinet-office.gov.uk
|
@@ -159,7 +145,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
159
145
|
version: '0'
|
160
146
|
requirements: []
|
161
147
|
rubyforge_project:
|
162
|
-
rubygems_version: 2.
|
148
|
+
rubygems_version: 2.5.1
|
163
149
|
signing_key:
|
164
150
|
specification_version: 4
|
165
151
|
summary: Ruby client for GOV.UK Notifications API
|