groupdocs 0.3.11 → 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 (122) hide show
  1. data/CHANGELOG.md +150 -0
  2. data/README.md +6 -58
  3. data/Rakefile +1 -1
  4. data/examples/README.md +13 -0
  5. data/examples/annotations/Gemfile +5 -0
  6. data/examples/annotations/app.rb +67 -0
  7. data/groupdocs.gemspec +3 -3
  8. data/lib/groupdocs.rb +11 -2
  9. data/lib/groupdocs/api/entity.rb +17 -1
  10. data/lib/groupdocs/api/helpers/path_helper.rb +10 -10
  11. data/lib/groupdocs/api/helpers/rest_helper.rb +7 -2
  12. data/lib/groupdocs/api/helpers/url_helper.rb +2 -4
  13. data/lib/groupdocs/api/request.rb +2 -4
  14. data/lib/groupdocs/datasource.rb +2 -2
  15. data/lib/groupdocs/datasource/field.rb +1 -1
  16. data/lib/groupdocs/document.rb +6 -18
  17. data/lib/groupdocs/document/annotation.rb +25 -2
  18. data/lib/groupdocs/document/annotation/reply.rb +6 -10
  19. data/lib/groupdocs/document/change.rb +1 -1
  20. data/lib/groupdocs/document/field.rb +1 -1
  21. data/lib/groupdocs/document/metadata.rb +1 -1
  22. data/lib/groupdocs/document/rectangle.rb +1 -1
  23. data/lib/groupdocs/document/view.rb +1 -1
  24. data/lib/groupdocs/job.rb +51 -8
  25. data/lib/groupdocs/questionnaire.rb +2 -2
  26. data/lib/groupdocs/questionnaire/execution.rb +1 -1
  27. data/lib/groupdocs/questionnaire/page.rb +1 -1
  28. data/lib/groupdocs/questionnaire/question.rb +1 -1
  29. data/lib/groupdocs/questionnaire/question/answer.rb +1 -1
  30. data/lib/groupdocs/signature.rb +134 -0
  31. data/lib/groupdocs/signature/contact.rb +141 -0
  32. data/lib/groupdocs/signature/envelope.rb +376 -0
  33. data/lib/groupdocs/signature/envelope/log.rb +22 -0
  34. data/lib/groupdocs/signature/field.rb +253 -0
  35. data/lib/groupdocs/signature/field/location.rb +72 -0
  36. data/lib/groupdocs/signature/form.rb +202 -0
  37. data/lib/groupdocs/signature/list.rb +93 -0
  38. data/lib/groupdocs/signature/recipient.rb +47 -0
  39. data/lib/groupdocs/signature/role.rb +84 -0
  40. data/lib/groupdocs/signature/shared.rb +6 -0
  41. data/lib/groupdocs/signature/shared/document_methods.rb +98 -0
  42. data/lib/groupdocs/signature/shared/entity_fields.rb +94 -0
  43. data/lib/groupdocs/signature/shared/entity_methods.rb +145 -0
  44. data/lib/groupdocs/signature/shared/field_methods.rb +282 -0
  45. data/lib/groupdocs/signature/shared/recipient_methods.rb +63 -0
  46. data/lib/groupdocs/signature/shared/resource_methods.rb +65 -0
  47. data/lib/groupdocs/signature/template.rb +104 -0
  48. data/lib/groupdocs/storage/file.rb +69 -62
  49. data/lib/groupdocs/storage/folder.rb +54 -88
  50. data/lib/groupdocs/storage/package.rb +1 -1
  51. data/lib/groupdocs/subscription.rb +113 -0
  52. data/lib/groupdocs/subscription/limit.rb +24 -0
  53. data/lib/groupdocs/user.rb +22 -2
  54. data/lib/groupdocs/version.rb +1 -1
  55. data/spec/groupdocs/api/entity_spec.rb +14 -0
  56. data/spec/groupdocs/api/helpers/path_helper_spec.rb +6 -19
  57. data/spec/groupdocs/api/helpers/rest_helper_spec.rb +9 -0
  58. data/spec/groupdocs/api/request_spec.rb +2 -7
  59. data/spec/groupdocs/datasource_spec.rb +3 -7
  60. data/spec/groupdocs/document/annotation/reply_spec.rb +11 -20
  61. data/spec/groupdocs/document/annotation_spec.rb +35 -31
  62. data/spec/groupdocs/document/field_spec.rb +1 -4
  63. data/spec/groupdocs/document/rectangle_spec.rb +10 -22
  64. data/spec/groupdocs/document_spec.rb +7 -27
  65. data/spec/groupdocs/job_spec.rb +43 -0
  66. data/spec/groupdocs/questionnaire/question_spec.rb +2 -6
  67. data/spec/groupdocs/questionnaire_spec.rb +3 -7
  68. data/spec/groupdocs/signature/contact_spec.rb +129 -0
  69. data/spec/groupdocs/signature/envelope/log_spec.rb +23 -0
  70. data/spec/groupdocs/signature/envelope_spec.rb +296 -0
  71. data/spec/groupdocs/signature/field/location_spec.rb +73 -0
  72. data/spec/groupdocs/signature/field_spec.rb +264 -0
  73. data/spec/groupdocs/signature/form_spec.rb +174 -0
  74. data/spec/groupdocs/signature/list_spec.rb +92 -0
  75. data/spec/groupdocs/signature/recipient_spec.rb +37 -0
  76. data/spec/groupdocs/signature/role_spec.rb +100 -0
  77. data/spec/groupdocs/signature/template_spec.rb +82 -0
  78. data/spec/groupdocs/signature_spec.rb +117 -0
  79. data/spec/groupdocs/storage/file_spec.rb +76 -61
  80. data/spec/groupdocs/storage/folder_spec.rb +43 -90
  81. data/spec/groupdocs/storage/package_spec.rb +1 -2
  82. data/spec/groupdocs/subscription/limit_spec.rb +24 -0
  83. data/spec/groupdocs/subscription_spec.rb +85 -0
  84. data/spec/groupdocs/user_spec.rb +27 -18
  85. data/spec/groupdocs_spec.rb +11 -0
  86. data/spec/spec_helper.rb +10 -1
  87. data/spec/support/files/envelope.zip +0 -0
  88. data/spec/support/json/annotation_access_set.json +11 -0
  89. data/spec/support/json/contact_add.json +12 -0
  90. data/spec/support/json/contacts_get.json +19 -0
  91. data/spec/support/json/contacts_import.json +8 -0
  92. data/spec/support/json/envelope_get.json +46 -0
  93. data/spec/support/json/envelope_logs.json +16 -0
  94. data/spec/support/json/envelopes_all.json +48 -0
  95. data/spec/support/json/envelopes_resources.json +31 -0
  96. data/spec/support/json/form_get.json +21 -0
  97. data/spec/support/json/forms_all.json +23 -0
  98. data/spec/support/json/job_get.json +30 -0
  99. data/spec/support/json/list_add.json +12 -0
  100. data/spec/support/json/lists_get.json +19 -0
  101. data/spec/support/json/signature_create.json +12 -0
  102. data/spec/support/json/signature_field_add.json +25 -0
  103. data/spec/support/json/signature_fields_get.json +27 -0
  104. data/spec/support/json/signature_roles_get.json +17 -0
  105. data/spec/support/json/signatures_get.json +19 -0
  106. data/spec/support/json/subscription_plan_get.json +9 -0
  107. data/spec/support/json/subscription_plans_get.json +17 -0
  108. data/spec/support/json/template_get.json +35 -0
  109. data/spec/support/json/template_get_documents.json +15 -0
  110. data/spec/support/json/template_get_recipients.json +20 -0
  111. data/spec/support/json/templates_all.json +37 -0
  112. data/spec/support/json/user_users_get.json +27 -0
  113. data/spec/support/shared_examples/signature/shared/document_methods.rb +68 -0
  114. data/spec/support/shared_examples/signature/shared/entity_fields.rb +89 -0
  115. data/spec/support/shared_examples/signature/shared/entity_methods.rb +116 -0
  116. data/spec/support/shared_examples/signature/shared/field_methods.rb +188 -0
  117. data/spec/support/shared_examples/signature/shared/recipient_methods.rb +42 -0
  118. data/spec/support/shared_examples/signature/shared/resource_methods.rb +46 -0
  119. metadata +139 -29
  120. data/lib/groupdocs/extensions.rb +0 -1
  121. data/lib/groupdocs/extensions/lookup.rb +0 -52
  122. data/spec/support/shared_examples/extensions/lookup.rb +0 -57
