notifications-ruby-client 2.10.0 → 3.0.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 +7 -0
- data/DOCUMENTATION.md +25 -11
- data/bin/test_client.rb +14 -5
- data/lib/notifications/client.rb +5 -4
- data/lib/notifications/client/notification.rb +1 -0
- data/lib/notifications/client/response_precompiled_letter.rb +19 -0
- data/lib/notifications/client/speaker.rb +5 -1
- data/lib/notifications/client/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3aa0a6d3a19753534e19441bc9bd6ac3e0dc1913d1a5dee660d629367ea85dd4
|
4
|
+
data.tar.gz: b760674b646a232fa7a0d6e6c844fef4488cd4fd582496f6380c3eaee861e520
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 10593571a7496c3669361bc56bcdab4fe2e7075ab2a743b08e860894721b288c31d042a9c8f433122385373523a948b8cd53d78fc8cf374f314868708dbfef9e
|
7
|
+
data.tar.gz: 10ab2c60a4f94ce96e8da05a0b1d71205051c9655005948a7cf9b4ec08e9a42e775cbb2ce3dbebd440f4c4542754dd41ffa818a50c824d5d4314777589ea69e9
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
## 3.0.0
|
2
|
+
|
3
|
+
* Changed response class for `send_precompiled_letter` request from `ResponseNotification` to a new response class: `ResponsePrecompiledLetter`. This may affect users sending precompiled letters.
|
4
|
+
* Added an optional `postage` argument to `send_precompiled_letter` method, so users can specify postage when sending
|
5
|
+
a precompiled letter via API.
|
6
|
+
* Added postage to `Notification` class on the client.
|
7
|
+
|
1
8
|
## 2.10.0
|
2
9
|
|
3
10
|
* Added subclasses of the `RequestError` class to handle specific types of errors.
|
data/DOCUMENTATION.md
CHANGED
@@ -215,7 +215,7 @@ This is an invitation-only feature. [Contact the GOV.UK Notify team](https://www
|
|
215
215
|
|
216
216
|
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.
|
217
217
|
|
218
|
-
|
218
|
+
### Add a placeholder field to the template
|
219
219
|
|
220
220
|
1. Sign in to [GOV.UK Notify](https://www.notifications.service.gov.uk/).
|
221
221
|
1. Go to the __Templates__ page and select the relevant email template.
|
@@ -223,7 +223,7 @@ To send a document by email, add a placeholder field to the template then upload
|
|
223
223
|
|
224
224
|
"Download your document at: ((link_to_document))"
|
225
225
|
|
226
|
-
|
226
|
+
### Upload your document
|
227
227
|
|
228
228
|
The document you upload must be a PDF file smaller than 2MB.
|
229
229
|
|
@@ -401,9 +401,14 @@ File.open("path/to/pdf_file", "rb") do |pdf_file|
|
|
401
401
|
end
|
402
402
|
```
|
403
403
|
|
404
|
+
#### postage (optional)
|
405
|
+
|
406
|
+
You can choose first or second class postage for your precompiled letter. Set the value to `first` for first class, or `second` for second class. If you do not pass in this argument, the postage will default to second class.
|
407
|
+
|
408
|
+
|
404
409
|
### Response
|
405
410
|
|
406
|
-
If the request to the client is successful, the client returns a `Notifications::Client:
|
411
|
+
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`.
|
407
412
|
|
408
413
|
You can then call different methods on this object to return the requested information.
|
409
414
|
|
@@ -411,9 +416,8 @@ You can then call different methods on this object to return the requested infor
|
|
411
416
|
|:---|:---|:---|
|
412
417
|
|`precompiled_letter.id`|Notification UUID|String|
|
413
418
|
|`precompiled_letter.reference`|`reference` argument|String|
|
414
|
-
|`precompiled_letter.
|
415
|
-
|
416
|
-
|`precompiled_letter.uri`|Always `nil`|nil|
|
419
|
+
|`precompiled_letter.postage`|`postage` argument|String|
|
420
|
+
|
417
421
|
|
418
422
|
### Error codes
|
419
423
|
|
@@ -426,6 +430,7 @@ If the request is not successful, the client returns a `Notifications::Client::R
|
|
426
430
|
|`400`|`[{`<br>`"error": "BadRequestError",`<br>`"message": "Letter content is not a valid PDF"`<br>`]}`|`BadRequestError`|PDF file format is required|
|
427
431
|
|`400`|`[{`<br>`"error": "BadRequestError",`<br>`"message": "Cannot send letters when service is in trial mode - see https://www.notifications.service.gov.uk/trial-mode"`<br>`}]`|`BadRequestError`|Your service cannot send this notification in [trial mode](https://www.notifications.service.gov.uk/features/using-notify#trial-mode)|
|
428
432
|
|`400`|`[{`<br>`"error": "ValidationError",`<br>`"message": "reference is a required property"`<br>`}]`|`BadRequestError`|Add a `reference` argument to the method call|
|
433
|
+
|`400`|`[{`<br>`"error": "ValidationError",`<br>`"message": "postage invalid. It must be either first or second."`<br>`}]`|`BadRequestError`|Change the value of `postage` argument in the method call to either 'first' or 'second'|
|
429
434
|
|`400`|`[{`<br>`"error": "BadRequestError",`<br>`"message": "Service is not allowed to send precompiled letters"`<br>`}]`|`BadRequestError`|Contact the GOV.UK Notify team|
|
430
435
|
|`429`|`[{`<br>`"error": "RateLimitError",`<br>`"message": "Exceeded rate limit for key type live of 10 requests per 20 seconds"`<br>`}]`|`RateLimitError`|Use the correct API key. Refer to [API keys](#api-keys) for more information|
|
431
436
|
|`429`|`[{`<br>`"error": "TooManyRequestsError",`<br>`"message": "Exceeded send limits (50) for today"`<br>`}]`|`RateLimitError`|Refer to [service limits](#service-limits) for the limit number|
|
@@ -509,6 +514,7 @@ You can then call different methods on this object to return the requested infor
|
|
509
514
|
|`response.line_5`|Recipient address line 5 of the address (letter only)|String|
|
510
515
|
|`response.line_6`|Recipient address line 6 of the address (letter only)|String|
|
511
516
|
|`response.postcode`|Recipient postcode (letter only)|String|
|
517
|
+
|`response.postage`|Postage class of the notification sent (letter only)|String|
|
512
518
|
|`response.type`|Type of notification sent (sms, email or letter)|String|
|
513
519
|
|`response.status`|Notification status (sending / delivered / permanent-failure / temporary-failure / technical-failure)|String|
|
514
520
|
|`response.template`|Template UUID|String|
|
@@ -694,7 +700,7 @@ You can then call different methods on this object to return the requested infor
|
|
694
700
|
If the request is not successful, the client returns a `Notifications::Client::RequestError` and an error code:
|
695
701
|
|
696
702
|
|error.code|error.message|class|How to fix|
|
697
|
-
|
703
|
+
|:---|:---|:---|:---|
|
698
704
|
|`400`|`[{`<br>`"error": "ValidationError",`<br>`"message": "id is not a valid UUID"`<br>`}]`|`BadRequestError`|Check the notification ID|
|
699
705
|
|`403`|`[{`<br>`"error": "AuthError",`<br>`"message": "Error: Your system clock must be accurate to within 30 seconds"`<br>`}]`|`AuthError`|Check your system clock|
|
700
706
|
|`403`|`[{`<br>`"error": "AuthError",`<br>`"message": "Invalid token: signature, api token not found"`<br>`}]`|`AuthError`|Use the correct API key. Refer to [API keys](/ruby.html#api-keys) for more information|
|
@@ -745,7 +751,7 @@ You can then call different methods on this object to return the requested infor
|
|
745
751
|
If the request is not successful, the client returns a `Notifications::Client::RequestError` and an error code:
|
746
752
|
|
747
753
|
|error.code|error.message|class|How to fix|
|
748
|
-
|
754
|
+
|:---|:---|:---|:---|
|
749
755
|
|`400`|`[{`<br>`"error": "ValidationError",`<br>`"message": "id is not a valid UUID"`<br>`}]`|`BadRequestError`|Check the notification ID|
|
750
756
|
|`403`|`[{`<br>`"error": "AuthError",`<br>`"message": "Error: Your system clock must be accurate to within 30 seconds"`<br>`}]`|`AuthError`|Check your system clock|
|
751
757
|
|`403`|`[{`<br>`"error": "AuthError",`<br>`"message": "Invalid token: signature, api token not found"`<br>`}]`|`AuthError`|Use the correct API key. Refer to [API keys](/ruby.html#api-keys) for more information|
|
@@ -801,7 +807,7 @@ If no templates exist for a template type or there no templates for a service, t
|
|
801
807
|
If the request is not successful, the client returns a `Notifications::Client::RequestError` and an error code:
|
802
808
|
|
803
809
|
|error.code|error.message|class|How to fix|
|
804
|
-
|
810
|
+
|:---|:---|:---|:---|
|
805
811
|
|`400`|`[{`<br>`"error": "ValidationError",`<br>`"message": "Template type is not one of [sms, email, letter]"`<br>`}]`|`BadRequestError`|Contact the Notify team|
|
806
812
|
|
807
813
|
## Generate a preview template
|
@@ -858,7 +864,7 @@ You can then call different methods on this object to return the requested infor
|
|
858
864
|
If the request is not successful, the client returns a `Notifications::Client::RequestError` and an error code:
|
859
865
|
|
860
866
|
|error.code|error.message|class|How to fix|
|
861
|
-
|
867
|
+
|:---|:---|:---|:---|
|
862
868
|
|`400`|`[{`<br>`"error": "BadRequestError",`<br>`"message": "Missing personalisation: [PERSONALISATION FIELD]"`<br>`}]`|`BadRequestError`|Check that the personalisation arguments in the method match the placeholder fields in the template|
|
863
869
|
|`400`|`[{`<br>`"error": "NoResultFound",`<br>`"message": "No result found"`<br>`}]`|`BadRequestError`|Check the [template ID](/ruby.html#generate-a-preview-template-arguments-id-required)|
|
864
870
|
|`403`|`[{`<br>`"error": "AuthError",`<br>`"message": "Error: Your system clock must be accurate to within 30 seconds"`<br>`}]`|`AuthError`|Check your system clock|
|
@@ -870,6 +876,14 @@ This API call returns one page of up to 250 received text messages. You can get
|
|
870
876
|
|
871
877
|
You can only get the status of messages that are 7 days old or newer.
|
872
878
|
|
879
|
+
You can also set up [callbacks](/ruby.html#callbacks) for received text messages.
|
880
|
+
|
881
|
+
## Enable received text messages
|
882
|
+
|
883
|
+
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.
|
884
|
+
|
885
|
+
## Get a page of received text messages
|
886
|
+
|
873
887
|
### Method
|
874
888
|
|
875
889
|
```ruby
|
@@ -926,6 +940,6 @@ If the notification specified in the `older_than` argument is older than 7 days,
|
|
926
940
|
If the request is not successful, the client returns a `Notifications::Client::RequestError` and an error code.
|
927
941
|
|
928
942
|
|error.code|error.message|class|How to fix|
|
929
|
-
|
943
|
+
|:---|:---|:---|:---|
|
930
944
|
|`403`|`[{`<br>`"error": "AuthError",`<br>`"message": "Error: Your system clock must be accurate to within 30 seconds"`<br>`}]`|`AuthError`|Check your system clock|
|
931
945
|
|`403`|`[{`<br>`"error": "AuthError",`<br>`"message": "Invalid token: signature, api token not found"`<br>`}]`|`AuthError`|Use the correct API key. Refer to [API keys](/ruby.html#api-keys) for more information|
|
data/bin/test_client.rb
CHANGED
@@ -139,7 +139,7 @@ end
|
|
139
139
|
|
140
140
|
def test_send_precompiled_letter_endpoint(client)
|
141
141
|
precompiled_letter_resp = File.open('spec/test_files/test_pdf.pdf', 'rb') do |file|
|
142
|
-
client.send_precompiled_letter("some reference", file)
|
142
|
+
client.send_precompiled_letter("some reference", file, "first")
|
143
143
|
end
|
144
144
|
|
145
145
|
test_notification_response_data_type(precompiled_letter_resp, 'precompiled_letter')
|
@@ -148,7 +148,7 @@ def test_send_precompiled_letter_endpoint(client)
|
|
148
148
|
end
|
149
149
|
|
150
150
|
def test_notification_response_data_type(notification, message_type)
|
151
|
-
unless notification.is_a?(Notifications::Client::ResponseNotification)
|
151
|
+
unless notification.is_a?(Notifications::Client::ResponseNotification) || (notification.is_a?(Notifications::Client::ResponsePrecompiledLetter) && message_type == "precompiled_letter")
|
152
152
|
p 'failed ' + message_type + ' response is not a Notifications::Client::ResponseNotification'
|
153
153
|
exit 1
|
154
154
|
end
|
@@ -159,6 +159,10 @@ def test_notification_response_data_type(notification, message_type)
|
|
159
159
|
|
160
160
|
if message_type == 'precompiled_letter'
|
161
161
|
field_should_not_be_nil(expected_fields_in_precompiled_letter_response, notification, 'send_precompiled_letter')
|
162
|
+
if notification.postage != "first"
|
163
|
+
p "Postage should be set to 'first' for precompiled letter sending test. Right now it is set to #{notification.postage}"
|
164
|
+
exit 1
|
165
|
+
end
|
162
166
|
return
|
163
167
|
end
|
164
168
|
|
@@ -255,7 +259,8 @@ end
|
|
255
259
|
|
256
260
|
def expected_fields_in_precompiled_letter_response
|
257
261
|
%w(id
|
258
|
-
reference
|
262
|
+
reference
|
263
|
+
postage)
|
259
264
|
end
|
260
265
|
|
261
266
|
def expected_fields_in_email_content
|
@@ -297,7 +302,8 @@ def expected_fields_in_email_notification_that_are_nil
|
|
297
302
|
line_5
|
298
303
|
line_6
|
299
304
|
postcode
|
300
|
-
created_by_name
|
305
|
+
created_by_name
|
306
|
+
postage)
|
301
307
|
end
|
302
308
|
|
303
309
|
def expected_fields_in_sms_notification
|
@@ -321,7 +327,8 @@ def expected_fields_in_sms_notification_that_are_nil
|
|
321
327
|
line_6
|
322
328
|
postcode
|
323
329
|
subject
|
324
|
-
created_by_name
|
330
|
+
created_by_name
|
331
|
+
postage)
|
325
332
|
end
|
326
333
|
|
327
334
|
def expected_fields_in_letter_notification
|
@@ -336,6 +343,7 @@ def expected_fields_in_letter_notification
|
|
336
343
|
line_2
|
337
344
|
postcode
|
338
345
|
created_at
|
346
|
+
postage
|
339
347
|
)
|
340
348
|
end
|
341
349
|
|
@@ -363,6 +371,7 @@ def expected_fields_in_precompiled_letter_notification
|
|
363
371
|
subject
|
364
372
|
template
|
365
373
|
type
|
374
|
+
postage
|
366
375
|
)
|
367
376
|
end
|
368
377
|
|
data/lib/notifications/client.rb
CHANGED
@@ -2,6 +2,7 @@ require_relative "client/version"
|
|
2
2
|
require_relative "client/speaker"
|
3
3
|
require_relative "client/notification"
|
4
4
|
require_relative "client/response_notification"
|
5
|
+
require_relative "client/response_precompiled_letter"
|
5
6
|
require_relative "client/notifications_collection"
|
6
7
|
require_relative "client/received_text"
|
7
8
|
require_relative "client/received_text_collection"
|
@@ -59,10 +60,10 @@ module Notifications
|
|
59
60
|
# @param reference [String]
|
60
61
|
# @param pdf_file [File]
|
61
62
|
# @see Notifications::Client::Speaker#post_precompiled_letter
|
62
|
-
# @return [
|
63
|
-
def send_precompiled_letter(reference, pdf_file)
|
64
|
-
|
65
|
-
speaker.post_precompiled_letter(reference, pdf_file)
|
63
|
+
# @return [ResponsePrecompiledLetter]
|
64
|
+
def send_precompiled_letter(reference, pdf_file, postage = nil)
|
65
|
+
ResponsePrecompiledLetter.new(
|
66
|
+
speaker.post_precompiled_letter(reference, pdf_file, postage)
|
66
67
|
)
|
67
68
|
end
|
68
69
|
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Notifications
|
2
|
+
class Client
|
3
|
+
class ResponsePrecompiledLetter
|
4
|
+
FIELDS = %i(
|
5
|
+
id
|
6
|
+
reference
|
7
|
+
postage
|
8
|
+
).freeze
|
9
|
+
|
10
|
+
attr_reader(*FIELDS)
|
11
|
+
|
12
|
+
def initialize(notification)
|
13
|
+
FIELDS.each do |field|
|
14
|
+
instance_variable_set(:"@#{field}", notification.fetch(field.to_s, nil))
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -102,10 +102,14 @@ module Notifications
|
|
102
102
|
# @param reference [String] reference of the notification
|
103
103
|
# @param pdf_file [File] PDF file opened for reading
|
104
104
|
# @see #perform_request!
|
105
|
-
def post_precompiled_letter(reference, pdf_file)
|
105
|
+
def post_precompiled_letter(reference, pdf_file, postage = nil)
|
106
106
|
content = Base64.strict_encode64(pdf_file.read)
|
107
107
|
form_data = { reference: reference, content: content }
|
108
108
|
|
109
|
+
if postage != nil
|
110
|
+
form_data[:postage] = postage
|
111
|
+
end
|
112
|
+
|
109
113
|
request = Net::HTTP::Post.new(
|
110
114
|
"#{BASE_PATH}/letter",
|
111
115
|
headers
|
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
|
+
version: 3.0.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-
|
11
|
+
date: 2019-02-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jwt
|
@@ -147,6 +147,7 @@ files:
|
|
147
147
|
- lib/notifications/client/received_text_collection.rb
|
148
148
|
- lib/notifications/client/request_error.rb
|
149
149
|
- lib/notifications/client/response_notification.rb
|
150
|
+
- lib/notifications/client/response_precompiled_letter.rb
|
150
151
|
- lib/notifications/client/response_template.rb
|
151
152
|
- lib/notifications/client/speaker.rb
|
152
153
|
- lib/notifications/client/template_collection.rb
|