notifications-ruby-client 4.0.0 → 5.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3bb224294830c1d0d4c4d776597d7ce144ca14fb993500f432275188914ab4cb
4
- data.tar.gz: 94b010994127fbb3bcea06a408ec33587b3dbef34b8eaf404f6ece05d26eaf5b
3
+ metadata.gz: c8273dcafdfbd624d66c297df116923b57e7dbc336403f982c605a97842b4753
4
+ data.tar.gz: eedca7b3d118bea2476cedebb32c6c802ffb8322612ec1c97eb0bbb0bbe21408
5
5
  SHA512:
6
- metadata.gz: 3c9f30f36f38523e8c36a784b9780f434f3cc798b9e6824dcbfa06dd2fcb96802dff67c9dd2affe7c294243929ab734da477aea8c89dc39aa9646aba8e815966
7
- data.tar.gz: cd81acb5965952e29c3e5c26c6c5c6144b8a8eca2b60ee6e2a40e81789f839c2d7876dd7f2b492c157585e16f19f184b8bef0eb6aa23eb502bee89d53a2a6885
6
+ metadata.gz: 6cc4249443eb6e24751de8b9c7ac410afabd6b1235ae9cbde437984734602ba3b5466de56afa02143278d5fcef2425f5b7243792bf5bce9a5a0a917e7bd51fbf
7
+ data.tar.gz: 910a3f1e534c95a7d1fc547bcd4752eb439b73d54208819f735bdf540b48473e7455e20cbd3ee281429df063ddd049c99300f3ac800fa141010d7cf0830bf5ae
data/CHANGELOG.md CHANGED
@@ -1,3 +1,13 @@
1
+ ## 5.1.0
2
+
3
+ * Added new `get_pdf_for_letter` method
4
+ * accepts a notification id argument
5
+ * returns a string containing the final printable PDF for a precompiled or templated letter
6
+
7
+ ## 5.0.0
8
+
9
+ * Dropped support for Ruby 2.3. Official support for this version ended in March (https://www.ruby-lang.org/en/news/2019/03/31/support-of-ruby-2-3-has-ended/)
10
+
1
11
  ## 4.0.0
2
12
 
3
13
  * `RequestError.message` now returns a string, not an array of hashes – see https://github.com/alphagov/notifications-ruby-client/pull/72
data/DOCUMENTATION.md CHANGED
@@ -2,8 +2,6 @@
2
2
 
3
3
  This documentation is for developers interested in using the GOV.UK Notify Ruby client to send emails, text messages or letters.
4
4
 
5
- We recommend that you use this client library rather than use the [GOV.UK Notify API](https://github.com/alphagov/notifications-api) directly, as there is no documentation for using the API in this way.
6
-
7
5
  # Set up the client
8
6
 
9
7
  ## Install the client
@@ -25,7 +23,7 @@ require 'notifications/client'
25
23
  client = Notifications::Client.new(api_key)
26
24
  ```
27
25
 
28
- To get an API key, [sign in to GOV.UK Notify](https://www.notifications.service.gov.uk/) and go to the __API integration__ page. You can find more information in the [API keys](/ruby.html#api-keys) section of this documentation.
26
+ To get an API key, [sign in to GOV.UK Notify](https://www.notifications.service.gov.uk/) and go to the __API integration__ page. You can find more information in the [API keys](#api-keys) section of this documentation.
29
27
 
30
28
  # Send a message
31
29
 
@@ -67,7 +65,7 @@ If a template has placeholder fields for personalised information such as name o
67
65
  ```ruby
68
66
  personalisation: {
69
67
  name: "John Smith",
70
- ID: "300241",
68
+ ID: "300241",
71
69
  }
72
70
  ```
73
71
 
@@ -108,7 +106,7 @@ You can leave out this argument if your service only has one text message sender
108
106
 
109
107
  ### Response
110
108
 
111
- If the request to the client is successful, the client returns a `Notifications::Client:ResponseNotification` object. In the example shown in the [Method section](/ruby.html#method), the object is named `smsresponse`.
109
+ If the request to the client is successful, the client returns a `Notifications::Client:ResponseNotification` object. In the example shown in the [Method section](#method), the object is named `smsresponse`.
112
110
 
113
111
  You can then call different methods on this object:
114
112
 
@@ -120,7 +118,7 @@ You can then call different methods on this object:
120
118
  |`smsresponse.template`|Contains the `id`, `version` and `uri` of the template|Hash|
121
119
  |`smsresponse.uri`|Notification URL|String|
122
120
 
123
- If you are using the [test API key](/ruby.html#test), all your messages come back with a `delivered` status.
121
+ If you are using the [test API key](#test), all your messages come back with a `delivered` status.
124
122
 
125
123
  All messages sent using the [team and whitelist](#team-and-whitelist) or [live](#live) keys appear on your GOV.UK Notify dashboard.
126
124
 
@@ -130,12 +128,12 @@ If the request is not successful, the client returns a `Notifications::Client::R
130
128
 
131
129
  |error.code|error.message|class|How to fix|
132
130
  |:---|:---|:---|:---|
133
- |`400`|`BadRequestError: Can't send to this recipient using a team-only API key`|`BadRequestError`|Use the correct type of [API key](/ruby.html#api-keys)|
131
+ |`400`|`BadRequestError: Can't send to this recipient using a team-only API key`|`BadRequestError`|Use the correct type of [API key](#api-keys)|
134
132
  |`400`|`BadRequestError: Can't send to this recipient when service is in trial mode - see https://www.notifications.service.gov.uk/trial-mode`|`BadRequestError`|Your service cannot send this notification in [trial mode](https://www.notifications.service.gov.uk/features/using-notify#trial-mode)|
135
133
  |`403`|`AuthError: Error: Your system clock must be accurate to within 30 seconds`|`AuthError`|Check your system clock|
136
- |`403`|`AuthError: Invalid token: signature, api token not found`|`AuthError`|Use the correct API key. Refer to [API keys](/ruby.html#api-keys) for more information|
137
- |`429`|`RateLimitError: Exceeded rate limit for key type TEAM/TEST/LIVE of 3000 requests per 60 seconds`|`RateLimitError`|Refer to [API rate limits](/ruby.html#api-rate-limits) for more information|
138
- |`429`|`TooManyRequestsError: Exceeded send limits (LIMIT NUMBER) for today`|`ClientError`|Refer to [service limits](/ruby.html#service-limits) for the limit number|
134
+ |`403`|`AuthError: Invalid token: signature, api token not found`|`AuthError`|Use the correct API key. Refer to [API keys](#api-keys) for more information|
135
+ |`429`|`RateLimitError: Exceeded rate limit for key type TEAM/TEST/LIVE of 3000 requests per 60 seconds`|`RateLimitError`|Refer to [API rate limits](#api-rate-limits) for more information|
136
+ |`429`|`TooManyRequestsError: Exceeded send limits (LIMIT NUMBER) for today`|`ClientError`|Refer to [service limits](#service-limits) for the limit number|
139
137
  |`500`|`Exception: Internal server error`|`ServerError`|Notify was unable to process the request, resend your notification|
140
138
 
141
139
  ## Send an email
@@ -174,7 +172,7 @@ If a template has placeholder fields for personalised information such as name o
174
172
  ```ruby
175
173
  personalisation: {
176
174
  name: "John Smith",
177
- year: "2016"
175
+ year: "2016"
178
176
  }
179
177
  ```
180
178
 
@@ -209,13 +207,15 @@ email_reply_to_id: '8e222534-7f05-4972-86e3-17c5d9f894e2'
209
207
 
210
208
  You can leave out this argument if your service only has one email reply-to address, or you want to use the default email address.
211
209
 
212
- ## Send a document by email
210
+ ## Send a file by email
213
211
 
214
212
  Send files without the need for email attachments.
215
213
 
216
- This is an invitation-only feature. [Contact the GOV.UK Notify team](https://www.notifications.service.gov.uk/support) to enable this function for your service.
214
+ This is an invitation-only feature. [Contact the GOV.UK Notify team](https://www.notifications.service.gov.uk/support/ask-question-give-feedback) to enable this function for your service.
215
+
216
+ To send a file by email, add a placeholder field to the template then upload a file. The placeholder field will contain a secure link to download the file.
217
217
 
218
- To send a document by email, add a placeholder field to the template then upload a file. The placeholder field will contain a secure link to download the document.
218
+ The links are unique and unguessable. GOV.UK Notify cannot access or decrypt your file.
219
219
 
220
220
  ### Add a placeholder field to the template
221
221
 
@@ -223,11 +223,11 @@ To send a document by email, add a placeholder field to the template then upload
223
223
  1. Go to the __Templates__ page and select the relevant email template.
224
224
  1. Add a placeholder field to the email template using double brackets. For example:
225
225
 
226
- "Download your document at: ((link_to_document))"
226
+ "Download your file at: ((link_to_document))"
227
227
 
228
- ### Upload your document
228
+ ### Upload your file
229
229
 
230
- The document you upload must be a PDF file smaller than 2MB.
230
+ The file you upload must be a PDF file smaller than 2MB.
231
231
 
232
232
  1. Pass the file object as an argument to the `Notifications.prepare_upload` helper method.
233
233
  1. Pass the result into the personalisation argument.
@@ -247,7 +247,7 @@ end
247
247
 
248
248
  ### Response
249
249
 
250
- If the request to the client is successful, the client returns a `Notifications::Client:ResponseNotification` object. In the example shown in the [Method section](/ruby.html#send-an-email-method), the object is named `emailresponse`.
250
+ If the request to the client is successful, the client returns a `Notifications::Client:ResponseNotification` object. In the example shown in the [Method section](#send-an-email-method), the object is named `emailresponse`.
251
251
 
252
252
  You can then call different methods on this object to return the requested information.
253
253
 
@@ -265,15 +265,15 @@ If the request is not successful, the client returns a `Notifications::Client::R
265
265
 
266
266
  |error.code|error.message|class|How to fix|
267
267
  |:--- |:---|:---|:---|
268
- |`400`|`BadRequestError: Can't send to this recipient using a team-only API key`|`BadRequestError`|Use the correct type of [API key](/ruby.html#api-keys)|
268
+ |`400`|`BadRequestError: Can't send to this recipient using a team-only API key`|`BadRequestError`|Use the correct type of [API key](#api-keys)|
269
269
  |`400`|`BadRequestError: Can't send to this recipient when service is in trial mode - see https://www.notifications.service.gov.uk/trial-mode`|`BadRequestError`|Your service cannot send this notification in [trial mode](https://www.notifications.service.gov.uk/features/using-notify#trial-mode)|
270
270
  |`400`|`BadRequestError: Unsupported document type '{}'. Supported types are: {}`|`BadRequestError`|The document you upload must be a PDF file|
271
271
  |`400`|`BadRequestError: Document didn't pass the virus scan`|`BadRequestError`|The document you upload must be virus free|
272
272
  |`400`|`BadRequestError: Service is not allowed to send documents`|`BadRequestError`|Contact the GOV.UK Notify team|
273
273
  |`403`|`AuthError: Error: Your system clock must be accurate to within 30 seconds`|`AuthError`|Check your system clock|
274
- |`403`|`AuthError: Invalid token: signature, api token not found`|`AuthError`|Use the correct API key. Refer to [API keys](/ruby.html#api-keys) for more information|
275
- |`429`|`RateLimitError: Exceeded rate limit for key type TEAM/TEST/LIVE of 3000 requests per 60 seconds`|`RateLimitError`|Refer to [API rate limits](/ruby.html#api-rate-limits) for more information|
276
- |`429`|`TooManyRequestsError: Exceeded send limits (LIMIT NUMBER) for today`|`RateLimitError`|Refer to [service limits](/ruby.html#service-limits) for the limit number|
274
+ |`403`|`AuthError: Invalid token: signature, api token not found`|`AuthError`|Use the correct API key. Refer to [API keys](#api-keys) for more information|
275
+ |`429`|`RateLimitError: Exceeded rate limit for key type TEAM/TEST/LIVE of 3000 requests per 60 seconds`|`RateLimitError`|Refer to [API rate limits](#api-rate-limits) for more information|
276
+ |`429`|`TooManyRequestsError: Exceeded send limits (LIMIT NUMBER) for today`|`RateLimitError`|Refer to [service limits](#service-limits) for the limit number|
277
277
  |`500`|`Exception: Internal server error`|`ServerError`|Notify was unable to process the request, resend your notification|
278
278
  |-|`ArgumentError: Document is larger than 2MB")`|-|Document size was too large, upload a smaller document|
279
279
 
@@ -291,7 +291,7 @@ When your service first signs up to GOV.UK Notify, you’ll start in trial mode.
291
291
  letterresponse = client.send_letter(
292
292
  template_id: "f33517ff-2a88-4f6e-b855-c550268ce08a",
293
293
  personalisation: {
294
- address_line_1: 'The Occupier',
294
+ address_line_1: 'The Occupier',
295
295
  address_line_2: '123 High Street',
296
296
  postcode: 'SW14 6BH',
297
297
  },
@@ -352,7 +352,7 @@ reference: 'your_reference_string'
352
352
 
353
353
  ### Response
354
354
 
355
- If the request to the client is successful, the client returns a `Notifications::Client:ResponseNotification` object. In the example shown in the [Method section](/ruby.html#send-a-letter-method), the object is named `letterresponse`.
355
+ If the request to the client is successful, the client returns a `Notifications::Client:ResponseNotification` object. In the example shown in the [Method section](#send-a-letter-method), the object is named `letterresponse`.
356
356
 
357
357
  You can then call different methods on this object to return the requested information.
358
358
 
@@ -371,13 +371,13 @@ If the request is not successful, the client returns a `Notifications::Client::R
371
371
 
372
372
  |error.code|error.message|class|How to fix|
373
373
  |:--- |:---|:---|:---|
374
- |`400`|`BadRequestError: Cannot send letters with a team api key`|`BadRequestError`|Use the correct type of [API key](/ruby.html#api-keys)|
374
+ |`400`|`BadRequestError: Cannot send letters with a team api key`|`BadRequestError`|Use the correct type of [API key](#api-keys)|
375
375
  |`400`|`BadRequestError: Cannot send letters when service is in trial mode - see https://www.notifications.service.gov.uk/trial-mode`|`BadRequestError`|Your service cannot send this notification in [trial mode](https://www.notifications.service.gov.uk/features/using-notify#trial-mode)|
376
- |`400`|`ValidationError: personalisation address_line_1 is a required property`|`BadRequestError`|Ensure that your template has a field for the first line of the address, refer to [personalisation](/ruby.html#personalisation-required) for more information|
376
+ |`400`|`ValidationError: personalisation address_line_1 is a required property`|`BadRequestError`|Ensure that your template has a field for the first line of the address, refer to [personalisation](#personalisation-required) for more information|
377
377
  |`403`|`AuthError: Error: Your system clock must be accurate to within 30 seconds`|`AuthError`|Check your system clock|
378
- |`403`|`AuthError: Invalid token: signature, api token not found`|`AuthError`|Use the correct API key. Refer to [API keys](/ruby.html#api-keys) for more information|
379
- |`429`|`RateLimitError: Exceeded rate limit for key type TEAM/TEST/LIVE of 3000 requests per 60 seconds`|`RateLimitError`|Refer to [API rate limits](/ruby.html#api-rate-limits) for more information|
380
- |`429`|`TooManyRequestsError: Exceeded send limits (LIMIT NUMBER) for today`|`RateLimitError`|Refer to [service limits](/ruby.html#service-limits) for the limit number|
378
+ |`403`|`AuthError: Invalid token: signature, api token not found`|`AuthError`|Use the correct API key. Refer to [API keys](#api-keys) for more information|
379
+ |`429`|`RateLimitError: Exceeded rate limit for key type TEAM/TEST/LIVE of 3000 requests per 60 seconds`|`RateLimitError`|Refer to [API rate limits](#api-rate-limits) for more information|
380
+ |`429`|`TooManyRequestsError: Exceeded send limits (LIMIT NUMBER) for today`|`RateLimitError`|Refer to [service limits](#service-limits) for the limit number|
381
381
  |`500`|`Exception: Internal server error`|`ServerError`|Notify was unable to process the request, resend your notification|
382
382
 
383
383
  ## Send a precompiled letter
@@ -394,7 +394,7 @@ A unique identifier you create. This reference identifies a single unique notifi
394
394
 
395
395
  #### pdf_file (required)
396
396
 
397
- The precompiled letter must be a PDF file which meets [the GOV.UK Notify PDF letter specification](https://docs.notifications.service.gov.uk/documentation/images/notify-pdf-letter-spec-v2.3.pdf).
397
+ The precompiled letter must be a PDF file which meets [the GOV.UK Notify PDF letter specification](https://docs.notifications.service.gov.uk/documentation/images/notify-pdf-letter-spec-v2.4.pdf).
398
398
 
399
399
  ```ruby
400
400
  File.open("path/to/pdf_file", "rb") do |pdf_file|
@@ -409,7 +409,7 @@ You can choose first or second class postage for your precompiled letter. Set th
409
409
 
410
410
  ### Response
411
411
 
412
- If the request to the client is successful, the client returns a `Notifications::Client:ResponsePrecompiledLetter` object. In the example shown in the [Method section](/ruby.html#send-a-pre-compiled-letter-method), the object is named `precompiled_letter`.
412
+ If the request to the client is successful, the client returns a `Notifications::Client:ResponsePrecompiledLetter` object. In the example shown in the [Method section](#send-a-pre-compiled-letter-method), the object is named `precompiled_letter`.
413
413
 
414
414
  You can then call different methods on this object to return the requested information.
415
415
 
@@ -486,18 +486,13 @@ response = client.get_notification(id)
486
486
 
487
487
  #### id (required)
488
488
 
489
- The ID of the notification. You can find the notification ID in the response to the [original notification method call](/ruby.html#response).
490
-
491
- You can also find it in your [GOV.UK Notify Dashboard](https://www.notifications.service.gov.uk).
489
+ The ID of the notification. You can find the notification ID in the response to the [original notification method call](#response).
492
490
 
493
- 1. Sign into GOV.UK Notify and select __Dashboard__.
494
- 1. Select either __emails sent__, __text messages sent__, or __letters sent__.
495
- 1. Select the relevant notification.
496
- 1. Copy the notification ID from the end of the page URL, for example `https://www.notifications.service.gov.uk/services/af90d4cb-ae88-4a7c-a197-5c30c7db423b/notification/ID`.
491
+ You can also find it by signing in to [GOV.UK Notify](https://www.notifications.service.gov.uk) and going to the __API integration__ page.
497
492
 
498
493
  ### Response
499
494
 
500
- If the request to the client is successful, the client returns a `Notifications::Client::Notification` object. In the example shown in the [Method section](/ruby.html#get-the-status-of-one-message-method), the object is named `response`.
495
+ If the request to the client is successful, the client returns a `Notifications::Client::Notification` object. In the example shown in the [Method section](#get-the-status-of-one-message-method), the object is named `response`.
501
496
 
502
497
  You can then call different methods on this object to return the requested information.
503
498
 
@@ -533,7 +528,7 @@ If the request is not successful, the client returns a `Notification::Client::Re
533
528
  |:---|:---|:---|:---|
534
529
  |`400`|`ValidationError: id is not a valid UUID`|`BadRequestError`|Check the notification ID|
535
530
  |`403`|`AuthError: Error: Your system clock must be accurate to within 30 seconds`|`AuthError`|Check your system clock|
536
- |`403`|`AuthError: Invalid token: signature, api token not found`|`AuthError`|Use the correct API key. Refer to [API keys](/ruby.html#api-keys) for more information|
531
+ |`403`|`AuthError: Invalid token: signature, api token not found`|`AuthError`|Use the correct API key. Refer to [API keys](#api-keys) for more information|
537
532
  |`404`|`NoResultFound: No result found`|`NotFoundError`|Check the notification ID. This error occurs if the notification is more than 7 days old.|
538
533
 
539
534
  ## Get the status of multiple messages
@@ -611,7 +606,7 @@ The client only returns notifications that are 7 days old or newer. If the notif
611
606
 
612
607
  ### Response
613
608
 
614
- If the request to the client is successful, the client returns a `Notifications::Client::NotificationsCollection` object. In the example shown in the [Method section](/ruby.html#get-the-status-of-multiple-messages-method), the object is named `response`.
609
+ If the request to the client is successful, the client returns a `Notifications::Client::NotificationsCollection` object. In the example shown in the [Method section](#get-the-status-of-multiple-messages-method), the object is named `response`.
615
610
 
616
611
  You must then call either the `.links` method or the `.collection` method on this object.
617
612
 
@@ -656,7 +651,46 @@ If the request is not successful, the client returns a `Notifications::Client::R
656
651
  |`400`|`ValidationError: bad status is not one of [created, sending, sent, delivered, pending, failed, technical-failure, temporary-failure, permanent-failure, accepted, received]`|`BadRequestError`|Contact the GOV.UK Notify team|
657
652
  |`400`|`ValidationError: Template type is not one of [sms, email, letter]`|`BadRequestError`|Contact the GOV.UK Notify team|
658
653
  |`403`|`AuthError: Error: Your system clock must be accurate to within 30 seconds`|`AuthError`|Check your system clock|
659
- |`403`|`AuthError: Invalid token: signature, api token not found`|`AuthError`|Use the correct API key. Refer to [API keys](/ruby.html#api-keys) for more information|
654
+ |`403`|`AuthError: Invalid token: signature, api token not found`|`AuthError`|Use the correct API key. Refer to [API keys](#api-keys) for more information|
655
+
656
+ ## Get a PDF for a letter notification
657
+
658
+ ### Method
659
+
660
+ This returns the pdf contents of a letter notification.
661
+
662
+ ```ruby
663
+ pdf_file = client.get_pdf_for_letter(
664
+ 'f33517ff-2a88-4f6e-b855-c550268ce08a' # notification id (required)
665
+ )
666
+ ```
667
+
668
+ ### Arguments
669
+
670
+ #### id (required)
671
+
672
+ The ID of the notification. You can find the notification ID in the response to the [original notification method call](#get-the-status-of-one-message-response).
673
+
674
+ You can also find it by signing in to [GOV.UK Notify](https://www.notifications.service.gov.uk) and going to the __API integration__ page.
675
+
676
+ ### Response
677
+
678
+ If the request to the client is successful, the client will return a `string` containing the raw PDF data.
679
+
680
+ ### Error codes
681
+
682
+ If the request is not successful, the client throws a `Notifications::Client::RequestError` and an error code.
683
+ |error.code|error.message|class|How to fix|
684
+ |:---|:---|:---|:---|
685
+ |`400`|`ValidationError: id is not a valid UUID`|`BadRequestError`|Check the notification ID|
686
+ |`400`|`PDFNotReadyError: PDF not available yet, try again later`|`BadRequestError`|Wait for the notification to finish processing. This usually takes a few seconds|
687
+ |`400`|`BadRequestError: Document did not pass the virus scan`|`BadRequestError`|You cannot retrieve the contents of a letter notification that contains a virus|
688
+ |`400`|`BadRequestError: PDF not available for letters in technical-failure`|`BadRequestError`|You cannot retrieve the contents of a letter notification in technical-failure|
689
+ |`400`|`ValidationError: Notification is not a letter`|`BadRequestError`|Check that you are looking up the correct notification|
690
+ |`403`|`AuthError: Error: Your system clock must be accurate to within 30 seconds`|`BadRequestError`|Check your system clock|
691
+ |`403`|`AuthError: Invalid token: signature, api token not found`|`BadRequestError`|Use the correct API key. Refer to [API keys](#api-keys) for more information|
692
+ |`404`|`NoResultFound: No result found`|`BadRequestError`|Check the notification ID|
693
+
660
694
 
661
695
  # Get a template
662
696
 
@@ -682,7 +716,7 @@ The ID of the template. Sign into GOV.UK Notify and go to the __Templates__ page
682
716
 
683
717
  ### Response
684
718
 
685
- If the request to the client is successful, the client returns a `Notifications::Client::Template` object. In the example shown in the [Method section](/ruby.html#get-a-template-by-id-method), the object is named `response`.
719
+ If the request to the client is successful, the client returns a `Notifications::Client::Template` object. In the example shown in the [Method section](#get-a-template-by-id-method), the object is named `response`.
686
720
 
687
721
  You can then call different methods on this object to return the requested information.
688
722
 
@@ -706,8 +740,8 @@ If the request is not successful, the client returns a `Notifications::Client::R
706
740
  |:---|:---|:---|:---|
707
741
  |`400`|`ValidationError: id is not a valid UUID`|`BadRequestError`|Check the notification ID|
708
742
  |`403`|`AuthError: Error: Your system clock must be accurate to within 30 seconds`|`AuthError`|Check your system clock|
709
- |`403`|`AuthError: Invalid token: signature, api token not found`|`AuthError`|Use the correct API key. Refer to [API keys](/ruby.html#api-keys) for more information|
710
- |`404`|`NoResultFound: No Result Found`|`NotFoundError`|Check your [template ID](/ruby.html#get-a-template-by-id-arguments-id-required)|
743
+ |`403`|`AuthError: Invalid token: signature, api token not found`|`AuthError`|Use the correct API key. Refer to [API keys](#api-keys) for more information|
744
+ |`404`|`NoResultFound: No Result Found`|`NotFoundError`|Check your [template ID](#get-a-template-by-id-arguments-id-required)|
711
745
 
712
746
  ## Get a template by ID and version
713
747
 
@@ -733,7 +767,7 @@ The version number of the template.
733
767
 
734
768
  ### Response
735
769
 
736
- If the request to the client is successful, the client returns a `Notifications::Client::Template` object. In the example shown in the [Method section](/ruby.html#get-a-template-by-id-and-version-method), the object is named `response`.
770
+ If the request to the client is successful, the client returns a `Notifications::Client::Template` object. In the example shown in the [Method section](#get-a-template-by-id-and-version-method), the object is named `response`.
737
771
 
738
772
  You can then call different methods on this object to return the requested information.
739
773
 
@@ -757,8 +791,8 @@ If the request is not successful, the client returns a `Notifications::Client::R
757
791
  |:---|:---|:---|:---|
758
792
  |`400`|`ValidationError: id is not a valid UUID`|`BadRequestError`|Check the notification ID|
759
793
  |`403`|`AuthError: Error: Your system clock must be accurate to within 30 seconds`|`AuthError`|Check your system clock|
760
- |`403`|`AuthError: Invalid token: signature, api token not found`|`AuthError`|Use the correct API key. Refer to [API keys](/ruby.html#api-keys) for more information|
761
- |`404`|`NoResultFound: No Result Found`|`NotFoundError`|Check your [template ID](/ruby.html#get-a-template-by-id-and-version-arguments-id-required) and [version](/ruby.html#version-required)|
794
+ |`403`|`AuthError: Invalid token: signature, api token not found`|`AuthError`|Use the correct API key. Refer to [API keys](#api-keys) for more information|
795
+ |`404`|`NoResultFound: No Result Found`|`NotFoundError`|Check your [template ID](#get-a-template-by-id-and-version-arguments-id-required) and [version](#version-required)|
762
796
 
763
797
  ## Get all templates
764
798
 
@@ -785,7 +819,7 @@ If you do not use `type`, the client returns all templates. Otherwise you can fi
785
819
 
786
820
  ### Response
787
821
 
788
- If the request to the client is successful, the client returns a `Notifications::Client::TemplateCollection` object. In the example shown in the [Method section](/ruby.html#get-all-templates-method), the object is named `response`.
822
+ If the request to the client is successful, the client returns a `Notifications::Client::TemplateCollection` object. In the example shown in the [Method section](#get-all-templates-method), the object is named `response`.
789
823
 
790
824
  You must then call the `.collection` method on this object to return an array of the required templates.
791
825
 
@@ -842,7 +876,7 @@ If a template has placeholder fields for personalised information such as name o
842
876
  ```ruby
843
877
  personalisation: {
844
878
  name: "John Smith",
845
- ID: "300241",
879
+ ID: "300241",
846
880
  }
847
881
  ```
848
882
 
@@ -850,7 +884,7 @@ You can leave out this argument if a template does not have any placeholder fiel
850
884
 
851
885
  ### Response
852
886
 
853
- If the request to the client is successful, the client returns a `Notifications::Client::TemplatePreview` object. In the example shown in the [Method section](/ruby.html#generate-a-preview-template-method), the object is named `response`.
887
+ If the request to the client is successful, the client returns a `Notifications::Client::TemplatePreview` object. In the example shown in the [Method section](#generate-a-preview-template-method), the object is named `response`.
854
888
 
855
889
  You can then call different methods on this object to return the requested information.
856
890
 
@@ -870,9 +904,9 @@ If the request is not successful, the client returns a `Notifications::Client::R
870
904
  |error.code|error.message|class|How to fix|
871
905
  |:---|:---|:---|:---|
872
906
  |`400`|`BadRequestError: Missing personalisation: [PERSONALISATION FIELD]`|`BadRequestError`|Check that the personalisation arguments in the method match the placeholder fields in the template|
873
- |`400`|`NoResultFound: No result found`|`BadRequestError`|Check the [template ID](/ruby.html#generate-a-preview-template-arguments-id-required)|
907
+ |`400`|`NoResultFound: No result found`|`BadRequestError`|Check the [template ID](#generate-a-preview-template-arguments-id-required)|
874
908
  |`403`|`AuthError: Error: Your system clock must be accurate to within 30 seconds`|`AuthError`|Check your system clock|
875
- |`403`|`AuthError: Invalid token: signature, api token not found`|`AuthError`|Use the correct API key. Refer to [API keys](/ruby.html#api-keys) for more information|
909
+ |`403`|`AuthError: Invalid token: signature, api token not found`|`AuthError`|Use the correct API key. Refer to [API keys](#api-keys) for more information|
876
910
 
877
911
  # Get received text messages
878
912
 
@@ -880,11 +914,11 @@ This API call returns one page of up to 250 received text messages. You can get
880
914
 
881
915
  You can only get the status of messages that are 7 days old or newer.
882
916
 
883
- You can also set up [callbacks](/ruby.html#callbacks) for received text messages.
917
+ You can also set up [callbacks](#callbacks) for received text messages.
884
918
 
885
919
  ## Enable received text messages
886
920
 
887
- Contact the GOV.UK Notify team on the [support page](https://www.notifications.service.gov.uk/support) or through the [Slack channel](https://ukgovernmentdigital.slack.com/messages/govuk-notify) to enable receiving text messages for your service.
921
+ Contact the GOV.UK Notify team on the [support page](https://www.notifications.service.gov.uk/support) or through the [Slack channel](https://ukgovernmentdigital.slack.com/messages/C0E1ADVPC) to enable receiving text messages for your service.
888
922
 
889
923
  ## Get a page of received text messages
890
924
 
@@ -917,7 +951,7 @@ The client only returns notifications that are 7 days old or newer. If the notif
917
951
 
918
952
  ### Response
919
953
 
920
- If the request to the client is successful, the client returns a `Notifications::Client::ReceivedTextCollection` object. In the example shown in the [Method section](/ruby.html#get-received-text-messages-method), the object is named `response`.
954
+ If the request to the client is successful, the client returns a `Notifications::Client::ReceivedTextCollection` object. In the example shown in the [Method section](#get-received-text-messages-method), the object is named `response`.
921
955
 
922
956
  You must then call either the `.links` method or the `.collection` method on this object.
923
957
 
@@ -946,4 +980,4 @@ If the request is not successful, the client returns a `Notifications::Client::R
946
980
  |error.code|error.message|class|How to fix|
947
981
  |:---|:---|:---|:---|
948
982
  |`403`|`AuthError: Error: Your system clock must be accurate to within 30 seconds`|`AuthError`|Check your system clock|
949
- |`403`|`AuthError: Invalid token: signature, api token not found`|`AuthError`|Use the correct API key. Refer to [API keys](/ruby.html#api-keys) for more information|
983
+ |`403`|`AuthError: Invalid token: signature, api token not found`|`AuthError`|Use the correct API key. Refer to [API keys](#api-keys) for more information|
data/Dockerfile ADDED
@@ -0,0 +1,13 @@
1
+ FROM ruby:2.4-slim
2
+
3
+ RUN \
4
+ echo "Install Debian packages" \
5
+ && apt-get update \
6
+ && apt-get install -y --no-install-recommends \
7
+ gcc \
8
+ make \
9
+ curl \
10
+ git \
11
+ gnupg
12
+
13
+ WORKDIR /var/project
data/bin/test_client.rb CHANGED
@@ -20,6 +20,7 @@ def main
20
20
  test_get_notification_by_id_endpoint(client, precompiled_letter_notification.id, 'precompiled_letter')
21
21
  test_get_all_notifications(client)
22
22
  test_get_received_texts
23
+ test_get_pdf_for_letter(client, letter_notification.id)
23
24
  p 'ruby client integration tests pass'
24
25
  exit 0
25
26
  end
@@ -205,6 +206,28 @@ def test_get_notification_by_id_endpoint(client, id, message_type)
205
206
  end
206
207
  end
207
208
 
209
+ def test_get_pdf_for_letter(client, id)
210
+ response = nil
211
+
212
+ # try 15 times with 3 secs sleep between each attempt, to get the PDF
213
+ 15.times do
214
+ begin
215
+ response = client.get_pdf_for_letter(id)
216
+ rescue Notifications::Client::BadRequestError
217
+ sleep(3)
218
+ end
219
+
220
+ if !response.nil?
221
+ break
222
+ end
223
+ end
224
+
225
+ unless !response.nil? && response.start_with?("%PDF-")
226
+ p "get_pdf_for_letter response for " + id + " is not a PDF: " + response.to_s
227
+ exit 1
228
+ end
229
+ end
230
+
208
231
  def hash_key_should_not_be_nil(fields, obj, method_name)
209
232
  fields.each do |field|
210
233
  if obj.has_value?(:"#{field}")
data/docker/Dockerfile CHANGED
@@ -1,4 +1,4 @@
1
- FROM ruby:2.3.1-slim
1
+ FROM ruby:2.4-slim
2
2
 
3
3
  ARG HTTP_PROXY
4
4
  ARG HTTPS_PROXY
@@ -13,7 +13,6 @@ RUN \
13
13
  make \
14
14
  curl \
15
15
  git \
16
-
17
16
  && echo "Clean up" \
18
17
  && rm -rf /var/lib/apt/lists/* /tmp/*
19
18
 
@@ -67,6 +67,14 @@ module Notifications
67
67
  )
68
68
  end
69
69
 
70
+ ##
71
+ # @param id [String]
72
+ # @see Notifications::Client::Speaker#get
73
+ # @return [String]
74
+ def get_pdf_for_letter(id)
75
+ speaker.get_pdf_for_letter(id)
76
+ end
77
+
70
78
  ##
71
79
  # @param id [String]
72
80
  # @see Notifications::Client::Speaker#get
@@ -118,6 +118,19 @@ module Notifications
118
118
  perform_request!(request)
119
119
  end
120
120
 
121
+ def get_pdf_for_letter(id)
122
+ path = "/v2/notifications/" << id << "/pdf"
123
+ request = Net::HTTP::Get.new(path, headers)
124
+
125
+ # can't use `perform_request!` because we're just returning raw binary data
126
+ response = open(request)
127
+ if response.is_a?(Net::HTTPClientError) || response.is_a?(Net::HTTPServerError)
128
+ raise build_error(response)
129
+ else
130
+ response.body
131
+ end
132
+ end
133
+
121
134
  private
122
135
 
123
136
  ##
@@ -9,6 +9,6 @@
9
9
 
10
10
  module Notifications
11
11
  class Client
12
- VERSION = "4.0.0".freeze
12
+ VERSION = "5.1.0".freeze
13
13
  end
14
14
  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: 4.0.0
4
+ version: 5.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: 2019-07-02 00:00:00.000000000 Z
11
+ date: 2019-11-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jwt
@@ -128,6 +128,7 @@ files:
128
128
  - CHANGELOG.md
129
129
  - CONTRIBUTING.md
130
130
  - DOCUMENTATION.md
131
+ - Dockerfile
131
132
  - Gemfile
132
133
  - LICENSE
133
134
  - Makefile
@@ -173,8 +174,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
173
174
  - !ruby/object:Gem::Version
174
175
  version: '0'
175
176
  requirements: []
176
- rubyforge_project:
177
- rubygems_version: 2.7.6
177
+ rubygems_version: 3.0.3
178
178
  signing_key:
179
179
  specification_version: 4
180
180
  summary: Ruby client for GOV.UK Notifications API