hellosign-api 1.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.
Files changed (75) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +19 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +15 -0
  5. data/CONTRIBUTING.md +42 -0
  6. data/Gemfile +13 -0
  7. data/Guardfile +14 -0
  8. data/LICENSE +21 -0
  9. data/README.md +112 -0
  10. data/Rakefile +16 -0
  11. data/hellosign-api.gemspec +54 -0
  12. data/lib/hello_sign/.error.rb.swp +0 -0
  13. data/lib/hello_sign/api/account.rb +78 -0
  14. data/lib/hello_sign/api/api_app.rb +121 -0
  15. data/lib/hello_sign/api/bulk_send_job.rb +62 -0
  16. data/lib/hello_sign/api/embedded.rb +68 -0
  17. data/lib/hello_sign/api/oauth.rb +95 -0
  18. data/lib/hello_sign/api/signature_request.rb +691 -0
  19. data/lib/hello_sign/api/team.rb +107 -0
  20. data/lib/hello_sign/api/template.rb +227 -0
  21. data/lib/hello_sign/api/unclaimed_draft.rb +328 -0
  22. data/lib/hello_sign/api.rb +31 -0
  23. data/lib/hello_sign/client.rb +372 -0
  24. data/lib/hello_sign/configuration.rb +78 -0
  25. data/lib/hello_sign/error.rb +99 -0
  26. data/lib/hello_sign/resource/account.rb +43 -0
  27. data/lib/hello_sign/resource/api_app.rb +43 -0
  28. data/lib/hello_sign/resource/base_resource.rb +73 -0
  29. data/lib/hello_sign/resource/bulk_send_job.rb +43 -0
  30. data/lib/hello_sign/resource/embedded.rb +43 -0
  31. data/lib/hello_sign/resource/resource_array.rb +56 -0
  32. data/lib/hello_sign/resource/signature_request.rb +43 -0
  33. data/lib/hello_sign/resource/team.rb +43 -0
  34. data/lib/hello_sign/resource/template.rb +43 -0
  35. data/lib/hello_sign/resource/template_draft.rb +44 -0
  36. data/lib/hello_sign/resource/unclaimed_draft.rb +44 -0
  37. data/lib/hello_sign/resource.rb +33 -0
  38. data/lib/hello_sign/version.rb +25 -0
  39. data/lib/hello_sign.rb +50 -0
  40. data/lib/hellosign-ruby-sdk.rb +4 -0
  41. data/spec/fixtures/account.json +15 -0
  42. data/spec/fixtures/api_app.json +16 -0
  43. data/spec/fixtures/api_apps.json +43 -0
  44. data/spec/fixtures/bulk_send_job.json +88 -0
  45. data/spec/fixtures/bulk_send_jobs.json +22 -0
  46. data/spec/fixtures/embedded.json +6 -0
  47. data/spec/fixtures/empty.pdf +0 -0
  48. data/spec/fixtures/error.json +6 -0
  49. data/spec/fixtures/file.json +0 -0
  50. data/spec/fixtures/headers.json +18 -0
  51. data/spec/fixtures/nda.pdf +0 -0
  52. data/spec/fixtures/signature_request.json +45 -0
  53. data/spec/fixtures/signature_requests.json +44 -0
  54. data/spec/fixtures/team.json +15 -0
  55. data/spec/fixtures/template.json +53 -0
  56. data/spec/fixtures/templates.json +59 -0
  57. data/spec/fixtures/token.json +14 -0
  58. data/spec/fixtures/unclaimed_draft.json +6 -0
  59. data/spec/hello_sign/.error_spec.rb.swp +0 -0
  60. data/spec/hello_sign/api/account_spec.rb +42 -0
  61. data/spec/hello_sign/api/api_app_spec.rb +104 -0
  62. data/spec/hello_sign/api/bulk_send_job_spec.rb +53 -0
  63. data/spec/hello_sign/api/embedded_spec.rb +23 -0
  64. data/spec/hello_sign/api/oauth_spec.rb +27 -0
  65. data/spec/hello_sign/api/signature_request_spec.rb +268 -0
  66. data/spec/hello_sign/api/team_spec.rb +101 -0
  67. data/spec/hello_sign/api/template_spec.rb +172 -0
  68. data/spec/hello_sign/api/unclaimed_draft_spec.rb +145 -0
  69. data/spec/hello_sign/client_spec.rb +191 -0
  70. data/spec/hello_sign/error_spec.rb +10 -0
  71. data/spec/hello_sign/resource/base_resource_spec.rb +53 -0
  72. data/spec/hello_sign_spec.rb +57 -0
  73. data/spec/scenarios/uploads_spec.rb +19 -0
  74. data/spec/spec_helper.rb +104 -0
  75. metadata +261 -0
