Class: GroupDocs::Signature::Form

Inherits:
Api::Entity show all
Extended by:
ResourceMethods
Includes:
Api::Helpers::SignaturePublic, DocumentMethods, EntityMethods, FieldMethods
Defined in:
lib/groupdocs/signature/form.rb

Constant Summary collapse

STATUSES =
{
  :draft       => -1,
  :in_progress =>  1,
  :completed   =>  2,
  :archived    =>  3,
}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ResourceMethods

resources!

Methods included from FieldMethods

#assign_field!, #delete_field!, #delete_field_location!, #modify_field!

Methods included from DocumentMethods

#add_document!, #remove_document!, #rename_document!

Methods included from EntityMethods

#delete!, included, #modify!, #rename!

Methods inherited from Api::Entity

#initialize, #inspect, #to_hash

Methods included from Api::Helpers::Accessor

#alias_accessor

Constructor Details

This class inherits a constructor from GroupDocs::Api::Entity

Instance Attribute Details

#canParticipantDownloadFormObject



98
99
100
# File 'lib/groupdocs/signature/form.rb', line 98

def canParticipantDownloadForm
  @canParticipantDownloadForm
end

#createdTimeStampObject



86
87
88
# File 'lib/groupdocs/signature/form.rb', line 86

def createdTimeStamp
  @createdTimeStamp
end

#documentsCountObject



90
91
92
# File 'lib/groupdocs/signature/form.rb', line 90

def documentsCount
  @documentsCount
end

#documentsPagesObject



92
93
94
# File 'lib/groupdocs/signature/form.rb', line 92

def documentsPages
  @documentsPages
end

#fieldsInFinalFileNameObject



96
97
98
# File 'lib/groupdocs/signature/form.rb', line 96

def fieldsInFinalFileName
  @fieldsInFinalFileName
end

#idObject



78
79
80
# File 'lib/groupdocs/signature/form.rb', line 78

def id
  @id
end

#nameObject



80
81
82
# File 'lib/groupdocs/signature/form.rb', line 80

def name
  @name
end

#notifyOwnerOnSignObject



106
107
108
# File 'lib/groupdocs/signature/form.rb', line 106

def notifyOwnerOnSign
  @notifyOwnerOnSign
end

#ownerGuidObject



82
83
84
# File 'lib/groupdocs/signature/form.rb', line 82

def ownerGuid
  @ownerGuid
end

#participantsCountObject



94
95
96
# File 'lib/groupdocs/signature/form.rb', line 94

def participantsCount
  @participantsCount
end

#statusSymbol

Converts status to human-readable format.

Returns:

  • (Symbol)


100
101
102
# File 'lib/groupdocs/signature/form.rb', line 100

def status
  @status
end

#statusDateTimeObject



88
89
90
# File 'lib/groupdocs/signature/form.rb', line 88

def statusDateTime
  @statusDateTime
end

#templateGuidObject



84
85
86
# File 'lib/groupdocs/signature/form.rb', line 84

def templateGuid
  @templateGuid
end

#waterMarkImageObject



104
105
106
# File 'lib/groupdocs/signature/form.rb', line 104

def waterMarkImage
  @waterMarkImage
end

#waterMarkTextObject



102
103
104
# File 'lib/groupdocs/signature/form.rb', line 102

def waterMarkText
  @waterMarkText
end

Class Method Details

.all!(options = {}, access = {}) ⇒ Array<GroupDocs::Signature::Form>

Returns a list of all forms.

Parameters:

  • options (Hash) (defaults to: {})

    Hash of options

  • access (Hash) (defaults to: {})

    Access credentials

Options Hash (options):

  • :page (Integer)

    Page to start with

  • :records (Integer)

    How many items to list

  • :status_id (Integer)

    Filter by status identifier

  • :document (String)

    Filter by document GUID

  • :date (String)

    Filter by date

  • :name (String)

    Filter by name