@@ -0,0 +1,93 @@
1
+ module GroupDocs
2
+ class Signature::List < Api::Entity
3
+
4
+ #
5
+ # Returns array of predefined lists.
6
+ #
7
+ # @param [Hash] access Access credentials
8
+ # @option access [String] :client_id
9
+ # @option access [String] :private_key
10
+ # @return [Array<GroupDocs::Signature::List>]
11
+ #
12
+ def self.get!(access = {})
13
+ json = Api::Request.new do |request|
14
+ request[:access] = access
15
+ request[:method] = :GET
16
+ request[:path] = '/signature/{{client_id}}/lists'
17
+ end.execute!
18
+
19
+ json[:lists].map do |list|
20
+ new(list)
21
+ end
22
+ end
23
+
24
+ # @attr [String] id
25
+ attr_accessor :id
26
+ # @attr [String] name
27
+ attr_accessor :name
28
+ # @attr [Array<String>] values
29
+ attr_accessor :values
30
+ # @attr [String] defaultValue
31
+ attr_accessor :defaultValue
32
+
33
+ # Human-readable accessors
34
+ alias_method :default_value, :defaultValue
35
+ alias_method :default_value=, :defaultValue=
36
+
37
+ #
38
+ # Converts values to API compatible view.
39
+ # @param [Array<String>, String] values
40
+ #
41
+ def values=(values)
42
+ @values = values.is_a?(Array) ? values.join(?;) : values
43
+ end
44
+
45
+ #
46
+ # Returns values as array.
47
+ # @return [Array<String>]
48
+ #
49
+ def values
50
+ @values.split(?;)
51
+ end
52
+
53
+ #
54
+ # Adds predefined list.
55
+ #
56
+ # @example
57
+ # list = GroupDocs::Signature::List.new
58
+ # list.name = 'Cities'
59
+ # list.values = %w(London Paris)
60
+ # list.add!
61
+ #
62
+ # @param [Hash] access Access credentials
63
+ # @option access [String] :client_id
64
+ # @option access [String] :private_key
65
+ #
66
+ def add!(access = {})
67
+ json = Api::Request.new do |request|
68
+ request[:access] = access
69
+ request[:method] = :POST
70
+ request[:path] = '/signature/{{client_id}}/list'
71
+ request[:request_body] = to_hash
72
+ end.execute!
73
+
74
+ self.id = json[:list][:id]
75
+ end
76
+
77
+ #
78
+ # Deletes predefined list.
79
+ #
80
+ # @param [Hash] access Access credentials
81
+ # @option access [String] :client_id
82
+ # @option access [String] :private_key
83
+ #
84
+ def delete!(access = {})
85
+ Api::Request.new do |request|
86
+ request[:access] = access
87
+ request[:method] = :DELETE
88
+ request[:path] = "/signature/{{client_id}}/lists/#{id}"
89
+ end.execute!
90
+ end
91
+
92
+ end # Signature::List
93
+ end # GroupDocs
@@ -0,0 +1,47 @@
1
+ module GroupDocs
2
+ class Signature::Recipient < Api::Entity
3
+
4
+ STATUSES = {
5
+ none: -1,
6
+ waiting: 0,
7
+ notified: 1,
8
+ delegated: 2,
9
+ rejected: 3,
10
+ signed: 4,
11
+ }
12
+
13
+ # @attr [String] id
14
+ attr_accessor :id
15
+ # @attr [String] email
16
+ attr_accessor :email
17
+ # @attr [String] firstName
18
+ attr_accessor :firstName
19
+ # @attr [String] lastName
20
+ attr_accessor :lastName
21
+ # @attr [String] nickname
22
+ attr_accessor :nickname
23
+ # @attr [String] roleId
24
+ attr_accessor :roleId
25
+ # @attr [String] order
26
+ attr_accessor :order
27
+ # @attr [Symbol] status
28
+ attr_accessor :status
29
+
30
+ # Human-readable accessors
31
+ alias_method :first_name, :firstName
32
+ alias_method :first_name=, :firstName=
33
+ alias_method :last_name, :lastName
34
+ alias_method :last_name=, :lastName=
35
+ alias_method :role_id, :roleId
36
+ alias_method :role_id=, :roleId=
37
+
38
+ #
39
+ # Converts status to human-readable format.
40
+ # @return [Symbol]
41
+ #
42
+ def status
43
+ STATUSES.invert[@status]
44
+ end
45
+
46
+ end # Signature::Recipient
47
+ end # GroupDocs
@@ -0,0 +1,84 @@
1
+ module GroupDocs
2
+ class Signature::Role < Api::Entity
3
+
4
+ #
5
+ # Returns array of predefined roles.
6
+ #
7
+ # @param [Hash] options Hash of options
8
+ # @option options [String] :id Filter by identifier
9
+ # @param [Hash] access Access credentials
10
+ # @option access [String] :client_id
11
+ # @option access [String] :private_key
12
+ # @return [Array<GroupDocs::Signature::role>]
13
+ #
14
+ def self.get!(options = {}, access = {})
15
+ api = Api::Request.new do |request|
16
+ request[:access] = access
17
+ request[:method] = :GET
18
+ request[:path] = '/signature/{{client_id}}/roles'
19
+ end
20
+ api.add_params(options)
21
+ json = api.execute!
22
+
23
+ json[:roles].map do |role|
24
+ new(role)
25
+ end
26
+ end
27
+
28
+ # @attr [String] id
29
+ attr_accessor :id
30
+ # @attr [String] name
31
+ attr_accessor :name
32
+ # @attr [Integer] canEdit
33
+ attr_accessor :canEdit
34
+ # @attr [Integer] canSign
35
+ attr_accessor :canSign
36
+ # @attr [Integer] canAnnotate
37
+ attr_accessor :canAnnotate
38
+ # @attr [Integer] canDelegate
39
+ attr_accessor :canDelegate
40
+
41
+ # Human-readable accessors
42
+ alias_method :can_edit, :canEdit
43
+ alias_method :can_edit=, :canEdit=
44
+ alias_method :can_sign, :canSign
45
+ alias_method :can_sign=, :canSign=
46
+ alias_method :can_annotate, :canAnnotate
47
+ alias_method :can_annotate=, :canAnnotate=
48
+ alias_method :can_delegate, :canDelegate
49
+ alias_method :can_delegate=, :canDelegate=
50
+
51
+ #
52
+ # Returns true if role can edit.
53
+ # @return [Boolean]
54
+ #
55
+ def can_edit?
56
+ can_edit == 1
57
+ end
58
+
59
+ #
60
+ # Returns true if role can sign.
61
+ # @return [Boolean]
62
+ #
63
+ def can_sign?
64
+ can_sign == 1
65
+ end
66
+
67
+ #
68
+ # Returns true if role can annotate.
69
+ # @return [Boolean]
70
+ #
71
+ def can_annotate?
72
+ can_annotate == 1
73
+ end
74
+
75
+ #
76
+ # Returns true if role can delegate.
77
+ # @return [Boolean]
78
+ #
79
+ def can_delegate?
80
+ can_delegate == 1
81
+ end
82
+
83
+ end # Signature::Role
84
+ end # GroupDocs
@@ -0,0 +1,6 @@
1
+ require 'groupdocs/signature/shared/document_methods'
2
+ require 'groupdocs/signature/shared/entity_fields'
3
+ require 'groupdocs/signature/shared/entity_methods'
4
+ require 'groupdocs/signature/shared/field_methods'
5
+ require 'groupdocs/signature/shared/recipient_methods'
6
+ require 'groupdocs/signature/shared/resource_methods'
@@ -0,0 +1,98 @@
1
+ module GroupDocs
2
+ class Signature
3
+ #
4
+ # Envelope and template entities share the same set of document methods.
5
+ #
6
+ # @see GroupDocs::Signature::Envelope
7
+ # @see GroupDocs::Signature::Template
8
+ #
9
+ module DocumentMethods
10
+
11
+ #
12
+ # Returns documents array.
13
+ #
14
+ # @param [Hash] access Access credentials
15
+ # @option access [String] :client_id
16
+ # @option access [String] :private_key
17
+ # @return [Array<GroupDocs::Document>]
18
+ #
19
+ def documents!(access = {})
20
+ json = Api::Request.new do |request|
21
+ request[:access] = access
22
+ request[:method] = :GET
23
+ request[:path] = "/signature/{{client_id}}/#{pluralized_class_name}/#{id}/documents"
24
+ end.execute!
25
+
26
+ json[:documents].map do |document|
27
+ file = Storage::File.new(guid: document[:documentId], name: document[:name])
28
+ Document.new(document.merge(file: file))
29
+ end
30
+ end
31
+
32
+ #
33
+ # Adds document.
34
+ #
35
+ # @example
36
+ # template = GroupDocs::Signature::Template.get!("g94h5g84hj9g4gf23i40j")
37
+ # document = GroupDocs::Storage::Folder.list!.last.to_document
38
+ # template.add_document! document
39
+ #
40
+ # @example
41
+ # envelope = GroupDocs::Signature::Envelope.get!("g94h5g84hj9g4gf23i40j")
42
+ # document = GroupDocs::Storage::Folder.list!.last.to_document
43
+ # envelope.add_document! document
44
+ #
45
+ # @param [GroupDocs::Document] document
46
+ # @param [Hash] options
47
+ # @option options [Integer] :order Display order of the document
48
+ # @param [Hash] access Access credentials
49
+ # @option access [String] :client_id
50
+ # @option access [String] :private_key
51
+ # @raise [ArgumentError] if document is not GroupDocs::Document
52
+ #
53
+ def add_document!(document, options = {}, access = {})
54
+ document.is_a?(GroupDocs::Document) or raise ArgumentError,
55
+ "Document should be GroupDocs::Document object, received: #{document.inspect}"
56
+
57
+ api = Api::Request.new do |request|
58
+ request[:access] = access
59
+ request[:method] = :POST
60
+ request[:path] = "/signature/{{client_id}}/#{pluralized_class_name}/#{id}/document/#{document.file.guid}"
61
+ end
62
+ api.add_params(options)
63
+ api.execute!
64
+ end
65
+
66
+ #
67
+ # Removes document.
68
+ #
69
+ # @example
70
+ # template = GroupDocs::Signature::Template.get!("g94h5g84hj9g4gf23i40j")
71
+ # document = template.documents!.first
72
+ # template.remove_document! document
73
+ #
74
+ # @example
75
+ # envelope = GroupDocs::Signature::Envelope.get!("g94h5g84hj9g4gf23i40j")
76
+ # document = envelope.documents!.first
77
+ # envelope.remove_document! document
78
+ #
79
+ # @param [GroupDocs::Document] document
80
+ # @param [Hash] access Access credentials
81
+ # @option access [String] :client_id
82
+ # @option access [String] :private_key
83
+ # @raise [ArgumentError] if document is not GroupDocs::Document
84
+ #
85
+ def remove_document!(document, access = {})
86
+ document.is_a?(GroupDocs::Document) or raise ArgumentError,
87
+ "Document should be GroupDocs::Document object, received: #{document.inspect}"
88
+
89
+ Api::Request.new do |request|
90
+ request[:access] = access
91
+ request[:method] = :DELETE
92
+ request[:path] = "/signature/{{client_id}}/#{pluralized_class_name}/#{id}/documents/#{document.file.guid}"
93
+ end.execute!
94
+ end
95
+
96
+ end # DocumentMethods
97
+ end # Signature
98
+ end # GroupDocs
@@ -0,0 +1,94 @@
1
+ module GroupDocs
2
+ class Signature
3
+ #
4
+ # Envelope and template entities share the same set of fields.
5
+ #
6
+ # @see GroupDocs::Signature::Envelope
7
+ # @see GroupDocs::Signature::Template
8
+ #
9
+ module EntityFields
10
+
11
+ # @attr [String] id
12
+ attr_accessor :id
13
+ # @attr [String] name
14
+ attr_accessor :name
15
+ # @attr [Integer] ownerId
16
+ attr_accessor :ownerId
17
+ # @attr [String] ownerGuid
18
+ attr_accessor :ownerGuid
19
+ # @attr [String] reminderTime
20
+ attr_accessor :reminderTime
21
+ # @attr [Integer] stepExpireTime
22
+ attr_accessor :stepExpireTime
23
+ # @attr [Boolean] ownerShouldSign
24
+ attr_accessor :ownerShouldSign
25
+ # @attr [Boolean] orderedSignature
26
+ attr_accessor :orderedSignature
27
+ # @attr [String] emailSubject
28
+ attr_accessor :emailSubject
29
+ # @attr [String] emailBody
30
+ attr_accessor :emailBody
31
+ # @attr [Integer] documentsCount
32
+ attr_accessor :documentsCount
33
+ # @attr [Integer] documentsPages
34
+ attr_accessor :documentsPages
35
+ # @attr [Array<GroupDocs::Signature::Contact>] recipients
36
+ attr_accessor :recipients
37
+
38
+ # Human-readable accessors
39
+ alias_method :owner_id, :ownerId
40
+ alias_method :owner_id=, :ownerId=
41
+ alias_method :owner_guid, :ownerGuid
42
+ alias_method :owner_guid=, :ownerGuid=
43
+ alias_method :reminder_time, :reminderTime
44
+ alias_method :reminder_time=, :reminderTime=
45
+ alias_method :step_expire_time, :stepExpireTime
46
+ alias_method :step_expire_time=, :stepExpireTime=
47
+ alias_method :owner_should_sign, :ownerShouldSign
48
+ alias_method :owner_should_sign=, :ownerShouldSign=
49
+ alias_method :ordered_signature, :orderedSignature
50
+ alias_method :ordered_signature=, :orderedSignature=
51
+ alias_method :email_subject, :emailSubject
52
+ alias_method :email_subject=, :emailSubject=
53
+ alias_method :email_body, :emailBody
54
+ alias_method :email_body=, :emailBody=
55
+ alias_method :documents_count, :documentsCount
56
+ alias_method :documents_count=, :documentsCount=
57
+ alias_method :documents_pages, :documentsPages
58
+ alias_method :documents_pages=, :documentsPages=
59
+
60
+ #
61
+ # Converts each recipient to GroupDocs::Signature::Recipient object.
62
+ # @param [Array<GroupDocs::Signature::Recipient, Hash>] recipients
63
+ #
64
+ def recipients=(recipients)
65
+ if recipients
66
+ @recipients = recipients.map do |recipient|
67
+ if recipient.is_a?(GroupDocs::Signature::Recipient)
68
+ recipient
69
+ else
70
+ Signature::Recipient.new(recipient)
71
+ end
72
+ end
73
+ end
74
+ end
75
+
76
+ #
77
+ # Returns true if owner should sign.
78
+ # @return [Boolean]
79
+ #
80
+ def owner_should_sign
81
+ @ownerShouldSign == 1 ? true : false
82
+ end
83
+
84
+ #
85
+ # Returns ordered signature type.
86
+ # @return [Symbol]
87
+ #
88
+ def ordered_signature
89
+ @orderedSignature == 1 ? :parallel : :ordered
90
+ end
91
+
92
+ end # EntityFields
93
+ end # Signature
94
+ end # GroupDocs
@@ -0,0 +1,145 @@
1
+ module GroupDocs
2
+ class Signature
3
+ #
4
+ # Envelope and template entities share the same set of methods.
5
+ #
6
+ # @see GroupDocs::Signature::Form
7
+ # @see GroupDocs::Signature::Envelope
8
+ # @see GroupDocs::Signature::Template
9
+ #
10
+ module EntityMethods
11
+
12
+ def self.included(klass)
13
+ klass.extend ClassMethods
14
+ end
15
+
16
+ module ClassMethods
17
+ #
18
+ # Returns template, envelope or form by its identifier.
19
+ #
20
+ # @param [String] id
21
+ # @param [Hash] access Access credentials
22
+ # @option access [String] :client_id
23
+ # @option access [String] :private_key
24
+ # @return [GroupDocs::Signature::Template, GroupDocs::Signature::Envelope, GroupDocs::Signature::Form]
25
+ #
26
+ def get!(id, access = {})
27
+ class_name = self.name.split('::').last.downcase
28
+
29
+ json = Api::Request.new do |request|
30
+ request[:access] = access
31
+ request[:method] = :GET
32
+ request[:path] = "/signature/{{client_id}}/#{class_name}s/#{id}"
33
+ end.execute!
34
+
35
+ new(json[class_name.to_sym])
36
+ end
37
+ end # ClassMethods
38
+
39
+ #
40
+ # Creates template or envelope.
41
+ #
42
+ # @example Create new template
43
+ # template = GroupDocs::Signature::Template.new
44
+ # template.name = "Template"
45
+ # template.email_subject = "Sing this!"
46
+ # template.create!
47
+ #
48
+ # @example Create new envelope
49
+ # envelope = GroupDocs::Signature::Envelope.new
50
+ # envelope.name = "Envelope"
51
+ # envelope.email_subject = "Sing this!"
52
+ # envelope.create!
53
+ #
54
+ # @param [Hash] options Hash of options
55
+ # @option options [Integer] :template_id Template GUID to use
56
+ # @option options [Integer] :envelope_id Envelope GUID to use
57
+ # @param [Hash] access Access credentials
58
+ # @option access [String] :client_id
59
+ # @option access [String] :private_key
60
+ #
61
+ def create!(options = {}, access = {})
62
+ template_id = options.delete(:template_id)
63
+ envelope_id = options.delete(:envelope_id)
64
+ options[:templateId] = template_id if template_id
65
+ options[:envelopeId] = envelope_id if envelope_id
66
+
67
+ api = Api::Request.new do |request|
68
+ request[:access] = access
69
+ request[:method] = :POST
70
+ request[:path] = "/signature/{{client_id}}/#{class_name}"
71
+ request[:request_body] = to_hash
72
+ end
73
+ api.add_params(options.merge(name: name))
74
+ json = api.execute!
75
+
76
+ self.id = json[class_name.to_sym][:id]
77
+ end
78
+
79
+ #
80
+ # Modifies template, envelope or form.
81
+ #
82
+ # @example Modify template
83
+ # template = GroupDocs::Signature::Template.get!("g94h5g84hj9g4gf23i40j")
84
+ # template.name = "Template"
85
+ # template.email_subject = "Sing this!"
86
+ # template.modify!
87
+ #
88
+ # @example Modify envelope
89
+ # envelope = GroupDocs::Signature::Envelope.get!("g94h5g84hj9g4gf23i40j")
90
+ # envelope.name = "Envelope"
91
+ # envelope.email_subject = "Sing this!"
92
+ # envelope.modify!
93
+ #
94
+ # @param [Hash] access Access credentials
95
+ # @option access [String] :client_id
96
+ # @option access [String] :private_key
97
+ #
98
+ def modify!(access = {})
99
+ Api::Request.new do |request|
100
+ request[:access] = access
101
+ request[:method] = :POST
102
+ request[:path] = "/signature/{{client_id}}/#{pluralized_class_name}/#{id}"
103
+ request[:request_body] = to_hash
104
+ end.execute!
105
+ end
106
+
107
+ #
108
+ # Renames template, envelope or form.
109
+ #
110
+ # @param [String] name New template name
111
+ # @param [Hash] access Access credentials
112
+ # @option access [String] :client_id
113
+ # @option access [String] :private_key
114
+ #
115
+ def rename!(name, access = {})
116
+ api = Api::Request.new do |request|
117
+ request[:access] = access
118
+ request[:method] = :PUT
119
+ request[:path] = "/signature/{{client_id}}/#{pluralized_class_name}/#{id}"
120
+ end
121
+ key = (class_name == 'form' ? :new_name : :name )
122
+ api.add_params(key => name)
123
+ api.execute!
124
+
125
+ self.name = name
126
+ end
127
+
128
+ #
129
+ # Deletes template, envelope or form.
130
+ #
131
+ # @param [Hash] access Access credentials
132
+ # @option access [String] :client_id
133
+ # @option access [String] :private_key
134
+ #
135
+ def delete!(access = {})
136
+ Api::Request.new do |request|
137
+ request[:access] = access
138
+ request[:method] = :DELETE
139
+ request[:path] = "/signature/{{client_id}}/#{pluralized_class_name}/#{id}"
140
+ end.execute!
141
+ end
142
+
143
+ end # EntityMethods
144
+ end # Signature
145
+ end # GroupDocs