@@ -0,0 +1,691 @@
1
+ # The MIT License (MIT)
2
+ #
3
+ # Copyright (C) 2014 hellosign.com
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in all
13
+ # copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ # SOFTWARE.
22
+
23
+ module HelloSign
24
+ module Api
25
+ # Contains all the API calls for the SignatureRequest resource.
26
+ # Take a look at our API Documentation on Signature Requests (https://app.hellosign.com/api/reference#SignatureRequest)
27
+ # for more information about this.
28
+ #
29
+ # @author [hellosign]
30
+
31
+ module SignatureRequest
32
+
33
+ # Retrieves a SignatureRequest with the given ID.
34
+ # @option opts [String] signature_request_id The ID of the SignatureRequest to retrieve.
35
+ #
36
+ # @return [HelloSign::Resource::SignatureRequest] a SignatureRequest
37
+ #
38
+ # @example
39
+ # signature_request = @client.get_signature_request signature_request_id: 'fa5c8a0b0f492d768749333ad6fcc214c111e967'
40
+ def get_signature_request(opts)
41
+ path = "/signature_request/#{opts[:signature_request_id]}"
42
+
43
+ HelloSign::Resource::SignatureRequest.new get(path)
44
+ end
45
+
46
+ # Returns a list of send and received SignatureRequests that you can access. This does not include ones that you have been CC'd on.
47
+ # @option opts [String] account_id Indicates which account to return SignatureRequests for. Defaults to your account. (optional)
48
+ # @option opts [Integer] page Sets the page number of the list to return. Defaults to 1. (optional)
49
+ # @option opts [Integer] page_size Determines the number of SignatureRequests returned per page. Defaults to 20. (optional)
50
+ # @option opts [String] query Filters the SignatureRequests based on the search parameters. (optional)
51
+ #
52
+ # @return [HelloSign::Resource::ResourceArray]
53
+ #
54
+ # @example
55
+ # signature_requests = @client.get_signature_requests(
56
+ # page: 1,
57
+ # query: "to:jack@example.com+AND+client_id:b6b8e7deaf8f0b95c029dca049356d4a2cf9710a"
58
+ # )
59
+ def get_signature_requests(opts={})
60
+ path = '/signature_request/list'
61
+ opts[:query] = create_search_string(opts[:query]) if opts[:query]
62
+ query = create_query_string(opts, [:page, :page_size, :query])
63
+ path += query
64
+ HelloSign::Resource::ResourceArray.new get(path, opts), 'signature_requests', HelloSign::Resource::SignatureRequest
65
+ end
66
+
67
+ # Creates and sends a new SignatureRequest with the submitted documents.
68
+ # @option opts [Boolean] test_mode Indicates if this is a test SignatureRequest, it will not be legally binding if set to 1. Defaults to 0. (optional)
69
+ # @option opts [Array<String>] files Specifies the file path(s) to send for the SignatureRequest.
70
+ # @option opts [Array<String>] file_urls Specifies the URL(s) for the file(s) to send for the SignatureRequest.
71
+ # @option opts [String] title Assigns a title to the SignatureRequest. (optional)
72
+ # @option opts [String] subject Sets the subject in the email sent to the signer(s). (optional)
73
+ # @option opts [String] message Sets the message in the email sent to the signer(s). (optional)
74
+ # @option opts [String] signing_redirect_url Redirects the signer(s) to this URL after completing the SignatureRequest. (optional)
75
+ # @option opts [Array<Hash>] signers Sets a list of signers, each item is a Hash with these keys:
76
+ # * name (String) Signer's name
77
+ # * email_address (String) Signer's email address
78
+ # * order (Integer) The order the signers are required to sign in (optional)
79
+ # * pin (Integer) Secures the SignatureRequest using this 4-12 character access code. A business plan is required to use this feature. (optional)
80
+ # @option opts [Array<Hash>] attachments Sets a list of attachments signers can upload
81
+ # * name (String) Attachment name
82
+ # * instructions (String) Instructions for uploading the attachment. (optional)
83
+ # * signer_index (Integer) The signer's unique number.
84
+ # * required (Boolean) Determines if the signer is required to upload this attachment. Defaults to 0. (Optional)
85
+ # @option opts [Array<Hash>] custom_fields An array of custom merge fields, representing those present on the document with Text Tags or form_fields_per_document (optional)
86
+ # * name (String) Custom field name or "Field Label"
87
+ # * value (String) The value of the field. This data will appear on the SignatureRequest.
88
+ # * editor (String) The signer name indicated on the Text Tag or form_fields_per_document that can edit the value of the field. (optional)
89
+ # * required (Boolean) Determines if the field is required or not. (optional)
90
+ # @option opts [Array<String>] cc_email_addresses The email addresses that should be CCed on the SignatureRequest. (optional)
91
+ # @option opts [Boolean] use_text_tags Indicates whether the SignatureRequest should have Text Tags enabled. Defaults to 0. (optional)
92
+ # @option opts [Boolean] hide_text_tags Indicates whether the Text Tags should be removed automatically. Note that this is not the preferred method. Defaults to 0. (optional)
93
+ # @option opts [Hash] metadata Key-value data attached to the SignatureRequest. (optional)
94
+ # @option opts [String] client_id The API App Client ID associated with the SignatureRequest. (optional)
95
+ # @option opts [Boolean] allow_decline Allows signers to decline the SignatureRequest. Defaults to 0. (optional)
96
+ # @option opts [Boolean] allow_reassign Allows signers to reassign the SignatureRequest to another signer. Defaults to 0. (optional)
97
+ # @option opts [Array<Hash>] form_fields_per_document The fields that should appear on the document. (optional)
98
+ # @option opts [Hash] signing_options Specifies the types allowed for creating a signature. (optional)
99
+ #
100
+ # @return [HelloSign::Resource::SignatureRequest] a SignatureRequest
101
+ #
102
+ # @example
103
+ # signature_request = @client.send_signature_request(
104
+ # test_mode: 1,
105
+ # allow_decline: 1,
106
+ # client_id: 'b6b8e7deaf8f0b95c029dca049356d4a2cf9710a',
107
+ # title: 'NDA with Acme Co.',
108
+ # subject: 'The NDA we talked about',
109
+ # message: 'Please sign this NDA and then we can discuss more. Let me know if you have any questions.',
110
+ # metadata: {
111
+ # client_name: 'John Doe',
112
+ # custom_text: 'NDA #9'
113
+ # },
114
+ # signers: [{
115
+ # email_address: 'jack@example.com',
116
+ # name: 'Jack',
117
+ # order: 0,
118
+ # },
119
+ # {
120
+ # email_address: 'jill@example.com',
121
+ # name: 'Jill',
122
+ # order: 1,
123
+ # }],
124
+ # attachments: [{
125
+ # name: 'Passport',
126
+ # instructions: 'Upload your US Passport',
127
+ # signer_index: 0,
128
+ # required: true
129
+ # },
130
+ # {
131
+ # name: 'Driver's License',
132
+ # instructions: 'Upload your CA Driver's License',
133
+ # signer_index: 1,
134
+ # required: false
135
+ # }
136
+ # ],
137
+ # cc_email_addresses: ['lawyer@example.com', 'lawyer@example2.com'],
138
+ # files: ['NDA.pdf', 'AppendixA.pdf'],
139
+ # form_fields_per_document: [
140
+ # [
141
+ # {
142
+ # name: 'address',
143
+ # type: 'text',
144
+ # x: 160,
145
+ # y: 80,
146
+ # width: 206,
147
+ # height: 32,
148
+ # signer: 0
149
+ # }
150
+ # ],
151
+ # [
152
+ # {
153
+ # name: 'phone',
154
+ # type: 'text',
155
+ # x: 160,
156
+ # y: 150,
157
+ # width: 206,
158
+ # height: 32,
159
+ # signer: 1
160
+ # }
161
+ # ]
162
+ # ],
163
+ # signing_options: {
164
+ # draw: true,
165
+ # type: true,
166
+ # upload: false,
167
+ # phone: true,
168
+ # default: 'phone'
169
+ # }
170
+ # )
171
+ def send_signature_request(opts)
172
+ opts[:client_id] ||= self.client_id
173
+ prepare_files opts
174
+ prepare_signers opts
175
+ prepare_form_fields opts
176
+ prepare_custom_fields opts
177
+ prepare_attachments opts
178
+
179
+ request = HelloSign::Resource::SignatureRequest.new post('/signature_request/send', body: opts)
180
+ end
181
+
182
+ # Creates and sends a new SignatureRequest based off of the Template specified with the template_id parameter.
183
+ # @option opts [Boolean] test_mode Indicates if this is a test SignatureRequest, it will not be legally binding if set to 1. Defaults to 0. (optional)
184
+ # @option opts [Boolean] allow_decline Allows signers to decline the SignatureRequest. Defaults to 0. (optional)
185
+ # @option opts [String] template_id The Template ID to use when creating the SignatureRequest.
186
+ # * Use template_ids[%i%] if using multiple templates, replacing %i% with an integer to indicate the order of the Templates
187
+ # @option opts [String] title Assigns a title to the SignatureRequest. (optional)
188
+ # @option opts [String] subject Sets the subject in the email sent to the signer(s). (optional)
189
+ # @option opts [String] message Sets the message in the email sent to the signer(s). (optional)
190
+ # @option opts [String] signing_redirect_url Redirects the signer(s) to this URL after completing the SignatureRequest. (optional)
191
+ # @option opts [Array<Hash>] signer_file Sets a list of signers, each item is a Hash with these keys:
192
+ # * role (Integer) The signer role indicated on the Template.
193
+ # * name (String) Signer's name
194
+ # * email_address (String) Signer's email address
195
+ # * pin (Integer) Secures the SignatureRequest using this 4-12 character access code. A business plan is required to use this feature. (optional)
196
+ # @option opts [Array<Hash>] ccs The individual(s) to be CC'd on the SignatureRequest. Required when a CC role exists for the Template.
197
+ # * role (String) The CC role indicated on the Template. Note that the role name is case sensitive.
198
+ # * email_address (String) CC Recipient's email address
199
+ # @option opts [Array<Hash>] custom_fields An array of custom merge fields, representing those present on the Template. (optional)
200
+ # * name (String) Custom field name or "Field Label"
201
+ # * value (String) The value of the field. This data will appear on the SignatureRequest.
202
+ # * editor (String) The signer name indicated on the Text Tag or form_fields_per_document that can edit the value of the field. (optional)
203
+ # * required (Boolean) Determines if the field is required or not. (optional)
204
+ # @option opts [Hash] metadata Key-value data attached to the SignatureRequest. (optional)
205
+ # @option opts [String] client_id The API App Client ID associated with the SignatureRequest. (optional)
206
+ # @option opts [Array<String>] files Use files to indicate the uploaded file(s) to append to the SignatureRequest. (optional)
207
+ # @option opts [Array<String>] file_urls Use file_urls to have HelloSign download the file(s) to append to the SignatureRequest. (optional)
208
+ # @option opts [Hash] signing_options Specifies the types allowed for creating a signature. (optional)
209
+ #
210
+ # @return [HelloSign::Resource::SignatureRequest] a SignatureRequest
211
+ #
212
+ # @example
213
+ # signature_request = @client.send_signature_request_with_template(
214
+ # test_mode: 1,
215
+ # allow_decline: 0,
216
+ # client_id: 'b6b8e7deaf8f0b95c029dca049356d4a2cf9710a',
217
+ # template_id: 'c26b8a16784a872da37ea946b9ddec7c1e11dff6',
218
+ # title: 'Purchase Order',
219
+ # subject: 'Purchase Order',
220
+ # message: 'Glad we could come to an agreement.',
221
+ # files: ['NDA.pdf', 'AppendixA.pdf'],
222
+ # metadata: {
223
+ # client_name: 'John Doe',
224
+ # custom_text: 'NDA #9'
225
+ # },
226
+ # signers: [
227
+ # {
228
+ # email_address: 'george@example.com',
229
+ # name: 'George',
230
+ # role: 'Client'
231
+ # }
232
+ # ],
233
+ # ccs: [
234
+ # {
235
+ # email_address: 'accounting@example.com',
236
+ # role: 'Accounting'
237
+ # }
238
+ # ],
239
+ # custom_fields: [
240
+ # {
241
+ # CustomFieldName: '$20,000'
242
+ # }
243
+ # ],
244
+ # signing_options: {
245
+ # draw: true,
246
+ # type: true,
247
+ # upload: false,
248
+ # phone: true,
249
+ # default: 'phone'
250
+ # }
251
+ # )
252
+ def send_signature_request_with_template(opts)
253
+ opts[:client_id] ||= self.client_id
254
+ prepare_signers opts
255
+ prepare_ccs opts
256
+ prepare_templates opts
257
+ prepare_custom_fields opts
258
+ prepare_files opts
259
+
260
+ HelloSign::Resource::SignatureRequest.new post('/signature_request/send_with_template', body: opts)
261
+ end
262
+
263
+ # Creates a BulkSendJob based off of the Template specified with the template_id parameter.
264
+ # @option opts [Boolean] test_mode Indicates if this is a test BulkSendJob, its SignatureRequests will not be legally binding if set to 1. Defaults to 0. (optional)
265
+ # @option opts [String] template_id The Template ID to use when creating the SignatureRequest.
266
+ # * Use template_ids[%i%] if using multiple templates, replacing %i% with an integer to indicate the order of the Templates
267
+ # @option opts [String] title Assigns a title to the SignatureRequest. (optional)
268
+ # @option opts [String] subject Sets the subject in the email sent to the signer(s). (optional)
269
+ # @option opts [String] message Sets the message in the email sent to the signer(s). (optional)
270
+ # @option opts [String] signing_redirect_url Redirects the signer(s) to this URL after completing the SignatureRequest. (optional)
271
+ # @option opts [String] signer_file Uploads a CSV file defining values and options for signer fields. Required if signer_list is not used.
272
+ # @option opts [String] signer_list A JSON array defining values and options for signer fields. Required if signer_file is not used.
273
+ # @option opts [Array<Hash>] custom_fields An array of custom merge fields, representing those present on the Template. (optional)
274
+ # * name (String) Custom field name or "Field Label"
275
+ # * value (String) The value of the field. This data will appear on the SignatureRequest.
276
+ # * editor (String) The signer name indicated on the Text Tag or form_fields_per_document that can edit the value of the field. (optional)
277
+ # * required (Boolean) Determines if the field is required or not. (optional)
278
+ # @option opts [Array<Hash>] ccs The individual(s) to be CC'd on the SignatureRequest. Required when a CC role exists for the Template.
279
+ # * role (String) The CC role indicated on the Template. Note that the role name is case sensitive.
280
+ # * email_address (String) CC Recipient's email address
281
+ # @option opts [Hash] metadata Key-value data attached to the SignatureRequest. (optional)
282
+ # @option opts [String] client_id The API App Client ID associated with the SignatureRequest. (optional)
283
+ #
284
+ # @return [HelloSign::Resource::BulkSendJob] a BulkSendJob
285
+ #
286
+ # @example
287
+ # signature_request = @client.bulk_send_with_template(
288
+ # test_mode: 1,
289
+ # allow_decline: 0,
290
+ # client_id: 'b6b8e7deaf8f0b95c029dca049356d4a2cf9710a',
291
+ # template_id: 'c26b8a16784a872da37ea946b9ddec7c1e11dff6',
292
+ # title: 'Purchase Order',
293
+ # subject: 'Purchase Order',
294
+ # message: 'Glad we could come to an agreement.',
295
+ # metadata: {
296
+ # client_name: 'John Doe',
297
+ # custom_text: 'NDA #9'
298
+ # },
299
+ # signer_list: [
300
+ # {
301
+ # signers: {
302
+ # Client: {
303
+ # name: 'George',
304
+ # email_address: 'bulksend1@example.com'
305
+ # }
306
+ # },
307
+ # custom_fields: {
308
+ # address: '100 Grand'
309
+ # }
310
+ # },
311
+ # {
312
+ # signers: {
313
+ # Client: {
314
+ # name: 'Mary',
315
+ # email_address: 'bulksend2@example.com'
316
+ # }
317
+ # }
318
+ # }
319
+ # ],
320
+ # ccs: [
321
+ # {
322
+ # email_address: 'accounting@example.com',
323
+ # role: 'Accounting'
324
+ # }
325
+ # ]
326
+ # )
327
+ def bulk_send_with_template(opts)
328
+ opts[:client_id] ||= self.client_id
329
+ prepare_bulk_signers opts
330
+ prepare_ccs opts
331
+ prepare_templates opts
332
+ prepare_custom_fields opts
333
+
334
+ HelloSign::Resource::BulkSendJob.new post('/signature_request/bulk_send_with_template', body: opts)
335
+ end
336
+
337
+ # Creates an embedded BulkSendJob based off of the Template specified with the template_id parameter.
338
+ # @option opts [Boolean] test_mode Indicates if this is a test BulkSendJob, its SignatureRequests will not be legally binding if set to 1. Defaults to 0. (optional)
339
+ # @option opts [String] template_id The Template ID to use when creating the SignatureRequest.
340
+ # * Use template_ids[%i%] if using multiple templates, replacing %i% with an integer to indicate the order of the Templates
341
+ # @option opts [String] client_id The API App Client ID associated with this embedded BulkSendJob.
342
+ # @option opts [String] title Assigns a title to the SignatureRequest. (optional)
343
+ # @option opts [String] subject Sets the subject in the email sent to the signer(s). (optional)
344
+ # @option opts [String] message Sets the message in the email sent to the signer(s). (optional)
345
+ # @option opts [String] signing_redirect_url Redirects the signer(s) to this URL after completing the SignatureRequest. (optional)
346
+ # @option opts [String] signer_file Uploads a CSV file defining values and options for signer fields. Required if signer_list is not used.
347
+ # @option opts [String] signer_list A JSON array defining values and options for signer fields. Required if signer_file is not used.
348
+ # @option opts [Array<Hash>] custom_fields An array of custom merge fields, representing those present on the Template. (optional)
349
+ # * name (String) Custom field name or "Field Label"
350
+ # * value (String) The value of the field. This data will appear on the SignatureRequest.
351
+ # * editor (String) The signer name indicated on the Text Tag or form_fields_per_document that can edit the value of the field. (optional)
352
+ # * required (Boolean) Determines if the field is required or not. (optional)
353
+ # @option opts [Array<Hash>] ccs The individual(s) to be CC'd on the SignatureRequest. Required when a CC role exists for the Template.
354
+ # * role (String) The CC role indicated on the Template. Note that the role name is case sensitive.
355
+ # * email_address (String) CC Recipient's email address
356
+ # @option opts [Hash] metadata Key-value data attached to the SignatureRequest. (optional)
357
+ # @option opts [String] client_id The API App Client ID associated with the SignatureRequest. (optional)
358
+ #
359
+ # @return [HelloSign::Resource::BulkSendJob] a BulkSendJob
360
+ #
361
+ # @example
362
+ # signature_request = @client.embedded_bulk_send_with_template(
363
+ # test_mode: 1,
364
+ # allow_decline: 0,
365
+ # template_id: 'c26b8a16784a872da37ea946b9ddec7c1e11dff6',
366
+ # client_id: 'b6b8e7deaf8f0b95c029dca049356d4a2cf9710a',
367
+ # title: 'Purchase Order',
368
+ # subject: 'Purchase Order',
369
+ # message: 'Glad we could come to an agreement.',
370
+ # metadata: {
371
+ # client_name: 'John Doe',
372
+ # custom_text: 'NDA #9'
373
+ # },
374
+ # signer_list: [
375
+ # {
376
+ # signers: {
377
+ # Client: {
378
+ # name: 'George',
379
+ # email_address: 'bulksend1@example.com'
380
+ # }
381
+ # },
382
+ # custom_fields: {
383
+ # address: '100 Grand'
384
+ # }
385
+ # },
386
+ # {
387
+ # signers: {
388
+ # Client: {
389
+ # name: 'Mary',
390
+ # email_address: 'bulksend2@example.com'
391
+ # }
392
+ # }
393
+ # }
394
+ # ],
395
+ # ccs: [
396
+ # {
397
+ # email_address: 'accounting@example.com',
398
+ # role: 'Accounting'
399
+ # }
400
+ # ]
401
+ # )
402
+ def embedded_bulk_send_with_template(opts)
403
+ opts[:client_id] ||= self.client_id
404
+ prepare_bulk_signers opts
405
+ prepare_ccs opts
406
+ prepare_templates opts
407
+ prepare_custom_fields opts
408
+
409
+ HelloSign::Resource::BulkSendJob.new post('/signature_request/bulk_create_embedded_with_template', body: opts)
410
+ end
411
+
412
+ # Sends an email reminder to the signer about the SignatureRequest.
413
+ # @option opts [String] signature_request_id Indicates the ID of the SignatureRequest to send a reminder.
414
+ # @option opts [String] email_address The email address of the signer who will receive a reminder.
415
+ # @option opts [String] name The name of the signer who will receive a reminder. (optional)
416
+ #
417
+ # @return [HelloSign::Resource::SignatureRequest] a SignatureRequest
418
+ #
419
+ # @example
420
+ # signature_request = @client.remind_signature_request(
421
+ # signature_request_id: '75cdf7dc8b323d43b347e4a3614d1f822bd09491',
422
+ # :email_address: 'john@example.com'
423
+ # )
424
+ def remind_signature_request(opts)
425
+ HelloSign::Resource::SignatureRequest.new post("/signature_request/remind/#{opts[:signature_request_id]}", body: opts)
426
+ end
427
+
428
+ # Cancels an incomplete SignatureRequest.
429
+ # @option opts [String] signature_request_id The ID of SignatureRequest to cancel.
430
+ #
431
+ # @return [HTTP::Status] 200 OK
432
+ #
433
+ # @example
434
+ # @client.cancel_signature_request signature_request_id: '75cdf7dc8b323d43b347e4a3614d1f822bd09491'
435
+ def cancel_signature_request(opts)
436
+ post("/signature_request/cancel/#{opts[:signature_request_id]}", body: opts)
437
+ end
438
+
439
+ # Removes your access to a completed a SignatureRequest.
440
+ # @option opts [String] signature_request_id The ID of the completed SignatureRequest to remove access.
441
+ #
442
+ # @return [HTTP::Status] 200 OK
443
+ #
444
+ # @example
445
+ # @client.remove_signature_request signature_request_id: '75cdf7dc8b323d43b347e4a3614d1f822bd09491'
446
+ def remove_signature_request(opts)
447
+ post("/signature_request/remove/#{opts[:signature_request_id]}", body: opts)
448
+ end
449
+
450
+ # Downloads a copy of the SignatureRequest documents.
451
+ # @option opts [String] signature_request_id The ID of the SignatureRequest to download.
452
+ # @option opts [String] file_type Determines the format of the file - either 'pdf' or 'zip' depending on the file type desired. Defaults to pdf. (optional)
453
+ # @option opts [Boolean] get_url Response contains a URL link to the file if set to true. Links are only available for PDFs and have a TTL of 3 days. Defaults to false. (optional)
454
+ #
455
+ # @return a PDF or Zip
456
+ #
457
+ # @example
458
+ # pdf = @client.signature_request_files signature_request_id: '75cdf7dc8b323d43b347e4a3614d1f822bd09491'
459
+ def signature_request_files(opts)
460
+ path = "/signature_request/files/#{opts[:signature_request_id]}"
461
+ if opts[:file_type]
462
+ path = path + "?file_type=#{opts[:file_type]}"
463
+ end
464
+
465
+ if opts[:get_url]
466
+ separator = opts[:file_type].nil? ? '?' : '&'
467
+ path = path + "#{separator}get_url=#{opts[:get_url]}"
468
+ elsif opts[:get_data_uri]
469
+ separator = opts[:file_type].nil? ? '?' : '&'
470
+ path = path + "#{separator}get_data_uri=#{opts[:get_data_uri]}"
471
+ end
472
+
473
+ get(path)[:body]
474
+ end
475
+
476
+ # Creates a new SignatureRequest with the submitted documents to be signed in an embedded iFrame.
477
+ # If form_fields_per_document is not specified or use_text_tags is not enabled, a signature page will be affixed at the end.
478
+ # See our Embedded Signing Walkthrough for more information on Embedded Signing: https://app.hellosign.com/api/embeddedSigningWalkthrough.
479
+ # @option opts [Boolean] test_mode Indicates if this is a test SignatureRequest, it will not be legally binding if set to 1. Defaults to 0. (optional)
480
+ # @option opts [String] client_id The API App Client ID associated with this embedded SignatureRequest.
481
+ # @option opts [Array<String>] files Use files to indicate the uploaded file(s) to send for signature. Currently we only support use of either the files parameter or file_urls parameter, not both.
482
+ # @option opts [Array<String>] file_urls Use file_urls to have HelloSign download the file(s) to send for signature. Currently we only support use of either the files parameter or file_urls parameter, not both.
483
+ # @option opts [String] title Assigns a title to the SignatureRequest. (optional)
484
+ # @option opts [String] subject Sets the subject in the email sent to the signer(s). (optional)
485
+ # @option opts [String] message Sets the message in the email sent to the signer(s). (optional)
486
+ # @option opts [Array<Hash>] signers Sets a list of signers, each item is a Hash with these keys:
487
+ # * name (String) Signer's name
488
+ # * email_address (String) Signer's email address
489
+ # * order (Integer) The order the signers are required to sign in (optional)
490
+ # * pin (Integer) Secures the SignatureRequest using this 4-12 character access code. A business plan is required to use this feature. (optional)
491
+ # @option opts [Array<Hash>] attachments Sets a list of attachments signers can upload
492
+ # * name (String) Attachment name
493
+ # * instructions (String) Instructions for uploading the attachment. (optional)
494
+ # * signer_index (Integer) The signer's unique number.
495
+ # * required (Boolean) Determines if the signer is required to upload this attachment. Defaults to 0. (Optional)
496
+ # @option opts [Array<Hash>] custom_fields An array of custom merge fields, representing those present on the document with Text Tags or form_fields_per_document (optional)
497
+ # * name (String) Custom field name or "Field Label"
498
+ # * value (String) The value of the field. This data will appear on the SignatureRequest.
499
+ # * editor (String) The signer name indicated on the Text Tag or form_fields_per_document that can edit the value of the field. (optional)
500
+ # * required (Boolean) Determines if the field is required or not. (optional)
501
+ # @option opts [Array<String>] cc_email_addresses The email addresses that should be CCed on the SignatureRequest. (optional)
502
+ # @option opts [Boolean] use_text_tags Indicates whether the SignatureRequest should have Text Tags enabled. Defaults to 0. (optional)
503
+ # @option opts [Boolean] hide_text_tags Indicates whether the Text Tags should be removed automatically. Note that this is not the preferred method. Defaults to 0. (optional)
504
+ # @option opts [Hash] metadata Key-value data attached to the SignatureRequest. (optional)
505
+ # @option opts [Boolean] allow_decline Allows signers to decline the SignatureRequest. Defaults to 0. (optional)
506
+ # @option opts [Boolean] allow_reassign Allows signers to reassign the SignatureRequest to another signer. Defaults to 0. (optional)
507
+ # @option opts [Array<Hash>] form_fields_per_document The fields that should appear on the document. (optional)
508
+ # @option opts [Hash] signing_options Specifies the types allowed for creating a signature. (optional)
509
+ #
510
+ # @return [HelloSign::Resource::SignatureRequest] a SignatureRequest
511
+ #
512
+ # @example
513
+ # request = @client.create_embedded_signature_request(
514
+ # test_mode: 1,
515
+ # allow_decline: 1,
516
+ # client_id: 'b6b8e7deaf8f0b95c029dca049356d4a2cf9710a',
517
+ # title: 'NDA with Acme Co.',
518
+ # subject: 'The NDA we talked about',
519
+ # message: 'Please sign this NDA and then we can discuss more. Let me know if you have any questions.',
520
+ # metadata: {
521
+ # client_name: 'John Doe',
522
+ # custom_text: 'NDA #9'
523
+ # },
524
+ # signers: [
525
+ # {
526
+ # email_address: 'jack@example.com',
527
+ # name: 'Jack',
528
+ # order: 0,
529
+ # },
530
+ # {
531
+ # email_address: 'jill@example.com',
532
+ # name: 'Jill',
533
+ # order: 1,
534
+ # }
535
+ # ],
536
+ # attachments: [{
537
+ # name: 'Passport',
538
+ # instructions: 'Upload your US Passport',
539
+ # signer_index: 0,
540
+ # required: true
541
+ # },
542
+ # {
543
+ # name: 'Driver's License',
544
+ # instructions: 'Upload your CA Driver's License',
545
+ # signer_index: 1,
546
+ # required: false
547
+ # }
548
+ # ],
549
+ # cc_email_addresses: ['lawyer@example.com', 'lawyer@example2.com'],
550
+ # files: ['NDA.pdf', 'AppendixA.pdf'],
551
+ # signing_options: {
552
+ # draw: true,
553
+ # type: true,
554
+ # upload: false,
555
+ # phone: true,
556
+ # default: 'phone'
557
+ # }
558
+ # )
559
+ def create_embedded_signature_request(opts)
560
+ opts[:client_id] ||= self.client_id
561
+ prepare_files opts
562
+ prepare_signers opts
563
+ prepare_form_fields opts
564
+ prepare_custom_fields opts
565
+ prepare_attachments opts
566
+
567
+ HelloSign::Resource::SignatureRequest.new post('/signature_request/create_embedded', body: opts)
568
+ end
569
+
570
+ # Creates a new SignatureRequest based on the given Template to be signed in an embedded iFrame.
571
+ # See our Embedded Signing Walkthrough for more information on Embedded Signing: https://app.hellosign.com/api/embeddedSigningWalkthrough.
572
+ # @option opts [Boolean] test_mode Indicates if this is a test SignatureRequest, it will not be legally binding if set to 1. Defaults to 0. (optional)
573
+ # @option opts [String] client_id The API App Client ID associated with this embedded SignatureRequest.
574
+ # @option opts [String] template_id The Template ID to use when creating the SignatureRequest.
575
+ # * Use template_ids[%i%] if using multiple templates, replacing %i% with an integer to indicate the order of the Templates
576
+ # @option opts [String] title Assigns a title to the SignatureRequest. (optional)
577
+ # @option opts [String] subject Sets the subject in the email sent to the signer(s). (optional)
578
+ # @option opts [String] message Sets the message in the email sent to the signer(s). (optional)
579
+ # @option opts [Array<Hash>] signers Sets a list of signers, each item is a Hash with these keys:
580
+ # * name (String) Signer's name
581
+ # * email_address (String) Signer's email address
582
+ # * order (Integer) The order the signers are required to sign in (optional)
583
+ # * pin (Integer) Secures the SignatureRequest using this 4-12 character access code. A business plan is required to use this feature. (optional)
584
+ # @option opts [Array<Hash>] ccs The individual(s) to be CC'd on the SignatureRequest. Required when a CC role exists for the Template.
585
+ # * role (String) The CC role indicated on the Template. Note that the role name is case sensitive.
586
+ # * email_address (String) CC Recipient's email address
587
+ # @option opts [Array<Hash>] custom_fields An array of custom merge fields, representing those present in the Template. (optional)
588
+ # * name (String) Custom field name or "Field Label"
589
+ # * value (String) The value of the field. This data will appear on the SignatureRequest.
590
+ # * editor (String) The signer name indicated on the Text Tag or form_fields_per_document that can edit the value of the field. (optional)
591
+ # * required (Boolean) Determines if the field is required or not. (optional)
592
+ # @option opts [Hash] metadata Key-value data attached to the SignatureRequest. (optional)
593
+ # @option opts [Array<String>] files Use files to indicate the uploaded file(s) to append to the SignatureRequest. (optional)
594
+ # @option opts [Array<String>] file_urls Use file_urls to have HelloSign download the file(s) to append to the SignatureRequest. (optional)
595
+ # @option opts [Hash] signing_options Specifies the types allowed for creating a signature. (optional)
596
+ #
597
+ # @return [HelloSign::Resource::SignatureRequest] a SignatureRequest
598
+ #
599
+ # @example
600
+ # request = @client.create_embedded_signature_request_with_template(
601
+ # test_mode: 1,
602
+ # allow_decline: 1,
603
+ # client_id: 'b6b8e7deaf8f0b95c029dca049356d4a2cf9710a',
604
+ # template_id: 'c26b8a16784a872da37ea946b9ddec7c1e11dff6',
605
+ # title: 'Purchase Order',
606
+ # subject: 'Purchase Order',
607
+ # message: 'Glad we could come to an agreement.',
608
+ # files: ['NDA.pdf', 'AppendixA.pdf'],
609
+ # metadata: {
610
+ # client_name: 'John Doe',
611
+ # custom_text: 'NDA #9'
612
+ # },
613
+ # signers: [
614
+ # {
615
+ # email_address: 'george@example.com',
616
+ # name: 'George',
617
+ # role: 'Client'
618
+ # }
619
+ # ],
620
+ # ccs: [
621
+ # {
622
+ # email_address: 'accounting@example.com',
623
+ # role: 'Accounting'
624
+ # }
625
+ # ],
626
+ # custom_fields: {
627
+ # Cost: '$20,000'
628
+ # },
629
+ # signing_options: {
630
+ # draw: true,
631
+ # type: true,
632
+ # upload: false,
633
+ # phone: true,
634
+ # default: 'phone'
635
+ # }
636
+ # )
637
+ #
638
+ def create_embedded_signature_request_with_template(opts)
639
+ opts[:client_id] ||= self.client_id
640
+ prepare_signers opts
641
+ prepare_ccs opts
642
+ prepare_templates opts
643
+ prepare_custom_fields opts
644
+ prepare_files opts
645
+
646
+ HelloSign::Resource::SignatureRequest.new post('/signature_request/create_embedded_with_template', body: opts)
647
+ end
648
+
649
+ # Releases a held SignatureRequest that was claimed and prepared from an UnclaimedDraft.
650
+ # @option opts [String] signature_request_id The ID of the SignatureRequest to release.
651
+ #
652
+ # @return [HelloSign::Resource::SignatureRequest] a SignatureRequest
653
+ #
654
+ # @example
655
+ # @client.release_on_hold_signature_request signature_request_id: '75cdf7dc8b323d43b347e4a3614d1f822bd09491'
656
+ def release_on_hold_signature_request(opts)
657
+ HelloSign::Resource::SignatureRequest.new post("/signature_request/release_hold/#{opts[:signature_request_id]}", body: opts)
658
+ end
659
+
660
+ # Updates the email address on a SignatureRequest.
661
+ # @option opts [String] signature_request_id The ID of the SignatureRequest to update.
662
+ # @option opts [String] signature_id The Signature ID of the recipient to update.
663
+ # @option opts [String] email_address The new email address of the recipient.
664
+ #
665
+ # @return [HelloSign::Resource::SignatureRequest] a SignatureRequest
666
+ #
667
+ # @example
668
+ # @client.update_signature_request(
669
+ # signature_request_id: '75cdf7dc8b323d43b347e4a3614d1f822bd09491',
670
+ # signature_id: '5064ca698bde9581ad75f6d62450eb4b',
671
+ # email_address: 'newEmail@example.com'
672
+ # )
673
+ def update_signature_request(opts)
674
+ signature_request_id = opts.delete(:signature_request_id)
675
+ path = "/signature_request/update/#{signature_request_id}"
676
+ HelloSign::Resource::SignatureRequest.new post(path, body: opts)
677
+ end
678
+
679
+ # Releases a held SignatureRequest that was claimed and prepared from an UnclaimedDraft.
680
+ # @option opts [String] signature_request_id The ID of the SignatureRequest to release.
681
+ #
682
+ # @return [HelloSign::Resource::SignatureRequest] a SignatureRequest
683
+ #
684
+ # @example
685
+ # @client.release_signature_request signature_request_id: '75cdf7dc8b323d43b347e4a3614d1f822bd09491'
686
+ def release_hold_signature_request(opts)
687
+ HelloSign::Resource::SignatureRequest.new post("/signature_request/release_hold/#{opts[:signature_request_id]}", body: opts)
688
+ end
689
+ end
690
+ end
691
+ end