Options Hash (access):

  • :client_id (String)
  • :private_key (String)

Returns:



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/groupdocs/signature/form.rb', line 35

def self.all!(options = {}, access = {})
  status_id = options.delete(:status_id)
  options[:statusId] = status_id if status_id

  api = Api::Request.new do |request|
    request[:access] = access
    request[:method] = :GET
    request[:path] = '/signature/{{client_id}}/forms'
  end
  api.add_params(options)
  json = api.execute!

  json[:forms].map do |form|
    new(form)
  end
end

.get!(id, options = {}, access = {}) ⇒ GroupDocs::Signature::Form

Returns form by its identifier.

Parameters:

  • id (String)
  • options (Hash) (defaults to: {})
  • access (Hash) (defaults to: {})

    Access credentials

Options Hash (options):

  • :public (Boolean)

    Defaults to false

Options Hash (access):

  • :client_id (String)
  • :private_key (String)

Returns:



63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/groupdocs/signature/form.rb', line 63

def self.get!(id, options = {}, access = {})
  if options[:public]
    json = Api::Request.new do |request|
      request[:access] = access
      request[:method] = :GET
      request[:path] = "/signature/public/forms/#{id}"
    end.execute!

    new(json[:form])
  else
    super(id, access)
  end
end

Instance Method Details

#add_field!(field, document, opts = {}, access = {}) ⇒ Object

Adds field for document.

Examples:

form = GroupDocs::Signature::Form.get!("g94h5g84hj9g4gf23i40j")
field = GroupDocs::Signature::Field.get!.detect { |f| f.type == :signature }
field.location = { location_x: 0.1, location_y: 0.1, page: 1 }
document = form.documents!.first
form.add_field! field, document

Parameters:

Options Hash (access):

  • :client_id (String)
  • :private_key (String)

Raises:

  • (ArgumentError)

    if field is not GroupDocs::Signature::Field

  • (ArgumentError)

    if document is not GroupDocs::Document

  • (ArgumentError)

    if field does not specify location



312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
# File 'lib/groupdocs/signature/form.rb', line 312

def add_field!(field, document, opts = {}, access = {})
  field.is_a?(GroupDocs::Signature::Field) or raise ArgumentError,
    "Field should be GroupDocs::Signature::Field object, received: #{field.inspect}"
  document.is_a?(GroupDocs::Document) or raise ArgumentError,
    "Document should be GroupDocs::Document object, received: #{document.inspect}"
  field.location or raise ArgumentError,
    "You have to specify field location, received: #{field.location.inspect}"

  opts[:force_new_field] = true if opts[:force_new_field].nil?
  payload = field.to_hash # field itself
  payload.merge!(field.location.to_hash) # location should added in plain view (i.e. not "location": {...})
  payload.merge!(:forceNewField => opts[:force_new_field]) # create new field flag

  Api::Request.new do |request|
    request[:access] = access
    request[:method] = :POST
    request[:path] = "/signature/{{client_id}}/forms/#{id}/documents/#{document.file.guid}/field/#{field.id}"
    request[:request_body] = payload
  end.execute!
end

#archive!(access = {}) ⇒ Object

Archives completed form.

Parameters:

  • access (Hash) (defaults to: {})

    Access credentials

Options Hash (access):

  • :client_id (String)
  • :private_key (String)


253
254
255
256
257
258
259
# File 'lib/groupdocs/signature/form.rb', line 253

def archive!(access = {})
  Api::Request.new do |request|
    request[:access] = access
    request[:method] = :PUT
    request[:path] = "/signature/{{client_id}}/forms/#{id}/archive"
  end.execute!
end

#complete!(access = {}) ⇒ Object

Completes form.

Parameters:

  • access (Hash) (defaults to: {})

    Access credentials

Options Hash (access):

  • :client_id (String)
  • :private_key (String)


238
239
240
241
242
243
244
# File 'lib/groupdocs/signature/form.rb', line 238

