notifications-ruby-client 2.0.0 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -0
- data/Makefile +3 -3
- data/README.md +263 -28
- data/bin/test_client.rb +95 -46
- data/docker/Makefile +1 -1
- data/lib/notifications/client.rb +47 -0
- data/lib/notifications/client/response_template.rb +41 -0
- data/lib/notifications/client/speaker.rb +29 -0
- data/lib/notifications/client/template_collection.rb +16 -0
- data/lib/notifications/client/template_preview.rb +23 -0
- data/lib/notifications/client/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2e9bb7eef63e23bb6ffd7f6f35c9659791a6501c
|
4
|
+
data.tar.gz: 540c6b9214bccc51b8c0e1ada26562b30103870d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e297db99fcb11ecb4f7d88fe9670230c83fd92f891a30b3498407eb7b305d9a3333cabeec5b1413bf257d3df8e014cc035e2683b714411b0ca0ea526e8f13afe
|
7
|
+
data.tar.gz: c76a4aecc6513919f80895d45ecb8124f7c47d379120db61981059108b5cb9075ddb53f7c951a50813d7a15c2449d03e99f26b9b208957cfa743af5e77eedf88
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
##2.1.0
|
2
|
+
|
3
|
+
###Changed
|
4
|
+
* Added methods to get templates and generate a preview of a template.
|
5
|
+
* `get_template_by_id` - get the latest version of a template by id.
|
6
|
+
* `get_template_version` - get the template by id and version.
|
7
|
+
* `get_all_templates` - get all templates, can be filtered by template type.
|
8
|
+
* `generate_template_preview` - get the contents of a template with the placeholders replaced with the given personalisation.
|
9
|
+
* See the README for more information about the new template methods.
|
10
|
+
|
11
|
+
|
1
12
|
##2.0.0
|
2
13
|
|
3
14
|
###Changed
|
data/Makefile
CHANGED
@@ -38,7 +38,7 @@ prepare-docker-runner-image: ## Prepare the Docker builder image
|
|
38
38
|
build-with-docker: prepare-docker-runner-image ## Build inside a Docker container
|
39
39
|
docker run -i --rm \
|
40
40
|
--name "${DOCKER_CONTAINER_PREFIX}-build" \
|
41
|
-
-v `pwd`:/var/project \
|
41
|
+
-v "`pwd`:/var/project" \
|
42
42
|
-e http_proxy="${HTTP_PROXY}" \
|
43
43
|
-e HTTP_PROXY="${HTTP_PROXY}" \
|
44
44
|
-e https_proxy="${HTTPS_PROXY}" \
|
@@ -51,7 +51,7 @@ build-with-docker: prepare-docker-runner-image ## Build inside a Docker containe
|
|
51
51
|
test-with-docker: prepare-docker-runner-image generate-env-file ## Run tests inside a Docker container
|
52
52
|
docker run -i --rm \
|
53
53
|
--name "${DOCKER_CONTAINER_PREFIX}-test" \
|
54
|
-
-v `pwd`:/var/project \
|
54
|
+
-v "`pwd`:/var/project" \
|
55
55
|
-e http_proxy="${HTTP_PROXY}" \
|
56
56
|
-e HTTP_PROXY="${HTTP_PROXY}" \
|
57
57
|
-e https_proxy="${HTTPS_PROXY}" \
|
@@ -65,7 +65,7 @@ test-with-docker: prepare-docker-runner-image generate-env-file ## Run tests ins
|
|
65
65
|
integration-test-with-docker: prepare-docker-runner-image generate-env-file ## Run integration tests inside a Docker container
|
66
66
|
docker run -i --rm \
|
67
67
|
--name "${DOCKER_CONTAINER_PREFIX}-integration-test" \
|
68
|
-
-v `pwd`:/var/project \
|
68
|
+
-v "`pwd`:/var/project" \
|
69
69
|
-e http_proxy="${HTTP_PROXY}" \
|
70
70
|
-e HTTP_PROXY="${HTTP_PROXY}" \
|
71
71
|
-e https_proxy="${HTTPS_PROXY}" \
|
data/README.md
CHANGED
@@ -29,13 +29,15 @@ Text message:
|
|
29
29
|
|
30
30
|
```ruby
|
31
31
|
require 'notifications/client/response_notification'
|
32
|
-
sms = client.send_sms(
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
32
|
+
sms = client.send_sms(
|
33
|
+
phone_number: number,
|
34
|
+
template_id: template_id,
|
35
|
+
personalisation: {
|
36
|
+
name: "name",
|
37
|
+
year: "2016",
|
38
|
+
}
|
39
|
+
reference: "your_reference_string"
|
40
|
+
) # => Notifications::Client::ResponseNotification
|
39
41
|
```
|
40
42
|
|
41
43
|
<details>
|
@@ -118,13 +120,15 @@ Email:
|
|
118
120
|
|
119
121
|
```ruby
|
120
122
|
require 'notifications/client/response_notification'
|
121
|
-
email = client.send_email(
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
123
|
+
email = client.send_email(
|
124
|
+
email_address: email_address,
|
125
|
+
template_id: template_id,
|
126
|
+
personalisation: {
|
127
|
+
name: "name",
|
128
|
+
year: "2016"
|
129
|
+
},
|
130
|
+
reference: "your_reference_string"
|
131
|
+
) # => Notifications::Client::ResponseNotification
|
128
132
|
```
|
129
133
|
|
130
134
|
<details>
|
@@ -139,7 +143,7 @@ email => Notifications::Client::ResponseNotification
|
|
139
143
|
|
140
144
|
email.id # => uuid for the notification
|
141
145
|
email.reference # => Reference string you supplied in the request
|
142
|
-
email.type # =>
|
146
|
+
email.type # => email
|
143
147
|
email.status # => status of the message "created|pending|sent|delivered|permanent-failure|temporary-failure"
|
144
148
|
email.content # => Hash containing body => the message sent to the recipient, with placeholders replaced.
|
145
149
|
# subject => subject of the message sent to the recipient, with placeholders replaced.
|
@@ -222,10 +226,10 @@ You can omit this argument if you do not require a reference for the notificatio
|
|
222
226
|
If the template has placeholders you need to provide their values as a Hash, for example:
|
223
227
|
|
224
228
|
```ruby
|
225
|
-
personalisation
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
+
personalisation: {
|
230
|
+
'first_name' => 'Amala',
|
231
|
+
'reference_number' => '300241',
|
232
|
+
}
|
229
233
|
```
|
230
234
|
|
231
235
|
You can omit this argument if the template does not contain placeholders.
|
@@ -306,12 +310,12 @@ Otherwise a `Notification::Client::RequestError` is raised
|
|
306
310
|
|
307
311
|
```ruby
|
308
312
|
# See section below for a description of the arguments.
|
309
|
-
args =
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
313
|
+
args = {
|
314
|
+
'template_type' => 'sms',
|
315
|
+
'status' => 'failed',
|
316
|
+
'reference' => 'your reference string'
|
317
|
+
'olderThanId' => 'e194efd1-c34d-49c9-9915-e4267e01e92e' # => Notifications::Client::Notification
|
318
|
+
}
|
315
319
|
notifications = client.get_notifications(args)
|
316
320
|
```
|
317
321
|
<details>
|
@@ -321,10 +325,11 @@ Response
|
|
321
325
|
If the request is successful a `Notifications::Client::NotificationsCollection` is returned.
|
322
326
|
|
323
327
|
```ruby
|
324
|
-
notifications.links # => Hash containing current=>"/notifications?template_type=sms&status=delivered"
|
325
|
-
next=>"/notifications?other_than=last_id_in_list&template_type=sms&status=delivered"
|
328
|
+
notifications.links # => Hash containing current => "/notifications?template_type=sms&status=delivered"
|
329
|
+
# next => "/notifications?other_than=last_id_in_list&template_type=sms&status=delivered"
|
326
330
|
notifications.collection # => [] (array of notification objects)
|
327
331
|
```
|
332
|
+
|
328
333
|
Otherwise the client will raise a `Notifications::Client::RequestError`:
|
329
334
|
<table>
|
330
335
|
<thead>
|
@@ -341,7 +346,7 @@ Otherwise the client will raise a `Notifications::Client::RequestError`:
|
|
341
346
|
<td>
|
342
347
|
<pre>
|
343
348
|
[{
|
344
|
-
|
349
|
+
'error': 'ValidationError',
|
345
350
|
'message': 'bad status is not one of [created, sending, delivered, pending, failed, technical-failure, temporary-failure, permanent-failure]'
|
346
351
|
}]
|
347
352
|
</pre>
|
@@ -399,3 +404,233 @@ You can omit this argument to ignore the filter.
|
|
399
404
|
#### `olderThanId`
|
400
405
|
You can get the notifications older than a given `Notification.id`.
|
401
406
|
You can omit this argument to ignore this filter.
|
407
|
+
|
408
|
+
|
409
|
+
## Get a template by ID
|
410
|
+
This will return the latest version of the template. Use [getTemplateVersion](#get-a-template-by-id-and-version) to retrieve a specific template version.
|
411
|
+
|
412
|
+
```ruby
|
413
|
+
template = client.get_template_by_id(template_id)
|
414
|
+
```
|
415
|
+
|
416
|
+
<details>
|
417
|
+
<summary>
|
418
|
+
Response
|
419
|
+
</summary>
|
420
|
+
|
421
|
+
```Ruby
|
422
|
+
template.id # => uuid for the template
|
423
|
+
template.type # => type of template one of email|sms|letter
|
424
|
+
template.created_at # => date and time the template was created
|
425
|
+
template.updated_at # => date and time the template was last updated, may be null if version 1
|
426
|
+
template.created_by # => email address of the person that created the template
|
427
|
+
template.version # => version of the template
|
428
|
+
template.body # => content of the template
|
429
|
+
template.subject # => subject for email templates, will be empty for other template types
|
430
|
+
```
|
431
|
+
|
432
|
+
Otherwise the client will raise a `Notifications::Client::RequestError`.
|
433
|
+
|
434
|
+
<table>
|
435
|
+
<thead>
|
436
|
+
<tr>
|
437
|
+
<th>message</th>
|
438
|
+
</tr>
|
439
|
+
</thead>
|
440
|
+
<tbody>
|
441
|
+
<tr>
|
442
|
+
<td>
|
443
|
+
<pre>
|
444
|
+
Status code: 404 {
|
445
|
+
"errors":
|
446
|
+
[{
|
447
|
+
"error": "NoResultFound",
|
448
|
+
"message": "No result found"
|
449
|
+
}]
|
450
|
+
}
|
451
|
+
</pre>
|
452
|
+
<pre>
|
453
|
+
Status code: 400 {
|
454
|
+
"errors":
|
455
|
+
[{
|
456
|
+
"error": "ValidationError",
|
457
|
+
"message": "id is not a valid UUID"
|
458
|
+
}]
|
459
|
+
}
|
460
|
+
</pre>
|
461
|
+
</tbody>
|
462
|
+
</table>
|
463
|
+
</details>
|
464
|
+
|
465
|
+
### Arguments
|
466
|
+
|
467
|
+
#### `templateId`
|
468
|
+
The template id is visible on the template page in the application.
|
469
|
+
|
470
|
+
|
471
|
+
## Get a template by ID and version
|
472
|
+
This will return the template for the given id and version.
|
473
|
+
|
474
|
+
```ruby
|
475
|
+
Template template = client.get_template_version(template_id template_id, version)
|
476
|
+
```
|
477
|
+
|
478
|
+
<details>
|
479
|
+
<summary>
|
480
|
+
Response
|
481
|
+
</summary>
|
482
|
+
|
483
|
+
```Ruby
|
484
|
+
template.id # => uuid for the template
|
485
|
+
template.type # => type of template one of email|sms|letter
|
486
|
+
template.created_at # => date and time the template was created
|
487
|
+
template.updated_at # => date and time the template was last updated, may be null if version 1
|
488
|
+
template.created_by # => email address of the person that created the template
|
489
|
+
template.version # => version of the template
|
490
|
+
template.body # => content of the template
|
491
|
+
template.subject # => subject for email templates, will be empty for other template types
|
492
|
+
```
|
493
|
+
|
494
|
+
Otherwise the client will raise a `Notifications::Client::RequestError`.
|
495
|
+
|
496
|
+
<table>
|
497
|
+
<thead>
|
498
|
+
<tr>
|
499
|
+
<th>message</th>
|
500
|
+
</tr>
|
501
|
+
</thead>
|
502
|
+
<tbody>
|
503
|
+
<tr>
|
504
|
+
<td>
|
505
|
+
<pre>
|
506
|
+
Status code: 404 {
|
507
|
+
"errors":
|
508
|
+
[{
|
509
|
+
"error": "NoResultFound",
|
510
|
+
"message": "No result found"
|
511
|
+
}]
|
512
|
+
}
|
513
|
+
</pre>
|
514
|
+
<pre>
|
515
|
+
Status code: 400 {
|
516
|
+
"errors":
|
517
|
+
[{
|
518
|
+
"error": "ValidationError",
|
519
|
+
"message": "id is not a valid UUID"
|
520
|
+
}]
|
521
|
+
}
|
522
|
+
</pre>
|
523
|
+
</tbody>
|
524
|
+
</table>
|
525
|
+
</details>
|
526
|
+
|
527
|
+
### Arguments
|
528
|
+
|
529
|
+
#### `templateId`
|
530
|
+
The template id is visible on the template page in the application.
|
531
|
+
|
532
|
+
#### `version`
|
533
|
+
A history of the template is kept. There is a link to `See previous versions` on the template page in the application.
|
534
|
+
|
535
|
+
## Get all templates
|
536
|
+
This will return the latest version of each template for your service.
|
537
|
+
|
538
|
+
```ruby
|
539
|
+
args = {
|
540
|
+
'template_type' => 'sms'
|
541
|
+
}
|
542
|
+
templates = client.get_all_templates(args)
|
543
|
+
```
|
544
|
+
|
545
|
+
<details>
|
546
|
+
<summary>
|
547
|
+
Response
|
548
|
+
</summary>
|
549
|
+
|
550
|
+
```ruby
|
551
|
+
TemplateCollection templates;
|
552
|
+
```
|
553
|
+
If the response is successful, a TemplateCollection is returned.
|
554
|
+
|
555
|
+
If no templates exist for a template type or there no templates for a service, the templates list will be empty.
|
556
|
+
|
557
|
+
Otherwise the client will raise a `Notifications::Client::RequestError`.
|
558
|
+
|
559
|
+
|
560
|
+
</details>
|
561
|
+
|
562
|
+
### Arguments
|
563
|
+
|
564
|
+
#### `templateType`
|
565
|
+
You can filter the templates by the following options:
|
566
|
+
|
567
|
+
* `email`
|
568
|
+
* `sms`
|
569
|
+
* `letter`
|
570
|
+
You can omit this argument to ignore this filter.
|
571
|
+
|
572
|
+
|
573
|
+
## Generate a preview template
|
574
|
+
This will return the contents of a template with the placeholders replaced with the given personalisation.
|
575
|
+
```ruby
|
576
|
+
templatePreview = client.generate_template_preview(template_id: template_id,
|
577
|
+
personalisation: {
|
578
|
+
name: "name",
|
579
|
+
year: "2016",
|
580
|
+
})
|
581
|
+
```
|
582
|
+
|
583
|
+
<details>
|
584
|
+
<summary>
|
585
|
+
Response
|
586
|
+
</summary>
|
587
|
+
|
588
|
+
|
589
|
+
```Ruby
|
590
|
+
template.id # => uuid for the template
|
591
|
+
template.version # => version of the template
|
592
|
+
template.body # => content of the template
|
593
|
+
template.subject # => subject for email templates, will be empty for other template types
|
594
|
+
```
|
595
|
+
|
596
|
+
|
597
|
+
Otherwise a `Notifications::Client::RequestError` is thrown.
|
598
|
+
<table>
|
599
|
+
<thead>
|
600
|
+
<tr>
|
601
|
+
<th>message</th>
|
602
|
+
</tr>
|
603
|
+
</thead>
|
604
|
+
<tbody>
|
605
|
+
<tr>
|
606
|
+
<td>
|
607
|
+
<pre>
|
608
|
+
Status code: 404 {
|
609
|
+
"errors":
|
610
|
+
[{
|
611
|
+
"error": "NoResultFound",
|
612
|
+
"message": "No result found"
|
613
|
+
}]
|
614
|
+
}
|
615
|
+
</pre>
|
616
|
+
<pre>
|
617
|
+
Status code: 400 {
|
618
|
+
"errors":
|
619
|
+
[{
|
620
|
+
"error": "ValidationError",
|
621
|
+
"message": "id is not a valid UUID"
|
622
|
+
}]
|
623
|
+
}
|
624
|
+
</pre>
|
625
|
+
</tbody>
|
626
|
+
</table>
|
627
|
+
|
628
|
+
</details>
|
629
|
+
|
630
|
+
### Arguments
|
631
|
+
|
632
|
+
#### `templateId`
|
633
|
+
The template id is visible on the template page in the application.
|
634
|
+
|
635
|
+
#### `personalisation`
|
636
|
+
If a template has placeholders, you need to provide their values. `personalisation` can be an empty or null in which case no placeholders are provided for the notification.
|
data/bin/test_client.rb
CHANGED
@@ -3,18 +3,92 @@ require 'notifications/client'
|
|
3
3
|
require 'notifications/client/notification'
|
4
4
|
require 'notifications/client/response_notification'
|
5
5
|
require 'notifications/client/notification'
|
6
|
+
require 'notifications/client/response_template'
|
7
|
+
require 'notifications/client/template_collection'
|
6
8
|
|
7
9
|
def main
|
8
10
|
client = Notifications::Client.new(ENV['API_KEY'], ENV['NOTIFY_API_URL'])
|
11
|
+
test_get_template_by_id(client, ENV['EMAIL_TEMPLATE_ID'])
|
12
|
+
test_get_template_version(client, ENV['SMS_TEMPLATE_ID'], 1)
|
13
|
+
test_get_all_templates(client)
|
14
|
+
test_get_all_templates_filter_by_type(client)
|
15
|
+
test_generate_template_preview(client, ENV['EMAIL_TEMPLATE_ID'])
|
9
16
|
email_notification = test_send_email_endpoint(client)
|
10
17
|
sms_notification = test_send_sms_endpoint(client)
|
11
18
|
test_get_notification_by_id_endpoint(client, email_notification.id, 'email')
|
12
19
|
test_get_notification_by_id_endpoint(client, sms_notification.id, 'sms')
|
13
|
-
test_get_all_notifications(client
|
20
|
+
test_get_all_notifications(client)
|
14
21
|
p 'ruby client integration tests pass'
|
15
22
|
exit 0
|
16
23
|
end
|
17
24
|
|
25
|
+
def test_get_template_by_id(client, id)
|
26
|
+
response = client.get_template_by_id(id)
|
27
|
+
test_template_response(response, 'test_get_template_by_id')
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_get_template_version(client, id, version)
|
31
|
+
response = client.get_template_version(id, version)
|
32
|
+
test_template_response(response, 'test_get_template_version')
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_get_all_templates(client)
|
36
|
+
response = client.get_all_templates()
|
37
|
+
unless response.is_a?(Notifications::Client::TemplateCollection) then
|
38
|
+
p 'failed test_get_all_templates response is not a Notifications::Client::TemplateCollection'
|
39
|
+
exit 1
|
40
|
+
end
|
41
|
+
unless response.collection.length >= 2 then
|
42
|
+
p 'failed test_get_all_templates, expected at least 2 templates returned.'
|
43
|
+
exit 1
|
44
|
+
end
|
45
|
+
test_template_response(response.collection[0], 'test_get_all_templates')
|
46
|
+
test_template_response(response.collection[1], 'test_get_all_templates')
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_get_all_templates_filter_by_type(client)
|
50
|
+
response = client.get_all_templates({'type' => 'sms'})
|
51
|
+
unless response.is_a?(Notifications::Client::TemplateCollection) then
|
52
|
+
p 'failed test_get_all_templates response is not a Notifications::Client::TemplateCollection'
|
53
|
+
exit 1
|
54
|
+
end
|
55
|
+
unless response.collection.length >= 1 then
|
56
|
+
p 'failed test_get_all_templates, expected at least 2 templates returned.'
|
57
|
+
exit 1
|
58
|
+
end
|
59
|
+
test_template_response(response.collection[0], 'test_get_all_templates')
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_generate_template_preview(client, id)
|
63
|
+
|
64
|
+
response = client.generate_template_preview(id, personalisation:Hash["name", "some name"])
|
65
|
+
test_template_preview(response)
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_template_response(response, test_method)
|
69
|
+
unless response.is_a?(Notifications::Client::Template) then
|
70
|
+
p 'failed test_get_template_by_id response is not a Notifications::Client::Template'
|
71
|
+
exit 1
|
72
|
+
end
|
73
|
+
unless response.id.is_a?(String) then
|
74
|
+
p 'failed template id is not a String'
|
75
|
+
exit 1
|
76
|
+
end
|
77
|
+
field_should_not_be_nil(expected_fields_in_template_response, response, test_method)
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_template_preview(response)
|
81
|
+
unless response.is_a?(Notifications::Client::TemplatePreview) then
|
82
|
+
p 'failed test_generate_template_preview response is not a Notifications::Client::TemplatePreview'
|
83
|
+
exit 1
|
84
|
+
end
|
85
|
+
unless response.id.is_a?(String) then
|
86
|
+
p 'failed template id is not a String'
|
87
|
+
exit 1
|
88
|
+
end
|
89
|
+
field_should_not_be_nil(expected_fields_in_template_preview, response, 'generate_template_preview')
|
90
|
+
end
|
91
|
+
|
18
92
|
def test_send_email_endpoint(client)
|
19
93
|
email_resp = client.send_email(email_address: ENV['FUNCTIONAL_TEST_EMAIL'], template_id: ENV['EMAIL_TEMPLATE_ID'],
|
20
94
|
personalisation:Hash["name", "some name"],
|
@@ -52,7 +126,8 @@ def test_notification_response_data_type(notification, message_type)
|
|
52
126
|
end
|
53
127
|
|
54
128
|
def test_get_notification_by_id_endpoint(client, id, message_type)
|
55
|
-
get_notification_response =
|
129
|
+
get_notification_response = client.get_notification(id)
|
130
|
+
|
56
131
|
unless get_notification_response.is_a?(Notifications::Client::Notification) then
|
57
132
|
p 'get notification is not a Notifications::Client::Notification for id ' + id
|
58
133
|
exit 1
|
@@ -71,35 +146,6 @@ def test_get_notification_by_id_endpoint(client, id, message_type)
|
|
71
146
|
end
|
72
147
|
|
73
148
|
|
74
|
-
def get_notification_for_id(client, id, message_type)
|
75
|
-
max_attempts = 0
|
76
|
-
wait_for_sent_message = true
|
77
|
-
while max_attempts < 3 && wait_for_sent_message
|
78
|
-
begin
|
79
|
-
get_notification_response = client.get_notification(id)
|
80
|
-
wait_for_sent_message = false
|
81
|
-
rescue Notifications::Client::RequestError => no_result
|
82
|
-
if no_result.message == "No result found"
|
83
|
-
max_attempts = max_attempts + 1
|
84
|
-
sleep 3
|
85
|
-
else
|
86
|
-
p 'get_notification threw an exception for the ' + message_type + ' notification'
|
87
|
-
p no_result.to_s
|
88
|
-
exit 1
|
89
|
-
end
|
90
|
-
end
|
91
|
-
if get_notification_response != nil && get_notification_response.send(:'status') == 'created'
|
92
|
-
# we want to test the sent response?
|
93
|
-
wait_for_sent_message = true
|
94
|
-
end
|
95
|
-
end
|
96
|
-
if max_attempts == 3 then
|
97
|
-
p 'get_notification failed because the ' + message_type + ' notification was not found'
|
98
|
-
exit 1
|
99
|
-
end
|
100
|
-
get_notification_response
|
101
|
-
end
|
102
|
-
|
103
149
|
def hash_key_should_not_be_nil(fields, obj, method_name)
|
104
150
|
fields.each do |field|
|
105
151
|
if obj.has_value?(:"#{field}") then
|
@@ -127,6 +173,23 @@ def field_should_be_nil(fields, obj, method_name)
|
|
127
173
|
end
|
128
174
|
end
|
129
175
|
|
176
|
+
def expected_fields_in_template_response
|
177
|
+
%w(id
|
178
|
+
type
|
179
|
+
created_at
|
180
|
+
created_by
|
181
|
+
body
|
182
|
+
version
|
183
|
+
)
|
184
|
+
end
|
185
|
+
|
186
|
+
def expected_fields_in_template_preview
|
187
|
+
%w(id
|
188
|
+
body
|
189
|
+
version
|
190
|
+
type
|
191
|
+
)
|
192
|
+
end
|
130
193
|
|
131
194
|
def expected_fields_in_notification_response
|
132
195
|
%w(id
|
@@ -151,11 +214,9 @@ end
|
|
151
214
|
|
152
215
|
def expected_fields_in_email_notification
|
153
216
|
%w(id
|
154
|
-
reference
|
155
217
|
email_address
|
156
218
|
type
|
157
219
|
status
|
158
|
-
sent_at
|
159
220
|
template
|
160
221
|
body
|
161
222
|
subject
|
@@ -181,7 +242,6 @@ def expected_fields_in_sms_notification
|
|
181
242
|
phone_number
|
182
243
|
type
|
183
244
|
status
|
184
|
-
sent_at
|
185
245
|
template
|
186
246
|
body
|
187
247
|
created_at
|
@@ -207,24 +267,13 @@ def expected_fields_in_template
|
|
207
267
|
uri)
|
208
268
|
end
|
209
269
|
|
210
|
-
def test_get_all_notifications(client
|
270
|
+
def test_get_all_notifications(client)
|
211
271
|
notifications = client.get_notifications()
|
212
272
|
unless notifications.is_a?(Notifications::Client::NotificationsCollection) then
|
213
273
|
p 'get all notifications is not Notifications::Client::NotificationsCollection'
|
214
274
|
exit 1
|
215
275
|
end
|
216
|
-
|
217
276
|
field_should_not_be_nil(expected_fields_for_get_all_notifications, notifications, 'get_notifications')
|
218
|
-
|
219
|
-
notification_collection = notifications.send(:'collection')
|
220
|
-
unless notification_collection[0].id == first_id then
|
221
|
-
p 'first item in notification_collection is not the expected notification, last message sent'
|
222
|
-
exit 0
|
223
|
-
end
|
224
|
-
unless notification_collection[1].id == second_id then
|
225
|
-
p 'second item in notification_collection is not the expected notification, second last message sent'
|
226
|
-
exit 0
|
227
|
-
end
|
228
277
|
end
|
229
278
|
|
230
279
|
def expected_fields_for_get_all_notifications
|
data/docker/Makefile
CHANGED
data/lib/notifications/client.rb
CHANGED
@@ -3,6 +3,9 @@ require "notifications/client/speaker"
|
|
3
3
|
require "notifications/client/notification"
|
4
4
|
require "notifications/client/response_notification"
|
5
5
|
require "notifications/client/notifications_collection"
|
6
|
+
require "notifications/client/response_template"
|
7
|
+
require "notifications/client/template_collection"
|
8
|
+
require "notifications/client/template_preview"
|
6
9
|
require "forwardable"
|
7
10
|
|
8
11
|
module Notifications
|
@@ -66,5 +69,49 @@ module Notifications
|
|
66
69
|
speaker.get(nil, options)
|
67
70
|
)
|
68
71
|
end
|
72
|
+
|
73
|
+
##
|
74
|
+
# @param id [String]
|
75
|
+
# @return [Template]
|
76
|
+
def get_template_by_id(id, options = {})
|
77
|
+
path = "/v2/template/" << id
|
78
|
+
Template.new(
|
79
|
+
speaker.get_with_url(path, options)
|
80
|
+
)
|
81
|
+
end
|
82
|
+
|
83
|
+
##
|
84
|
+
# @param id [String]
|
85
|
+
# @param version [int]
|
86
|
+
# @return [Template]
|
87
|
+
def get_template_version(id, version, options = {})
|
88
|
+
path = "/v2/template/" << id << "/version/" << version.to_s
|
89
|
+
Template.new(
|
90
|
+
speaker.get_with_url(path, options)
|
91
|
+
)
|
92
|
+
end
|
93
|
+
|
94
|
+
##
|
95
|
+
# @option options [String] :type
|
96
|
+
# email, sms, letter
|
97
|
+
# @return [TemplateCollection]
|
98
|
+
def get_all_templates(options = {})
|
99
|
+
path = "/v2/templates"
|
100
|
+
TemplateCollection.new(
|
101
|
+
speaker.get_with_url(path, options)
|
102
|
+
)
|
103
|
+
end
|
104
|
+
|
105
|
+
##
|
106
|
+
# @param options [String]
|
107
|
+
# @option personalisation [Hash]
|
108
|
+
# @return [TemplatePreview]
|
109
|
+
def generate_template_preview(id, options = {})
|
110
|
+
path = "/v2/template/" << id << "/preview"
|
111
|
+
TemplatePreview.new(
|
112
|
+
speaker.post_with_url(path, options)
|
113
|
+
)
|
114
|
+
end
|
115
|
+
|
69
116
|
end
|
70
117
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Notifications
|
2
|
+
class Client
|
3
|
+
class Template
|
4
|
+
FIELDS = [
|
5
|
+
:id,
|
6
|
+
:type,
|
7
|
+
:created_at,
|
8
|
+
:updated_at,
|
9
|
+
:created_by,
|
10
|
+
:version,
|
11
|
+
:body,
|
12
|
+
:subject
|
13
|
+
].freeze
|
14
|
+
|
15
|
+
attr_reader(*FIELDS)
|
16
|
+
|
17
|
+
def initialize(notification)
|
18
|
+
|
19
|
+
FIELDS.each do |field|
|
20
|
+
instance_variable_set(:"@#{field}", notification.fetch(field.to_s, nil)
|
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
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -60,6 +60,35 @@ module Notifications
|
|
60
60
|
perform_request!(request)
|
61
61
|
end
|
62
62
|
|
63
|
+
##
|
64
|
+
# @param url path of endpoint
|
65
|
+
# @param id [String]
|
66
|
+
# @param options [Hash] query
|
67
|
+
# @see #perform_request!
|
68
|
+
def get_with_url(url, options = {})
|
69
|
+
path = url
|
70
|
+
path << "?" << URI.encode_www_form(options) if options.any?
|
71
|
+
request = Net::HTTP::Get.new(path, headers)
|
72
|
+
perform_request!(request)
|
73
|
+
end
|
74
|
+
|
75
|
+
##
|
76
|
+
# @param url [String] path of the endpoint
|
77
|
+
# @param form_data [Hash]
|
78
|
+
# @option form_data [String] :template_id
|
79
|
+
# id of the template to render
|
80
|
+
# @option form_data [Hash] :personalisation
|
81
|
+
# fields to use in the template
|
82
|
+
# @see #perform_request!
|
83
|
+
def post_with_url(url, form_data)
|
84
|
+
request = Net::HTTP::Post.new(
|
85
|
+
url,
|
86
|
+
headers
|
87
|
+
)
|
88
|
+
request.body = form_data.is_a?(Hash) ? form_data.to_json : form_data
|
89
|
+
perform_request!(request)
|
90
|
+
end
|
91
|
+
|
63
92
|
private
|
64
93
|
|
65
94
|
##
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Notifications
|
2
|
+
class Client
|
3
|
+
class TemplateCollection
|
4
|
+
attr_reader :collection
|
5
|
+
def initialize(response)
|
6
|
+
@collection = collection_from(response["templates"])
|
7
|
+
end
|
8
|
+
|
9
|
+
def collection_from(templates)
|
10
|
+
templates.map do |template|
|
11
|
+
Template.new(template)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Notifications
|
2
|
+
class Client
|
3
|
+
class TemplatePreview
|
4
|
+
FIELDS = [
|
5
|
+
:id,
|
6
|
+
:version,
|
7
|
+
:body,
|
8
|
+
:subject,
|
9
|
+
:type
|
10
|
+
].freeze
|
11
|
+
|
12
|
+
attr_reader(*FIELDS)
|
13
|
+
|
14
|
+
def initialize(notification)
|
15
|
+
|
16
|
+
FIELDS.each do |field|
|
17
|
+
instance_variable_set(:"@#{field}", notification.fetch(field.to_s, nil)
|
18
|
+
)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
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.1.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-05-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jwt
|
@@ -134,7 +134,10 @@ files:
|
|
134
134
|
- lib/notifications/client/notifications_collection.rb
|
135
135
|
- lib/notifications/client/request_error.rb
|
136
136
|
- lib/notifications/client/response_notification.rb
|
137
|
+
- lib/notifications/client/response_template.rb
|
137
138
|
- lib/notifications/client/speaker.rb
|
139
|
+
- lib/notifications/client/template_collection.rb
|
140
|
+
- lib/notifications/client/template_preview.rb
|
138
141
|
- lib/notifications/client/version.rb
|
139
142
|
- notifications-ruby-client.gemspec
|
140
143
|
homepage: https://github.com/alphagov/notifications-ruby-client
|