def complete!(access = {})
  Api::Request.new do |request|
    request[:access] = access
    request[:method] = :PUT
    request[:path] = "/signature/{{client_id}}/forms/#{id}/complete"
  end.execute!
end

#create!(options = {}, access = {}) ⇒ Object

Creates form.

Examples:

form = GroupDocs::Signature::Form.new
form.name = "Form"
form.create!

Parameters:

  • options (Hash) (defaults to: {})

    Hash of options

  • access (Hash) (defaults to: {})

    Access credentials

Options Hash (options):

  • :template_id (String)

    Template GUID to create form from

  • :assembly_id (Integer)

    Questionnaire identifier to create form from

Options Hash (access):

  • :client_id (String)
  • :private_key (String)

Raises:

  • (ArgumentError)

    if template is not GroupDocs::Signature::Template



167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
# File 'lib/groupdocs/signature/form.rb', line 167

def create!(options = {}, access = {})
  #template_id = options.delete(:template_id)
  #assembly_id = options.delete(:assembly_id)
  #options[:templateId] = template_id if template_id
  #options[:assemblyId] = assembly_id if assembly_id

  api = Api::Request.new do |request|
    request[:access] = access
    request[:method] = :POST
    request[:path] = '/signature/{{client_id}}/form'
    request[:request_body] = to_hash

  end

  api.add_params(options.merge(:name => name))
  json = api.execute!

  self.id = json[:form][:id]
end

#documents!(options = {}, access = {}) ⇒ Array<GroupDocs::Document>

Returns documents array.

Parameters:

  • options (Hash) (defaults to: {})
  • access (Hash) (defaults to: {})

    Access credentials

Options Hash (options):

  • :public (Boolean)

    Defaults to false

Options Hash (access):

  • :client_id (String)
  • :private_key (String)

Returns:



197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
# File 'lib/groupdocs/signature/form.rb', line 197

def documents!(options = {}, access = {})
  client_id = client_id(options[:public])

  json = Api::Request.new do |request|
    request[:access] = access
    request[:method] = :GET
    request[:path] = "/signature/#{client_id}/forms/#{id}/documents"
  end.execute!

  json[:documents].map do |document|
    id = document[:documentId] || document[:id]
    file = Storage::File.new(:guid => id, :name => document[:name])
    Document.new(document.merge(:file => file))
  end
end

#fields!(document, options = {}, access = {}) ⇒ Object

Changed in release 1.5.8

Returns an array of fields for document per participant.

Parameters:

  • document (GroupDocs::Document)
  • options (Hash) (defaults to: {})
  • access (Hash) (defaults to: {})

    Access credentials

Options Hash (options):

  • :field (String)

    Field GUID

Options Hash (access):

  • :client_id (String)
  • :private_key (String)

Raises:

  • (ArgumentError)

    if document is not GroupDocs::Document



274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
# File 'lib/groupdocs/signature/form.rb', line 274

def fields!(document, options = {}, access = {})
  document.is_a?(GroupDocs::Document) or raise ArgumentError,
    "Document should be GroupDocs::Document object, received: #{document.inspect}"

  api = Api::Request.new do |request|
    request[:access] = access
    request[:method] = :GET
    request[:path] = "/signature/{{client_id}}/forms/#{id}/documents/#{document.file.guid}/fields"
  end
  api.add_params(options)
  json = api.execute!

  json[:fields].map do |field|
    Signature::Field.new(field)
  end
end

#fields_in_final_file_nameArray<String>

Converts field names to human-readable format.

Returns:

  • (Array<String>)


147
148
149
# File 'lib/groupdocs/signature/form.rb', line 147

def fields_in_final_file_name
  @fieldsInFinalFileName.split(',') if @fieldsInFinalFileName
end

#fields_in_final_file_name=(fields) ⇒ Object

Converts array of field names to machine-readable format.

Parameters:

  • fields (Array<String>)


135
136
137
138
139
140
141
# File 'lib/groupdocs/signature/form.rb', line 135

def fields_in_final_file_name=(fields)
  if fields.is_a?(Array)
    fields = fields.join(',')
  end

  @fieldsInFinalFileName = fields
end

#modify_field_location!(location, field, document, access = {}) ⇒ Object

Modifies field location.

Examples:

Modify field location in template

form = GroupDocs::Signature::Form.get!("g94h5g84hj9g4gf23i40j")
document = form.documents!.first
field = form.fields!(document).first
location = field.locations.first
location.x = 0.123
location.y = 0.123
location.page = 2
form.modify_field_location! location, field, document

Parameters:

Options Hash (access):

  • :client_id (String)
  • :private_key (String)

Raises:

  • (ArgumentError)

    if location is not GroupDocs::Signature::Field::Location

  • (ArgumentError)

    if field is not GroupDocs::Signature::Field

  • (ArgumentError)

    if document is not GroupDocs::Document



356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
# File 'lib/groupdocs/signature/form.rb', line 356

def modify_field_location!(location, field, document, access = {})
  location.is_a?(GroupDocs::Signature::Field::Location) or raise ArgumentError,
    "Location should be GroupDocs::Signature::Field::Location object, received: #{location.inspect}"
  field.is_a?(GroupDocs::Signature::Field) or raise ArgumentError,
    "Field should be GroupDocs::Signature::Field object, received: #{field.inspect}"
  document.is_a?(GroupDocs::Document) or raise ArgumentError,
    "Document should be GroupDocs::Document object, received: #{document.inspect}"

  Api::Request.new do |request|
    request[:access] = access
    request[:method] = :PUT
    request[:path] = "/signature/{{client_id}}/forms/#{id}/documents/#{document.file.guid}/fields/#{field.id}/locations/#{location.id}"
    request[:request_body] = location.to_hash
  end.execute!
end

#modify_form_document!(document, options = {}, access = {}) ⇒ Object

Modify signature form document

Examples:

form = GroupDocs::Signature::Form.get!("g94h5g84hj9g4gf23i40j")
document = form.documents!.first
field = form.fields!(document).first
field.name = "Field"
envelope.modify_field! field, document

Parameters:

  • document (GroupDocs::Document)
  • options (Hash) (defaults to: {})
  • access (Hash) (defaults to: {})

    Access credentials

Options Hash (options):

  • Order (Integer)
  • newDocumentGuid (String)

Options Hash (access):

  • :client_id (String)
  • :private_key (String)

Raises:

  • (ArgumentError)

    if document is not GroupDocs::Document



412
413
414
415
416
417
418
419
420
421
422
# File 'lib/groupdocs/signature/form.rb', line 412

def modify_form_document!(document, options = {}, access = {})
  document.is_a?(GroupDocs::Document) or raise ArgumentError,
                                               "Document should be GroupDocs::Document object, received: #{document.inspect}"

  Api::Request.new do |request|
    request[:access] = access
    request[:method] = :PUT
    request[:path] = "/signature/{{client_id}}/forms/#{id}/document/#{document.file.guid}/"
    request[:request_body] = options
  end.execute!
end

#participant!(participant, access = {}) ⇒ Array

Changed in release 1.5.8

Get signature form participant.

Parameters:

  • participant (String)

    Participant GUID

  • access (Hash) (defaults to: {})

    Access credentials

Options Hash (access):

  • :client_id (String)
  • :private_key (String)

Returns:

  • (Array)


596
597
598
599
600
601
602
603
604
# File 'lib/groupdocs/signature/form.rb', line 596

def participant!(participant, access = {})
  json = Api::Request.new do |request|
    request[:access] = access
    request[:method] = :GET
    request[:path] = "/signature/public/forms/#{form}/participants/#{participant}"
  end.execute!

  json[:participant]
end

#public_fields!(options = {}, access = {}) ⇒ Array

Changed in release 1.5.8

Get form fields for document in form per participant

Parameters:

  • options (Hash) (defaults to: {})
  • access (Hash) (defaults to: {})

    Access credentials

  • [String] (Hash)

    a customizable set of options

Options Hash (access):

  • :client_id (String)
  • :private_key (String)

Returns:

  • (Array)


570
571
572
573
574
575
576
577
578
579
580
581
582
# File 'lib/groupdocs/signature/form.rb', line 570

def public_fields!(options = {}, access = {})
  api = Api::Request.new do |request|
    request[:access] = access
    request[:method] = :GET
    request[:path] = "/signature/public/forms/#{id}/fields"
  end
  api.add_params(options)
  json = api.execute!

  json[:fields].map do |field|
    Signature::Field.new(field)
  end
end

#public_fill!(access = {}) ⇒ Array

Parameters:

  • form (String)

    Form GUID

  • access (Hash) (defaults to: {})

    Access credentials

Options Hash (access):

  • :client_id (String)
  • :private_key (String)

Returns:

  • (Array)


465
466
467
468
469
470
471
# File 'lib/groupdocs/signature/form.rb', line 465

def public_fill!(access = {})
  Api::Request.new do |request|
    request[:access] = access
    request[:method] = :GET
    request[:path] = "/signature/public/forms/#{id}/fill"
  end.execute!
end

#public_fill_field!(value, field, document, participant, authentication, access = {}) ⇒ Array

Changed in release 1.5.8

Public fill form field.

Examples:

Fill single line field

form = GroupDocs::Signature::Form.get!("g94h5g84hj9g4gf23i40j")
document = form.documents!.first
field = form.fields!(document).first
fill_form = form.public_fill!
participant = fill_form[:participant][:id]
envelope.fill_field! "my_data", field, document, participant

Fill signature field

form = GroupDocs::Signature::Form.get!("g94h5g84hj9g4gf23i40j")
document = form.documents!.first
field = form.fields!(document).first
fill_form = form.public_fill!
participant = fill_form[:participant][:id]
signature = GroupDocs::Signature.get!.first
form.fill_field! signature, field, document, participant

Fill checkbox field

form = GroupDocs::Signature::Form.get!("g94h5g84hj9g4gf23i40j")
document = form.documents!.first
field = form.fields!(document).first
fill_form = form.public_fill!
participant = fill_form[:participant][:id]
form.fill_field! false, field, document, participant

Parameters:

  • document (GroupDocs::Document)

    Document GUID

  • participant (String)

    Participant ID

  • field (GroupDocs::Signature::Field)

    Field GUID

  • authentication (String)

    Authentication signature

  • value (File Stream)

    Data to be placed in field

  • access (Hash) (defaults to: {})

    Access credentials

Options Hash (access):

  • :client_id (String)
  • :private_key (String)

Returns:

  • (Array)


514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
# File 'lib/groupdocs/signature/form.rb', line 514

def public_fill_field!(value, field, document, participant, authentication,  access = {})
  field.is_a?(GroupDocs::Signature::Field) or raise ArgumentError,
                                                    "Field should be GroupDocs::Signature::Field object, received: #{field.inspect}"
  document.is_a?(GroupDocs::Document) or raise ArgumentError,
                                               "Document should be GroupDocs::Document object, received: #{document.inspect}"

  api = Api::Request.new do |request|
    request[:access] = access
    request[:method] = :PUT
    request[:path] = "/signature/public/forms/#{id}/documents/#{document.guid}/participant/#{participant}/field/#{field.id}"
    request[:request_body] = value
    request[:plain] = true
  end
  api.add_params(:participantAuthSignature => authentication)
  json = api.execute!
  Signature::Field.new(json[:field])
end

#public_signed_documents!(path, participant, access = {}) ⇒ Array

Changed in release 1.5.8

Get signed form documents.

Parameters:

  • participant (String)

    Participant GUID

  • access (Hash) (defaults to: {})

    Access credentials

Options Hash (access):

  • :client_id (String)
  • :private_key (String)

Returns:

  • (Array)


618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
# File 'lib/groupdocs/signature/form.rb', line 618

def public_signed_documents!(path, participant, access = {})
  response = Api::Request.new do |request|
    request[:access] = access
    request[:method] = :DOWNLOAD
    request[:path] = "/signature/public/forms/#{id}/participant/#{participant}/documents/get"
  end.execute!


  filepath = "#{path}/#{name}."
  if documents!.size == 1
    filepath << 'pdf'
  else
    filepath << 'zip'
  end

  Object::File.open(filepath, 'wb') do |file|
    file.write(response)
  end

  filepath
end

#publish!(callbackUrl = {}, access = {}) ⇒ Object

Parameters:

  • callbackUrl (Hash) (defaults to: {})

    a customizable set of options

Options Hash (callbackUrl):

  • :callbackUrl (String)


222
223
224
225
226
227
228
229
# File 'lib/groupdocs/signature/form.rb', line 222

def publish!(callbackUrl = {}, access = {})
  Api::Request.new do |request|
    request[:access] = access
    request[:method] = :PUT
    request[:path] = "/signature/{{client_id}}/forms/#{id}/publish"
    request[:request_body] = callbackUrl
  end.execute!
end

#sign!(participant, authentication, participant_name, access = {}) ⇒ Array

Changed in release 1.5.8

Public sign form.

Parameters:

  • form (String)

    Form GUID

  • participant (String)

    Participant GUID

  • authentication (String)

    Authentication signature

  • participant_name (String)

    Participant Name

  • access (Hash) (defaults to: {})

    Access credentials

Options Hash (access):

  • :client_id (String)
  • :private_key (String)

Returns:

  • (Array)


546
547
548
549
550
551
552
553
554
# File 'lib/groupdocs/signature/form.rb', line 546

def sign!( participant, authentication, participant_name, access = {})
  api = Api::Request.new do |request|
    request[:access] = access
    request[:method] = :PUT
    request[:path] = "/signature/public/forms/#{id}/participant/#{participant}/sign"
  end
  api.add_params(:participantAuthSignature => authentication, :name => participant_name)
  api.execute!
end

#signed_documents!(path, access = {}) ⇒ String

Changed in release 1.5.8

Downloads signed documents to given path. If there is only one file in envelope, it’s saved as PDF. If there are two or more files in envelope, it’s saved as ZIP.

Parameters:

  • path (String)

    Directory to download file to

  • access (Hash) (defaults to: {})

    Access credentials

Options Hash (access):

  • :client_id (String)
  • :private_key (String)

Returns:

  • (String)

    path to file



437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
# File 'lib/groupdocs/signature/form.rb', line 437

def signed_documents!(path, access = {})
  response = Api::Request.new do |request|
    request[:access] = access
    request[:method] = :DOWNLOAD
    request[:path] = "/signature/{{client_id}}/forms/#{id}/documents/get"
  end.execute!

  filepath = "#{path}/#{name}.zip"


  Object::File.open(filepath, 'wb') do |file|
    file.write(response)
  end

  filepath
end

#update_from_template!(template, access = {}) ⇒ Object

Updates form adding fields from template.

Parameters:

Options Hash (access):

  • :client_id (String)
  • :private_key (String)

Raises:

  • (ArgumentError)

    if template is not GroupDocs::Signature::Template



381
382
383
384
385
386
387
388
389
390
# File 'lib/groupdocs/signature/form.rb', line 381

def update_from_template!(template, access = {})
  template.is_a?(GroupDocs::Signature::Template) or raise ArgumentError,
    "Template should be GroupDocs::Signature::Template object, received: #{template.inspect}"

  Api::Request.new do |request|
    request[:access] = access
    request[:method] = :POST
    request[:path] = "/signature/{{client_id}}/forms/#{form.id}/templates/#{template.id}"
  end.execute!
end