groupdocs 2.2.0 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (324) hide show
  1. checksums.yaml +7 -0
  2. data/.travis.yml +9 -9
  3. data/CHANGELOG.md +482 -477
  4. data/Gemfile +3 -3
  5. data/LICENSE.txt +21 -21
  6. data/README.md +94 -94
  7. data/Rakefile +9 -9
  8. data/examples/README.md +12 -12
  9. data/examples/api-samples/Gemfile +5 -5
  10. data/examples/api-samples/Gemfile.lock +49 -49
  11. data/examples/api-samples/README.md +23 -23
  12. data/examples/api-samples/public/css/style.css +229 -229
  13. data/examples/api-samples/public/docs/annotation-sample.html +167 -167
  14. data/examples/api-samples/public/docs/docco.css +500 -500
  15. data/examples/api-samples/public/docs/envelope-sample.html +374 -374
  16. data/examples/api-samples/public/docs/sample01.html +181 -181
  17. data/examples/api-samples/public/docs/sample02.html +199 -199
  18. data/examples/api-samples/public/docs/sample03.html +318 -318
  19. data/examples/api-samples/public/docs/sample04.html +217 -217
  20. data/examples/api-samples/public/docs/sample05.html +296 -296
  21. data/examples/api-samples/public/docs/sample06.html +347 -347
  22. data/examples/api-samples/public/docs/sample07.html +209 -209
  23. data/examples/api-samples/public/docs/sample08.html +277 -277
  24. data/examples/api-samples/public/docs/sample09.html +314 -314
  25. data/examples/api-samples/public/docs/sample10.html +270 -270
  26. data/examples/api-samples/public/docs/sample11.html +462 -462
  27. data/examples/api-samples/public/docs/sample12.html +199 -199
  28. data/examples/api-samples/public/docs/sample13.html +201 -201
  29. data/examples/api-samples/public/docs/sample14.html +204 -204
  30. data/examples/api-samples/public/docs/sample15.html +182 -182
  31. data/examples/api-samples/public/docs/sample16.html +234 -234
  32. data/examples/api-samples/public/docs/sample17.html +309 -309
  33. data/examples/api-samples/public/docs/sample18.html +721 -721
  34. data/examples/api-samples/public/docs/sample19.html +631 -631
  35. data/examples/api-samples/public/docs/sample20.html +230 -230
  36. data/examples/api-samples/public/docs/sample21.html +790 -790
  37. data/examples/api-samples/public/docs/sample22.html +408 -408
  38. data/examples/api-samples/public/docs/sample25.html +550 -550
  39. data/examples/api-samples/public/templates/base-simple_source.html +191 -191
  40. data/examples/api-samples/public/templates/testdocument.html +100 -100
  41. data/examples/api-samples/public/templates/welcome.htm +137 -137
  42. data/examples/api-samples/samples/annotation-sample.rb +56 -56
  43. data/examples/api-samples/samples/envelope-sample.rb +133 -133
  44. data/examples/api-samples/samples/sample01.rb +44 -44
  45. data/examples/api-samples/samples/sample02.rb +50 -50
  46. data/examples/api-samples/samples/sample03.rb +79 -79
  47. data/examples/api-samples/samples/sample04.rb +54 -54
  48. data/examples/api-samples/samples/sample05.rb +83 -83
  49. data/examples/api-samples/samples/sample06.rb +86 -86
  50. data/examples/api-samples/samples/sample07.rb +59 -59
  51. data/examples/api-samples/samples/sample08.rb +76 -76
  52. data/examples/api-samples/samples/sample09.rb +85 -85
  53. data/examples/api-samples/samples/sample10.rb +70 -70
  54. data/examples/api-samples/samples/sample11.rb +132 -132
  55. data/examples/api-samples/samples/sample12.rb +48 -48
  56. data/examples/api-samples/samples/sample13.rb +49 -49
  57. data/examples/api-samples/samples/sample14.rb +54 -54
  58. data/examples/api-samples/samples/sample15.rb +43 -43
  59. data/examples/api-samples/samples/sample16.rb +57 -57
  60. data/examples/api-samples/samples/sample17.rb +70 -70
  61. data/examples/api-samples/samples/sample18.rb +190 -190
  62. data/examples/api-samples/samples/sample19.rb +188 -188
  63. data/examples/api-samples/samples/sample20.rb +68 -68
  64. data/examples/api-samples/samples/sample21.rb +212 -212
  65. data/examples/api-samples/samples/sample22.rb +109 -109
  66. data/examples/api-samples/samples/sample25.rb +127 -127
  67. data/examples/api-samples/views/_others_samples.haml +233 -233
  68. data/examples/api-samples/views/annotation_sample.haml +63 -63
  69. data/examples/api-samples/views/envelope_sample.haml +72 -72
  70. data/examples/api-samples/views/index.haml +235 -235
  71. data/examples/api-samples/views/layout.haml +3 -3
  72. data/examples/api-samples/views/sample01.haml +63 -63
  73. data/examples/api-samples/views/sample02.haml +52 -52
  74. data/examples/api-samples/views/sample03.haml +87 -87
  75. data/examples/api-samples/views/sample04.haml +55 -55
  76. data/examples/api-samples/views/sample05.haml +86 -86
  77. data/examples/api-samples/views/sample06.haml +58 -58
  78. data/examples/api-samples/views/sample07.haml +52 -52
  79. data/examples/api-samples/views/sample08.haml +100 -100
  80. data/examples/api-samples/views/sample09.haml +95 -95
  81. data/examples/api-samples/views/sample10.haml +93 -93
  82. data/examples/api-samples/views/sample11.haml +140 -140
  83. data/examples/api-samples/views/sample12.haml +68 -68
  84. data/examples/api-samples/views/sample13.haml +64 -64
  85. data/examples/api-samples/views/sample14.haml +60 -60
  86. data/examples/api-samples/views/sample15.haml +51 -51
  87. data/examples/api-samples/views/sample16.haml +50 -50
  88. data/examples/api-samples/views/sample17.haml +54 -54
  89. data/examples/api-samples/views/sample18.haml +143 -143
  90. data/examples/api-samples/views/sample19.haml +92 -92
  91. data/examples/api-samples/views/sample20.haml +54 -54
  92. data/examples/api-samples/views/sample21.haml +123 -123
  93. data/examples/api-samples/views/sample22.haml +106 -106
  94. data/examples/api-samples/views/sample25.haml +101 -101
  95. data/examples/api-samples/views/sample31.haml +2 -2
  96. data/examples/api-samples/web.rb +20 -20
  97. data/examples/viewer/Gemfile +5 -5
  98. data/examples/viewer/app.rb +52 -52
  99. data/groupdocs.gemspec +31 -31
  100. data/lib/groupdocs.rb +62 -62
  101. data/lib/groupdocs/api.rb +6 -6
  102. data/lib/groupdocs/api/entity.rb +112 -112
  103. data/lib/groupdocs/api/helpers.rb +11 -11
  104. data/lib/groupdocs/api/helpers/access_mode_helper.rb +27 -27
  105. data/lib/groupdocs/api/helpers/access_rights_helper.rb +55 -55
  106. data/lib/groupdocs/api/helpers/accessor_helper.rb +30 -30
  107. data/lib/groupdocs/api/helpers/byte_flag_helper.rb +49 -49
  108. data/lib/groupdocs/api/helpers/credentials_helper.rb +35 -35
  109. data/lib/groupdocs/api/helpers/mime_helper.rb +21 -21
  110. data/lib/groupdocs/api/helpers/path_helper.rb +28 -28
  111. data/lib/groupdocs/api/helpers/rest_helper.rb +99 -99
  112. data/lib/groupdocs/api/helpers/signature_public_helper.rb +22 -22
  113. data/lib/groupdocs/api/helpers/status_helper.rb +27 -27
  114. data/lib/groupdocs/api/helpers/url_helper.rb +101 -101
  115. data/lib/groupdocs/api/request.rb +91 -91
  116. data/lib/groupdocs/datasource.rb +249 -249
  117. data/lib/groupdocs/datasource/field.rb +39 -39
  118. data/lib/groupdocs/document.rb +1550 -1550
  119. data/lib/groupdocs/document/annotation.rb +421 -421
  120. data/lib/groupdocs/document/annotation/reply.rb +173 -173
  121. data/lib/groupdocs/document/annotation/reviewer.rb +66 -66
  122. data/lib/groupdocs/document/change.rb +56 -56
  123. data/lib/groupdocs/document/field.rb +53 -53
  124. data/lib/groupdocs/document/metadata.rb +32 -32
  125. data/lib/groupdocs/document/rectangle.rb +18 -18
  126. data/lib/groupdocs/document/view.rb +36 -36
  127. data/lib/groupdocs/errors.rb +8 -8
  128. data/lib/groupdocs/job.rb +468 -468
  129. data/lib/groupdocs/questionnaire.rb +530 -530
  130. data/lib/groupdocs/questionnaire/collector.rb +335 -335
  131. data/lib/groupdocs/questionnaire/execution.rb +181 -181
  132. data/lib/groupdocs/questionnaire/page.rb +43 -43
  133. data/lib/groupdocs/questionnaire/question.rb +108 -108
  134. data/lib/groupdocs/questionnaire/question/answer.rb +15 -15
  135. data/lib/groupdocs/signature.rb +380 -380
  136. data/lib/groupdocs/signature/contact.rb +181 -181
  137. data/lib/groupdocs/signature/envelope.rb +747 -747
  138. data/lib/groupdocs/signature/envelope/log.rb +20 -20
  139. data/lib/groupdocs/signature/field.rb +286 -286
  140. data/lib/groupdocs/signature/field/location.rb +71 -71
  141. data/lib/groupdocs/signature/form.rb +804 -804
  142. data/lib/groupdocs/signature/list.rb +92 -92
  143. data/lib/groupdocs/signature/recipient.rb +79 -79
  144. data/lib/groupdocs/signature/role.rb +54 -54
  145. data/lib/groupdocs/signature/shared.rb +6 -6
  146. data/lib/groupdocs/signature/shared/document_methods.rb +158 -158
  147. data/lib/groupdocs/signature/shared/entity_fields.rb +76 -76
  148. data/lib/groupdocs/signature/shared/entity_methods.rb +144 -144
  149. data/lib/groupdocs/signature/shared/field_methods.rb +354 -354
  150. data/lib/groupdocs/signature/shared/recipient_methods.rb +75 -75
  151. data/lib/groupdocs/signature/shared/resource_methods.rb +65 -65
  152. data/lib/groupdocs/signature/template.rb +124 -124
  153. data/lib/groupdocs/storage.rb +44 -44
  154. data/lib/groupdocs/storage/file.rb +432 -432
  155. data/lib/groupdocs/storage/folder.rb +288 -288
  156. data/lib/groupdocs/storage/package.rb +48 -48
  157. data/lib/groupdocs/storage/provider.rb +32 -32
  158. data/lib/groupdocs/subscription.rb +323 -323
  159. data/lib/groupdocs/subscription/limit.rb +20 -20
  160. data/lib/groupdocs/user.rb +955 -930
  161. data/lib/groupdocs/version.rb +3 -3
  162. data/spec/groupdocs/api/entity_spec.rb +55 -55
  163. data/spec/groupdocs/api/helpers/access_mode_helper_spec.rb +21 -21
  164. data/spec/groupdocs/api/helpers/access_rights_helper_spec.rb +43 -43
  165. data/spec/groupdocs/api/helpers/accessor_helper_spec.rb +16 -16
  166. data/spec/groupdocs/api/helpers/byte_flag_helper_spec.rb +23 -23
  167. data/spec/groupdocs/api/helpers/credentials_helpers_spec.rb +48 -48
  168. data/spec/groupdocs/api/helpers/mime_helper_spec.rb +16 -16
  169. data/spec/groupdocs/api/helpers/path_helper_spec.rb +15 -15
  170. data/spec/groupdocs/api/helpers/rest_helper_spec.rb +161 -161
  171. data/spec/groupdocs/api/helpers/signature_public_helper_spec.rb +21 -21
  172. data/spec/groupdocs/api/helpers/status_helper_spec.rb +22 -22
  173. data/spec/groupdocs/api/helpers/url_helper_spec.rb +112 -112
  174. data/spec/groupdocs/api/request_spec.rb +112 -112
  175. data/spec/groupdocs/datasource/field_spec.rb +29 -29
  176. data/spec/groupdocs/datasource_spec.rb +145 -145
  177. data/spec/groupdocs/document/annotation/reply_spec.rb +154 -154
  178. data/spec/groupdocs/document/annotation/reviewer_spec.rb +51 -51
  179. data/spec/groupdocs/document/annotation_spec.rb +234 -234
  180. data/spec/groupdocs/document/change_spec.rb +39 -39
  181. data/spec/groupdocs/document/field_spec.rb +28 -28
  182. data/spec/groupdocs/document/metadata_spec.rb +21 -21
  183. data/spec/groupdocs/document/rectangle_spec.rb +14 -14
  184. data/spec/groupdocs/document/view_spec.rb +33 -33
  185. data/spec/groupdocs/document_spec.rb +859 -859
  186. data/spec/groupdocs/errors_spec.rb +7 -7
  187. data/spec/groupdocs/job_spec.rb +323 -323
  188. data/spec/groupdocs/questionnaire/collector_spec.rb +197 -197
  189. data/spec/groupdocs/questionnaire/execution_spec.rb +162 -162
  190. data/spec/groupdocs/questionnaire/page_spec.rb +47 -47
  191. data/spec/groupdocs/questionnaire/question/answer_spec.rb +9 -9
  192. data/spec/groupdocs/questionnaire/question_spec.rb +75 -75
  193. data/spec/groupdocs/questionnaire_spec.rb +295 -295
  194. data/spec/groupdocs/signature/contact_spec.rb +142 -142
  195. data/spec/groupdocs/signature/envelope/log_spec.rb +15 -15
  196. data/spec/groupdocs/signature/envelope_spec.rb +384 -384
  197. data/spec/groupdocs/signature/field/location_spec.rb +40 -40
  198. data/spec/groupdocs/signature/field_spec.rb +235 -235
  199. data/spec/groupdocs/signature/form_spec.rb +205 -205
  200. data/spec/groupdocs/signature/list_spec.rb +87 -87
  201. data/spec/groupdocs/signature/recipient_spec.rb +26 -26
  202. data/spec/groupdocs/signature/role_spec.rb +47 -47
  203. data/spec/groupdocs/signature/template_spec.rb +80 -80
  204. data/spec/groupdocs/signature_spec.rb +194 -194
  205. data/spec/groupdocs/storage/file_spec.rb +303 -303
  206. data/spec/groupdocs/storage/folder_spec.rb +270 -270
  207. data/spec/groupdocs/storage/package_spec.rb +38 -38
  208. data/spec/groupdocs/storage/provider_spec.rb +21 -21
  209. data/spec/groupdocs/storage_spec.rb +27 -27
  210. data/spec/groupdocs/subscription/limit_spec.rb +16 -16
  211. data/spec/groupdocs/subscription_spec.rb +74 -74
  212. data/spec/groupdocs/user_spec.rb +257 -257
  213. data/spec/groupdocs_spec.rb +63 -63
  214. data/spec/spec_helper.rb +73 -73
  215. data/spec/support/json/annotation_access_set.json +11 -11
  216. data/spec/support/json/annotation_collaborators_get.json +16 -16
  217. data/spec/support/json/annotation_collaborators_set.json +16 -16
  218. data/spec/support/json/annotation_create.json +12 -12
  219. data/spec/support/json/annotation_list.json +32 -32
  220. data/spec/support/json/annotation_marker_move.json +10 -10
  221. data/spec/support/json/annotation_move.json +8 -8
  222. data/spec/support/json/annotation_remove.json +9 -9
  223. data/spec/support/json/annotation_replies_create.json +9 -9
  224. data/spec/support/json/annotation_replies_get.json +25 -25
  225. data/spec/support/json/annotation_reviewers_get.json +18 -18
  226. data/spec/support/json/comparison_changes.json +46 -46
  227. data/spec/support/json/comparison_compare.json +8 -8
  228. data/spec/support/json/comparison_document.json +10 -10
  229. data/spec/support/json/contact_add.json +12 -12
  230. data/spec/support/json/contacts_get.json +19 -19
  231. data/spec/support/json/contacts_import.json +8 -8
  232. data/spec/support/json/datasource_add.json +8 -8
  233. data/spec/support/json/datasource_get.json +22 -22
  234. data/spec/support/json/datasource_remove.json +8 -8
  235. data/spec/support/json/datasource_update.json +8 -8
  236. data/spec/support/json/delete_account.json +9 -9
  237. data/spec/support/json/document_access_info_get.json +14 -14
  238. data/spec/support/json/document_convert.json +8 -8
  239. data/spec/support/json/document_datasource.json +10 -10
  240. data/spec/support/json/document_fields.json +34 -34
  241. data/spec/support/json/document_formats.json +8 -8
  242. data/spec/support/json/document_metadata.json +15 -15
  243. data/spec/support/json/document_page_images_get.json +20 -20
  244. data/spec/support/json/document_questionnaire_create.json +9 -9
  245. data/spec/support/json/document_questionnaires.json +23 -23
  246. data/spec/support/json/document_sharers_remove.json +8 -8
  247. data/spec/support/json/document_sharers_set.json +16 -16
  248. data/spec/support/json/document_thumbnails.json +24 -24
  249. data/spec/support/json/document_views.json +32 -32
  250. data/spec/support/json/envelope_get.json +46 -46
  251. data/spec/support/json/envelope_logs.json +16 -16
  252. data/spec/support/json/envelope_recipient_add.json +26 -26
  253. data/spec/support/json/envelopes_all.json +48 -48
  254. data/spec/support/json/envelopes_resources.json +31 -31
  255. data/spec/support/json/file_compress.json +8 -8
  256. data/spec/support/json/file_copy.json +14 -14
  257. data/spec/support/json/file_delete.json +5 -5
  258. data/spec/support/json/file_move.json +14 -14
  259. data/spec/support/json/file_upload.json +8 -8
  260. data/spec/support/json/folder_create.json +8 -8
  261. data/spec/support/json/folder_delete.json +5 -5
  262. data/spec/support/json/folder_list.json +22 -22
  263. data/spec/support/json/folder_move.json +8 -8
  264. data/spec/support/json/folder_sharers_get.json +16 -16
  265. data/spec/support/json/folder_sharers_remove.json +8 -8
  266. data/spec/support/json/folder_sharers_set.json +16 -16
  267. data/spec/support/json/form_get.json +21 -21
  268. data/spec/support/json/forms_all.json +23 -23
  269. data/spec/support/json/job_add_url.json +8 -8
  270. data/spec/support/json/job_create.json +8 -8
  271. data/spec/support/json/job_documents.json +40 -40
  272. data/spec/support/json/job_file_add.json +8 -8
  273. data/spec/support/json/job_get.json +30 -30
  274. data/spec/support/json/job_update.json +7 -7
  275. data/spec/support/json/jobs_get.json +58 -58
  276. data/spec/support/json/list_add.json +12 -12
  277. data/spec/support/json/lists_get.json +19 -19
  278. data/spec/support/json/package_create.json +7 -7
  279. data/spec/support/json/questionnaire_collector.json +17 -17
  280. data/spec/support/json/questionnaire_collectors.json +38 -38
  281. data/spec/support/json/questionnaire_collectors_add.json +10 -10
  282. data/spec/support/json/questionnaire_create.json +10 -10
  283. data/spec/support/json/questionnaire_datasources.json +26 -26
  284. data/spec/support/json/questionnaire_execution_add.json +9 -9
  285. data/spec/support/json/questionnaire_execution_status_set.json +8 -8
  286. data/spec/support/json/questionnaire_execution_update.json +8 -8
  287. data/spec/support/json/questionnaire_executions.json +28 -28
  288. data/spec/support/json/questionnaire_get.json +17 -17
  289. data/spec/support/json/questionnaire_remove.json +8 -8
  290. data/spec/support/json/questionnaire_update.json +8 -8
  291. data/spec/support/json/questionnaires_get.json +40 -40
  292. data/spec/support/json/sign_documents.json +16 -16
  293. data/spec/support/json/signature_create.json +12 -12
  294. data/spec/support/json/signature_field_add.json +25 -25
  295. data/spec/support/json/signature_fields_get.json +27 -27
  296. data/spec/support/json/signature_roles_get.json +17 -17
  297. data/spec/support/json/signatures_get.json +19 -19
  298. data/spec/support/json/storage_info.json +10 -10
  299. data/spec/support/json/subscription_plan_get.json +9 -9
  300. data/spec/support/json/subscription_plans_get.json +17 -17
  301. data/spec/support/json/template_get.json +35 -35
  302. data/spec/support/json/template_get_documents.json +15 -15
  303. data/spec/support/json/template_get_recipients.json +20 -20
  304. data/spec/support/json/templates_all.json +37 -37
  305. data/spec/support/json/templates_get.json +21 -21
  306. data/spec/support/json/update_account.json +10 -10
  307. data/spec/support/json/user_area.json +67 -67
  308. data/spec/support/json/user_embed_key.json +38 -38
  309. data/spec/support/json/user_get_embed_key.json +67 -67
  310. data/spec/support/json/user_login.json +67 -67
  311. data/spec/support/json/user_profile_get.json +24 -24
  312. data/spec/support/json/user_providers.json +31 -31
  313. data/spec/support/json/user_roles.json +25 -25
  314. data/spec/support/json/user_users_get.json +27 -27
  315. data/spec/support/shared_examples/api/entity.rb +39 -39
  316. data/spec/support/shared_examples/api/helpers/access_mode_helper.rb +11 -11
  317. data/spec/support/shared_examples/api/helpers/status_helper.rb +11 -11
  318. data/spec/support/shared_examples/signature/shared/document_methods.rb +68 -68
  319. data/spec/support/shared_examples/signature/shared/entity_fields.rb +56 -56
  320. data/spec/support/shared_examples/signature/shared/entity_methods.rb +116 -116
  321. data/spec/support/shared_examples/signature/shared/field_methods.rb +220 -220
  322. data/spec/support/shared_examples/signature/shared/recipient_methods.rb +46 -46
  323. data/spec/support/shared_examples/signature/shared/resource_methods.rb +46 -46
  324. metadata +35 -55
@@ -1,39 +1,39 @@
1
- module GroupDocs
2
- class DataSource::Field < Api::Entity
3
-
4
- # @attr [String] name
5
- attr_accessor :name
6
- # @attr [Integer] type
7
- attr_accessor :type
8
- # @attr [Array<String>] values
9
- attr_accessor :values
10
-
11
- # added in release 1.7.0
12
- # @attr [String] contentType
13
- attr_accessor :contentType
14
- # @attr [List<GroupDocs::DataSource::Field>] nested_fields
15
- attr_accessor :nested_fields
16
- # @attr [String] regionName
17
- attr_accessor :regionName
18
- # @attr [String] dimension
19
- attr_accessor :dimension
20
- #
21
- # Updates type with machine-readable format.
22
- #
23
- # @param [Symbol] type
24
- #
25
- def type=(type)
26
- @type = type.is_a?(Symbol) ? type.to_s.capitalize : type
27
- end
28
-
29
- #
30
- # Returns type in human-readable format.
31
- #
32
- # @return [Symbol]
33
- #
34
- def type
35
- @type.downcase.to_sym
36
- end
37
-
38
- end # DataSource::Field
39
- end # GroupDocs
1
+ module GroupDocs
2
+ class DataSource::Field < Api::Entity
3
+
4
+ # @attr [String] name
5
+ attr_accessor :name
6
+ # @attr [Integer] type
7
+ attr_accessor :type
8
+ # @attr [Array<String>] values
9
+ attr_accessor :values
10
+
11
+ # added in release 1.7.0
12
+ # @attr [String] contentType
13
+ attr_accessor :contentType
14
+ # @attr [List<GroupDocs::DataSource::Field>] nested_fields
15
+ attr_accessor :nested_fields
16
+ # @attr [String] regionName
17
+ attr_accessor :regionName
18
+ # @attr [String] dimension
19
+ attr_accessor :dimension
20
+ #
21
+ # Updates type with machine-readable format.
22
+ #
23
+ # @param [Symbol] type
24
+ #
25
+ def type=(type)
26
+ @type = type.is_a?(Symbol) ? type.to_s.capitalize : type
27
+ end
28
+
29
+ #
30
+ # Returns type in human-readable format.
31
+ #
32
+ # @return [Symbol]
33
+ #
34
+ def type
35
+ @type.downcase.to_sym
36
+ end
37
+
38
+ end # DataSource::Field
39
+ end # GroupDocs
@@ -1,1550 +1,1550 @@
1
- module GroupDocs
2
- class Document < Api::Entity
3
-
4
- require 'groupdocs/document/annotation'
5
- require 'groupdocs/document/change'
6
- require 'groupdocs/document/field'
7
- require 'groupdocs/document/metadata'
8
- require 'groupdocs/document/rectangle'
9
- require 'groupdocs/document/view'
10
- require 'groupdocs/document/editor'
11
- require 'groupdocs/document/style'
12
- require 'groupdocs/document/page'
13
-
14
-
15
- ACCESS_MODES = {
16
- :private => 0,
17
- :restricted => 1,
18
- :public => 2,
19
- :inherited => 254,
20
- :denied => 255,
21
- }
22
-
23
- include Api::Helpers::AccessMode
24
- include Api::Helpers::AccessRights
25
- include Api::Helpers::Status
26
- extend Api::Helpers::MIME
27
-
28
- #
29
- # Returns an array of views for all documents.
30
- #
31
- # @param [Hash] options
32
- # @option options [Integer] :page_index Page to start with
33
- # @option options [Integer] :page_size Total number of entries
34
- # @param [Hash] access Access credentials
35
- # @option access [String] :client_id
36
- # @option access [String] :private_key
37
- # @return [Array<GroupDocs::Document::View>]
38
- #
39
- def self.views!(options = {}, access = {})
40
- api = Api::Request.new do |request|
41
- request[:access] = access
42
- request[:method] = :GET
43
- request[:path] = '/doc/{{client_id}}/views'
44
- end
45
- api.add_params(options)
46
- json = api.execute!
47
-
48
- json[:views].map do |view|
49
- Document::View.new(view)
50
- end
51
- end
52
-
53
- #
54
- # Returns an array of all templates (documents in "Templates" directory).
55
- #
56
- # @param [Hash] options Options
57
- # @option options [String] :orderBy Order by column
58
- # @option options [Boolean] :isAscending Order by ascending or descending
59
- # @param [Hash] access Access credentials
60
- # @option access [String] :client_id
61
- # @option access [String] :private_key
62
- # @return [Array<GroupDocs::Document>]
63
- #
64
- def self.templates!(options = {}, access = {})
65
- api = Api::Request.new do |request|
66
- request[:access] = access
67
- request[:method] = :GET
68
- request[:path] = '/merge/{{client_id}}/templates'
69
- end
70
- api.add_params(options)
71
- json = api.execute!
72
- json[:templates].map do |template|
73
- template.merge!(:file => Storage::File.new(template))
74
- Document.new(template)
75
- end
76
- end
77
-
78
- #
79
- # Signs given documents with signatures.
80
- #
81
- # @example
82
- # # prepare documents
83
- # file_one = GroupDocs::Storage::File.new(name: 'document_one.doc', local_path: '~/Documents/document_one.doc')
84
- # file_two = GroupDocs::Storage::File.new(name: 'document_one.pdf', local_path: '~/Documents/document_one.pdf')
85
- # document_one = file_one.to_document
86
- # document_two = file_two.to_document
87
- # # prepare signatures
88
- # signature_one = GroupDocs::Signature.new(name: 'John Smith', image_path: '~/Documents/signature_one.png')
89
- # signature_two = GroupDocs::Signature.new(name: 'Sara Smith', image_path: '~/Documents/signature_two.png')
90
- # signature_one.position = { top: 0.1, left: 0.07, width: 50, height: 50 }
91
- # signature_one.email = "test1@mail.com"
92
- # signature_two.position = { top: 0.2, left: 0.2, width: 100, height: 100 }
93
- # signature_one.email = "test1@mail.com"
94
- # # sign documents and download results
95
- # signed_documents = GroupDocs::Document.sign_documents!([document_one, document_two], [signature_one, signature_two])
96
- # signed_documents.each do |document|
97
- # document.file.download! '~/Documents'
98
- # end
99
- #
100
- # @param [Array<GroupDocs::Document>] documents Each document file should have "#name" and "#local_path"
101
- # @param [Array<GroupDocs::Signature>] signatures Each signature should have "#name", "#image_path" and "#position"
102
- #
103
- def self.sign_documents!(documents, signatures, options = {}, access = {})
104
- documents.each do |document|
105
- document.is_a?(Document) or raise ArgumentError, "Each document should be GroupDocs::Document object, received: #{document.inspect}"
106
- document.file.name or raise ArgumentError, "Each document file should have name, received: #{document.file.name.inspect}"
107
- document.file.local_path or raise ArgumentError, "Each document file should have local_path, received: #{document.file.local_path.inspect}"
108
- end
109
- signatures.each do |signature|
110
- signature.is_a?(Signature) or raise ArgumentError, "Each signature should be GroupDocs::Signature object, received: #{signature.inspect}"
111
- signature.name or raise ArgumentError, "Each signature should have name, received: #{signature.name.inspect}"
112
- signature.image_path or raise ArgumentError, "Each signature should have image_path, received: #{signature.image_path.inspect}"
113
- signature.position or raise ArgumentError, "Each signature should have position, received: #{signature.position.inspect}"
114
- end
115
-
116
- documents_to_sign = []
117
- documents.map(&:file).each do |file|
118
- document = { :name => file.name }
119
- contents = File.open(file.local_path, 'rb').read
120
- contents = Base64.strict_encode64(contents)
121
- document.merge!(:data => "data:#{mime_type(file.local_path)};base64,#{contents}")
122
-
123
- documents_to_sign << document
124
-
125
- end
126
-
127
- signers = []
128
- signatures.each do |signature|
129
- contents = File.open(signature.image_path, 'rb').read
130
- contents = Base64.strict_encode64(contents)
131
- signer = { :name => signature.name, :data => "data:#{mime_type(signature.image_path)};base64,#{contents}" }
132
- signer.merge!(signature.position)
133
- # place signature on is not implemented yet
134
- signer.merge!(:placeSignatureOn => nil)
135
- signer.merge!(:email => signature.email)
136
-
137
- signers << signer
138
-
139
-
140
- end
141
-
142
- json = Api::Request.new do |request|
143
- request[:access] = access
144
- request[:method] = :POST
145
- request[:path] = '/signature/{{client_id}}/sign'
146
- request[:request_body] = { :documents => documents_to_sign, :signers => signers }
147
- end.execute!
148
- json[:jobId]
149
-
150
- end
151
-
152
- #
153
- # Get sign documents status
154
- #
155
- # @param [String] job_guid
156
- # @param [Hash] access Access credentials
157
- # @option access [String] :client_id
158
- # @option access [String] :private_key
159
- #
160
- def document_status!(job_guid, access = {})
161
- json = Api::Request.new do |request|
162
- request[:access] = access
163
- request[:method] = :PUT
164
- request[:path] = "/signature/{{client_id}}/documents/#{job_guid}"
165
- end.execute!
166
-
167
- json[:documents]
168
- end
169
-
170
- #
171
- # Cnanged in release 2.0.0
172
- #
173
- # Returns a document metadata by given path.
174
- #
175
- # @param [String] path Full path to document
176
- # @param [Hash] access Access credentials
177
- # @option access [String] :client_id
178
- # @option access [String] :private_key
179
- # @return [Array<GroupDocs::Document::View>]
180
- #
181
- def self.metadata!(path, access = {})
182
- json = Api::Request.new do |request|
183
- request[:access] = access
184
- request[:method] = :GET
185
- request[:path] = "/doc/{{client_id}}/files/#{path}"
186
- end.execute!
187
-
188
- Document::MetaData.new do |metadata|
189
- metadata.id = json[:id]
190
- metadata.guid = json[:guid]
191
- metadata.page_count = json[:page_count]
192
- metadata.views_count = json[:views_count]
193
- metadata.type = json[:type]
194
- metadata.url = json[:url]
195
- if json[:last_view]
196
- metadata.last_view = json[:last_view]
197
- end
198
- end
199
- end
200
-
201
- # @attr [GroupDocs::Storage::File] file
202
- attr_accessor :file
203
- # @attr [Time] process_date
204
- attr_accessor :process_date
205
- # @attr [Array<GroupDocs::Storage::File>] outputs
206
- attr_accessor :outputs
207
- # @attr [Array<Symbol>] output_formats
208
- attr_accessor :output_formats
209
- # @attr [Symbol] status
210
- attr_accessor :status
211
- # @attr [Integer] order
212
- attr_accessor :order
213
- # @attr [Integer] field_count
214
- attr_accessor :field_count
215
-
216
- #added in release 1.6.0
217
- # @attr [String] fieldType
218
- attr_accessor :fieldType
219
- # @attr [Int] dependent_questionnaires_count
220
- attr_accessor :dependent_questionnaires_count
221
- # @attr [Long] upload_time
222
- attr_accessor :upload_time
223
-
224
-
225
- #added in release 2.0.0
226
- # @attr [String] documentDescription
227
- attr_accessor :documentDescription
228
-
229
-
230
- [
231
- :news ,
232
- :alerts ,
233
- :support ,
234
- :is_real_time_broadcast ,
235
- :is_scroll_broadcast ,
236
- :is_zoom_broadcast ,
237
- :is_annotation_navigation_widget ,
238
- :is_annotation_zoom_widget ,
239
- :is_annotation_download_widget ,
240
- :is_annotation_print_widget ,
241
- :is_annotation_help_widget ,
242
- :is_right_panel ,
243
- :is_thumbnails_panel ,
244
- :is_toolbar ,
245
- :is_text_annotation_button ,
246
- :is_rectangle_annotation_button ,
247
- :is_point_annotation_button ,
248
- :is_strikeout_annotation_button ,
249
- :is_polyline_annotation_button ,
250
- :is_typewriter_annotation_button ,
251
- :is_watermark_annotation_button ,
252
- :is_viewer_navigation_widget ,
253
- :is_viewer_zoom_widget ,
254
- :is_viewer_download_widget ,
255
- :is_viewer_print_widget ,
256
- :is_viewer_help_widget ,
257
- ].each do |option|
258
- # @attr [Boolean] option
259
- attr_accessor :"#{option}_enabled"
260
- end
261
- [
262
- :standard_header_always ,
263
- :annotation_document_name ,
264
- :viewer_document_name ,
265
- ].each do |option|
266
- # @attr [Boolean] option
267
- attr_accessor :"is_#{option}_shown"
268
- end
269
-
270
-
271
- #
272
- # Coverts passed array of attributes hash to array of GroupDocs::Storage::File.
273
- #
274
- # @param [Array<Hash>] outputs Array of file attributes hashes
275
- #
276
- def outputs=(outputs)
277
- if outputs
278
- @outputs = outputs.map do |output|
279
- GroupDocs::Storage::File.new(output)
280
- end
281
- end
282
- end
283
-
284
- #
285
- # Returns output formats in human-readable format.
286
- #
287
- # @return [Array<Symbol>]
288
- #
289
- def output_formats
290
- @output_formats.split(',').map(&:to_sym)
291
- end
292
-
293
- #
294
- # Converts status to human-readable format.
295
- #
296
- # @return [Symbol]
297
- #
298
- def status
299
- parse_status(@status)
300
- end
301
-
302
- #
303
- # Converts timestamp which is return by API server to Time object.
304
- #
305
- # @return [Time]
306
- #
307
- def process_date
308
- Time.at(@process_date / 1000)
309
- end
310
-
311
- # Compatibility with response JSON
312
- alias_method :proc_date=, :process_date=
313
-
314
- #
315
- # Creates new GroupDocs::Document.
316
- #
317
- # You should avoid creating documents directly. Instead, use #to_document
318
- # instance method of GroupDocs::Storage::File.
319
- #
320
- # @raise [ArgumentError] If file is not passed or is not an instance of GroupDocs::Storage::File
321
- #
322
- def initialize(options = {}, &blk)
323
- super(options, &blk)
324
- file.is_a?(GroupDocs::Storage::File) or raise ArgumentError,
325
- "You have to pass GroupDocs::Storage::File object: #{file.inspect}."
326
- end
327
-
328
- #
329
- # Returns a stream of bytes representing a particular document page image.
330
- #
331
- # @param [String] path Document path
332
- # @param [String] name Name document (format - jpg)
333
- # @example path = "#{File.dirname(__FILE__)}"
334
- # name = "test.jpg"
335
- # @param [Integer] page_number Document page number to get image for
336
- # @param [Integer] dimension Image dimension "<width>x<height>"(500x600)
337
- # @param [Hash] options
338
- # @option options [Integer] :quality Image quality in range 1-100.
339
- # @option options [Boolean] :use_pdf A flag indicating whether a document should be converted to PDF format before generating the image.
340
- # @option options [Boolean] :expires The date and time in milliseconds since epoch the URL expires.
341
- # @param [Hash] access Access credentials
342
- # @option access [String] :client_id
343
- # @option access [String] :private_key
344
- # @return []
345
- #
346
- def page_image!(path, name, page_number, dimension, options = {}, access = {})
347
- api = Api::Request.new do |request|
348
- request[:access] = access
349
- request[:method] = :DOWNLOAD
350
- request[:path] = "/doc/{{client_id}}/files/#{file.guid}/pages/#{page_number}/images/#{dimension}"
351
- end
352
- api.add_params(options)
353
- response = api.execute!
354
-
355
- filepath = "#{path}/#{name}"
356
- Object::File.open(filepath, 'wb') do |file|
357
- file.write(response)
358
- end
359
-
360
- filepath
361
-
362
- end
363
-
364
-
365
-
366
-
367
-
368
-
369
- #
370
- # Returns array of URLs to images representing document pages.
371
- #
372
- # @example
373
- # file = GroupDocs::Storage::Folder.list!.last
374
- # document = file.to_document
375
- # document.page_images! 1024, 768, first_page: 0, page_count: 1
376
- #
377
- # @param [Integer] width Image width
378
- # @param [Integer] height Image height
379
- # @param [Hash] options
380
- # @option options [Integer] :first_page Start page to return image for (starting with 0)
381
- # @option options [Integer] :page_count Number of pages to return image for
382
- # @option options [Integer] :quality
383
- # @option options [Boolean] :use_pdf
384
- # @option options [Boolean] :token
385
- # @param [Hash] access Access credentials
386
- # @option access [String] :client_id
387
- # @option access [String] :private_key
388
- # @return [Array<String>]
389
- #
390
- def page_images!(width, height, options = {}, access = {})
391
- api = Api::Request.new do |request|
392
- request[:access] = access
393
- request[:method] = :GET
394
- request[:path] = "/doc/{{client_id}}/files/#{file.guid}/pages/images/#{width}x#{height}/urls"
395
- end
396
- api.add_params(options)
397
- json = api.execute!
398
-
399
- json[:url]
400
- end
401
-
402
-
403
- #
404
- # Returns editing metadata.
405
- #
406
- # @param [Hash] access Access credentials
407
- # @option access [String] :client_id
408
- # @option access [String] :private_key
409
- #
410
- def editlock!(access = {})
411
- Api::Request.new do |request|
412
- request[:access] = access
413
- request[:method] = :GET
414
- request[:path] = "/doc/{{client_id}}/files/#{file.guid}/editlock"
415
- end.execute!
416
- end
417
-
418
- #
419
- # Removes edit lock for a document and replaces the document with its edited copy
420
- #
421
- # @param [Hash] options
422
- # @option options [String] :lockId Start page to return image for (starting with 0)
423
- # @param [Hash] access Access credentials
424
- # @option access [String] :client_id
425
- # @option access [String] :private_key
426
- # @return [Integer]
427
- #
428
- def editlock_clear!(options = {}, access = {})
429
- api = Api::Request.new do |request|
430
- request[:access] = access
431
- request[:method] = :DELETE
432
- request[:path] = "/doc/{{client_id}}/files/#{file.guid}/editlock"
433
- end
434
- api.add_params(options).execute!
435
- end
436
-
437
- #
438
- # Returns tags assigned to the document
439
- #
440
- # @param [Hash] access Access credentials
441
- # @option access [String] :client_id
442
- # @option access [String] :private_key
443
- # @return [Array<String>]
444
- #
445
- def tags!(access = {})
446
- Api::Request.new do |request|
447
- request[:access] = access
448
- request[:method] = :GET
449
- request[:path] = "/doc/{{client_id}}/files/#{file.guid}/tags"
450
- end.execute!
451
- end
452
-
453
- #
454
- # Assign tags to the document.
455
- #
456
- # @param [Hash] access Access credentials
457
- # @option access [String] :client_id
458
- # @option access [String] :private_key
459
- # @return [String]
460
- #
461
- def tags_set!(access = {})
462
- Api::Request.new do |request|
463
- request[:access] = access
464
- request[:method] = :PUT
465
- request[:path] = "/doc/{{client_id}}/files/#{file.guid}/tags"
466
- end.execute!
467
- end
468
-
469
- #
470
- # Removes tags assigned to the document
471
- #
472
- # @param [Hash] access Access credentials
473
- # @option access [String] :client_id
474
- # @option access [String] :private_key
475
- # @return [String]
476
- #
477
- def tags_clear!(access = {})
478
- Api::Request.new do |request|
479
- request[:access] = access
480
- request[:method] = :DELETE
481
- request[:path] = "/doc/{{client_id}}/files/#{file.guid}/tags"
482
- end.execute!
483
- end
484
-
485
- #
486
- # Returns document content
487
- #
488
- # @param [String] content_type Content type
489
- # @param [Hash] access Access credentials
490
- # @option access [String] :client_id
491
- # @option access [String] :private_key
492
- # @return [String]
493
- #
494
- def content!(content_type, access = {})
495
- json = Api::Request.new do |request|
496
- request[:access] = access
497
- request[:method] = :GET
498
- request[:path] = "/doc/{{client_id}}/files/#{file.guid}/content/#{content_type}"
499
- end.execute!
500
-
501
- json[:content]
502
- end
503
-
504
- #
505
- # Returns array of URLs to images representing document pages thumbnails.
506
- #
507
- # @example
508
- # file = GroupDocs::Storage::Folder.list!.last
509
- # document = file.to_document
510
- # document.thumbnails! first_page: 0, page_count: 1, width: 1024
511
- #
512
- # @param [Hash] options
513
- # @option options [Integer] :page_number Start page to return image for (starting with 0)
514
- # @option options [Integer] :page_count Number of pages to return image for
515
- # @option options [Integer] :width
516
- # @option options [Integer] :quality
517
- # @option options [Boolean] :use_pdf
518
- # @param [Hash] access Access credentials
519
- # @option access [String] :client_id
520
- # @option access [String] :private_key
521
- # @return [Array<String>]
522
- #
523
- def thumbnails!(options = {}, access = {})
524
- api = Api::Request.new do |request|
525
- request[:access] = access
526
- request[:method] = :POST
527
- request[:path] = "/doc/{{client_id}}/files/#{file.guid}/thumbnails"
528
- end
529
- api.add_params(options)
530
- json = api.execute!
531
-
532
- json[:image_urls]
533
- end
534
-
535
-
536
-
537
- #
538
- # Returns access mode of document.
539
- #
540
- # @param [Hash] access Access credentials
541
- # @option access [String] :client_id
542
- # @option access [String] :private_key
543
- # @return [Symbol] One of :private, :restricted or :public access modes
544
- #
545
- def access_mode!(access = {})
546
- json = Api::Request.new do |request|
547
- request[:access] = access
548
- request[:method] = :GET
549
- request[:path] = "/doc/{{client_id}}/files/#{file.guid}/accessinfo"
550
- end.execute!
551
-
552
- parse_access_mode(json[:access])
553
- end
554
-
555
- #
556
- # Sets access mode of document.
557
- #
558
- # @param [Symbol] mode One of :private, :restricted or :public access modes
559
- # @param [Hash] access Access credentials
560
- # @option access [String] :client_id
561
- # @option access [String] :private_key
562
- # @return [Symbol] Set access mode
563
- #
564
- def access_mode_set!(mode, access = {})
565
- api = Api::Request.new do |request|
566
- request[:access] = access
567
- request[:method] = :PUT
568
- request[:path] = "/doc/{{client_id}}/files/#{file.id}/accessinfo"
569
- end
570
- api.add_params(:mode => ACCESS_MODES[mode])
571
- json = api.execute!
572
-
573
- parse_access_mode(json[:access])
574
- end
575
- # note that aliased version cannot accept access credentials hash
576
- alias_method :access_mode=, :access_mode_set!
577
-
578
- #
579
- # Returns array of file formats document can be converted to.
580
- #
581
- # @param [Hash] access Access credentials
582
- # @option access [String] :client_id
583
- # @option access [String] :private_key
584
- # @return [Array<Symbol>]
585
- #
586
- def formats!(access = {})
587
- json = Api::Request.new do |request|
588
- request[:access] = access
589
- request[:method] = :GET
590
- request[:path] = "/doc/{{client_id}}/files/#{file.id}/formats"
591
- end.execute!
592
-
593
- json[:types].map do |format|
594
- format.downcase.to_sym
595
- end
596
- end
597
-
598
- #
599
- # Cnanged in release 2.0.0
600
- #
601
- # Returns document metadata.
602
- #
603
- # @param [Hash] access Access credentials
604
- # @option access [String] :client_id
605
- # @option access [String] :private_key
606
- # @return [GroupDocs::Document::MetaData]
607
- #
608
- def metadata!(access = {})
609
- json = Api::Request.new do |request|
610
- request[:access] = access
611
- request[:method] = :GET
612
- request[:path] = "/doc/{{client_id}}/files/#{file.guid}/metadata"
613
- end.execute!
614
-
615
- Document::MetaData.new do |metadata|
616
- metadata.id = json[:id]
617
- metadata.guid = json[:guid]
618
- metadata.page_count = json[:page_count]
619
- metadata.views_count = json[:views_count]
620
- metadata.type = json[:type]
621
- metadata.url = json[:url]
622
- if json[:last_view]
623
- metadata.last_view = json[:last_view]
624
- end
625
- end
626
- end
627
-
628
- #
629
- # Returns an array of document fields.
630
- #
631
- # @param [Hash] access Access credentials
632
- # @option access [String] :client_id
633
- # @option access [String] :private_key
634
- # @return [Array<GroupDocs::Document::Field>]
635
- #
636
- def fields!(access = {})
637
- api = Api::Request.new do |request|
638
- request[:access] = access
639
- request[:method] = :GET
640
- request[:path] = "/doc/{{client_id}}/files/#{file.guid}/fields"
641
- end
642
- api.add_params(:include_geometry => true)
643
- json = api.execute!
644
-
645
- json[:fields].map do |field|
646
- Document::Field.new(field)
647
- end
648
- end
649
-
650
- #
651
- # Returns an array of users a document is shared with.
652
- #
653
- # @param [Hash] access Access credentials
654
- # @option access [String] :client_id
655
- # @option access [String] :private_key
656
- # @return [Array<GroupDocs::User>]
657
- #
658
- def sharers!(access = {})
659
- json = Api::Request.new do |request|
660
- request[:access] = access
661
- request[:method] = :GET
662
- request[:path] = "/doc/{{client_id}}/files/#{file.id}/accessinfo"
663
- end.execute!
664
-
665
- json[:sharers].map do |user|
666
- User.new(user)
667
- end
668
- end
669
-
670
- #
671
- # Returns an array of users a document is shared with.
672
- # @param [String] sharers_types
673
- # @param [Hash] options
674
- # @option options [String] :page_index
675
- # @option options [String] :page_size
676
- # @option options [String] :order_by
677
- # @option options [Boolean] :order_ask
678
- # @param [Hash] access Access credentials
679
- # @option access [String] :client_id
680
- # @option access [String] :private_key
681
- # @return [Array<GroupDocs::User>]
682
- #
683
- def shared_documents!(sharers_types, options = {}, access = {})
684
- api = Api::Request.new do |request|
685
- request[:access] = access
686
- request[:method] = :GET
687
- request[:path] = "/doc/{{client_id}}/shares/#{sharers_types}"
688
- end
689
- api.add_params(options).execute!
690
-
691
- end
692
-
693
- #
694
- # Sets document sharers to given emails.
695
- #
696
- # If empty array or nil passed, clears sharers.
697
- #
698
- # @param [Array] emails List of email addresses to share with
699
- # @param [Hash] access Access credentials
700
- # @option access [String] :client_id
701
- # @option access [String] :private_key
702
- # @return [Array<GroupDocs::User>]
703
- #
704
- def sharers_set!(emails, access = {})
705
- if emails.nil? || emails.empty?
706
- sharers_clear!(access)
707
- else
708
- json = Api::Request.new do |request|
709
- request[:access] = access
710
- request[:method] = :PUT
711
- request[:path] = "/doc/{{client_id}}/files/#{file.id}/sharers"
712
- request[:request_body] = emails
713
- end.execute!
714
-
715
- json[:shared_users].map do |user|
716
- User.new(user)
717
- end
718
- end
719
- end
720
-
721
- #
722
- # Sets document password.
723
- #
724
- # @param [String] password New password for document
725
- # @param [Hash] access Access credentials
726
- # @option access [String] :client_id
727
- # @option access [String] :private_key
728
- # @return [Array<GroupDocs::User>]
729
- #
730
- def password_set!(password, access = {})
731
- Api::Request.new do |request|
732
- request[:access] = access
733
- request[:method] = :PUT
734
- request[:path] = "/doc/{{client_id}}/files/#{file.guid}/password"
735
- request[:request_body] = password
736
- end.execute!
737
-
738
- end
739
-
740
- #
741
- # Sets document user status.
742
- #
743
- # @param [String] status (Pending = 0, Accepted = 1, Declined = 2)
744
- # @param [Hash] access Access credentials
745
- # @option access [String] :client_id
746
- # @option access [String] :private_key
747
- # @return [String]
748
- #
749
- def user_status_set!(status, access = {})
750
- Api::Request.new do |request|
751
- request[:access] = access
752
- request[:method] = :PUT
753
- request[:path] = "/doc/{{client_id}}/files/#{file.guid}/sharer"
754
- request[:request_body] = status
755
- end.execute!
756
-
757
- end
758
-
759
- #
760
- # Clears sharers list.
761
- #
762
- # @param [Hash] access Access credentials
763
- # @option access [String] :client_id
764
- # @option access [String] :private_key
765
- # @return nil
766
- #
767
- def sharers_clear!(access = {})
768
- Api::Request.new do |request|
769
- request[:access] = access
770
- request[:method] = :DELETE
771
- request[:path] = "/doc/{{client_id}}/files/#{file.id}/sharers"
772
- end.execute![:shared_users]
773
-
774
- end
775
-
776
- #
777
- # Converts document to given format.
778
- #
779
- # @example
780
- # document = GroupDocs::Storage::Folder.list!.first.to_document
781
- # job = document.convert!(:docx)
782
- # sleep(5) # wait for server to finish converting
783
- # original_document = job.documents![:inputs].first
784
- # converted_file = original_file.outputs.first
785
- # converted_file.download!(File.dirname(__FILE__))
786
- #
787
- # @param [Symbol] format
788
- # @param [Hash] options
789
- # @option options [Boolean] :email_results
790
- # @option options [String] :new_description
791
- # @option options [String] :print_script
792
- # @option options [String] :callback
793
- # @param [Hash] access Access credentials
794
- # @option access [String] :client_id
795
- # @option access [String] :private_key
796
- # @return [GroupDocs::Job] Created job
797
- #
798
- def convert!(format, options = {}, access = {})
799
- options.merge!(:new_type => format)
800
-
801
- api = Api::Request.new do |request|
802
- request[:access] = access
803
- request[:method] = :POST
804
- request[:path] = "/async/{{client_id}}/files/#{file.guid}"
805
- end
806
- api.add_params(options)
807
- json = api.execute!
808
-
809
- Job.new(:id => json[:job_id])
810
- end
811
-
812
- #
813
- # Creates new job to merge datasource into document.
814
- #
815
- # @param [GroupDocs::DataSource] datasource
816
- # @param [Hash] options
817
- # @option options [Boolean] :new_type New file format type
818
- # @option options [Boolean] :email_results Set to true if converted document should be emailed
819
- # @param [Hash] access Access credentials
820
- # @option access [String] :client_id
821
- # @option access [String] :private_key
822
- # @return [GroupDocs::Job]
823
- #
824
- # @raise [ArgumentError] if datasource is not GroupDocs::DataSource object
825
- #
826
- def datasource!(datasource, options = {}, access = {})
827
- datasource.is_a?(GroupDocs::DataSource) or raise ArgumentError,
828
- "Datasource should be GroupDocs::DataSource object, received: #{datasource.inspect}"
829
-
830
- api = Api::Request.new do |request|
831
- request[:access] = access
832
- request[:method] = :POST
833
- request[:path] = "/merge/{{client_id}}/files/#{file.guid}/datasources/#{datasource.id}"
834
- end
835
- api.add_params(options)
836
- json = api.execute!
837
-
838
- Job.new(:id => json[:job_id])
839
- end
840
-
841
- #
842
- # Creates new job to merge datasource fields into document.
843
- #
844
- # @param [GroupDocs::DataSource] datasource
845
- # @param [Hash] options
846
- # @option options [Boolean] :new_type New file format type
847
- # @option options [Boolean] :email_results Set to true if converted document should be emailed
848
- # @option options [Boolean] :assembly_name
849
- # @param [Array] datasourceFields (:name [String], :value [String], :contentType [String], :type [String], :nested_fields [<Array> datasourceFields])
850
- # @param [Hash] access Access credentials
851
- # @option access [String] :client_id
852
- # @option access [String] :private_key
853
- # @return [GroupDocs::Job]
854
- #
855
- # @raise [ArgumentError] if datasource is not GroupDocs::DataSource object
856
- #
857
- def datasource_fields!(datasource, options = {}, access = {})
858
- datasource.is_a?(GroupDocs::DataSource) or raise ArgumentError,
859
- "Datasource should be GroupDocs::DataSource object, received: #{datasource.inspect}"
860
-
861
- api = Api::Request.new do |request|
862
- request[:access] = access
863
- request[:method] = :POST
864
- request[:path] = "/merge/{{client_id}}/files/#{file.guid}/datasources"
865
- request[:request_body] = datasource.fields
866
- end
867
- api.add_params(options)
868
- json = api.execute!
869
-
870
- Job.new(:id => json[:job_id])
871
- end
872
-
873
-
874
- #
875
- # Returns an array of questionnaires.
876
- #
877
- # @param [Hash] access Access credentials
878
- # @option access [String] :client_id
879
- # @option access [String] :private_key
880
- # @return [Array<GroupDocs::Questionnaire>]
881
- #
882
- def questionnaires!(access = {})
883
- json = Api::Request.new do |request|
884
- request[:access] = access
885
- request[:method] = :GET
886
- request[:path] = "/merge/{{client_id}}/files/#{file.guid}/questionnaires"
887
- end.execute!
888
-
889
- json[:questionnaires].map do |questionnaire|
890
- Questionnaire.new(questionnaire)
891
- end
892
- end
893
-
894
- #
895
- # Adds questionnaire to document.
896
- #
897
- # @param [GroupDocs::Questionnaire] questionnaire
898
- # @param [Hash] access Access credentials
899
- # @option access [String] :client_id
900
- # @option access [String] :private_key
901
- #
902
- # @raise [ArgumentError] if questionnaire is not GroupDocs::Questionnaire object
903
- #
904
- def add_questionnaire!(questionnaire, access = {})
905
- questionnaire.is_a?(GroupDocs::Questionnaire) or raise ArgumentError,
906
- "Questionnaire should be GroupDocs::Questionnaire object, received: #{questionnaire.inspect}"
907
-
908
- Api::Request.new do |request|
909
- request[:access] = access
910
- request[:method] = :PUT
911
- request[:path] = "/merge/{{client_id}}/files/#{file.guid}/questionnaires/#{questionnaire.id}"
912
- end.execute!
913
- end
914
-
915
- #
916
- # Creates questionnaire and adds it to document.
917
- #
918
- # @param [GroupDocs::Questionnaire] questionnaire
919
- # @param [Hash] access Access credentials
920
- # @option access [String] :client_id
921
- # @option access [String] :private_key
922
- # @return [GroupDocs::Questionnaire]
923
- #
924
- # @raise [ArgumentError] if questionnaire is not GroupDocs::Questionnaire object
925
- #
926
- def create_questionnaire!(questionnaire, access = {})
927
- questionnaire.is_a?(GroupDocs::Questionnaire) or raise ArgumentError,
928
- "Questionnaire should be GroupDocs::Questionnaire object, received: #{questionnaire.inspect}"
929
-
930
- json = Api::Request.new do |request|
931
- request[:access] = access
932
- request[:method] = :POST
933
- request[:path] = "/merge/{{client_id}}/files/#{file.guid}/questionnaires"
934
- request[:request_body] = questionnaire.to_hash
935
- end.execute!
936
-
937
- questionnaire.id = json[:questionnaire_id]
938
- questionnaire
939
- end
940
-
941
- #
942
- # Detaches questionnaire from document.
943
- #
944
- # @param [GroupDocs::Questionnaire] questionnaire
945
- # @param [Hash] access Access credentials
946
- # @option access [String] :client_id
947
- # @option access [String] :private_key
948
- #
949
- # @raise [ArgumentError] if questionnaire is not GroupDocs::Questionnaire object
950
- #
951
- def remove_questionnaire!(questionnaire, access = {})
952
- questionnaire.is_a?(GroupDocs::Questionnaire) or raise ArgumentError,
953
- "Questionnaire should be GroupDocs::Questionnaire object, received: #{questionnaire.inspect}"
954
-
955
- Api::Request.new do |request|
956
- request[:access] = access
957
- request[:method] = :DELETE
958
- request[:path] = "/merge/{{client_id}}/files/#{file.guid}/questionnaires/#{questionnaire.id}"
959
- end.execute!
960
- end
961
-
962
- #
963
- # Returns an array of annotations.
964
- #
965
- # @param [Hash] access Access credentials
966
- # @option access [String] :client_id
967
- # @option access [String] :private_key
968
- # @return [Array<GroupDocs::Document::Annotation>]
969
- #
970
- def annotations!(access = {})
971
- json = Api::Request.new do |request|
972
- request[:access] = access
973
- request[:method] = :GET
974
- request[:path] = "/ant/{{client_id}}/files/#{file.guid}/annotations"
975
- end.execute!
976
-
977
- if json[:annotations]
978
- json[:annotations].map do |annotation|
979
- annotation.merge!(:document => self)
980
- Document::Annotation.new(annotation)
981
- end
982
- else
983
- []
984
- end
985
- end
986
-
987
- #
988
- # Changed in release 1.5.8
989
- # Returns document details.
990
- #
991
- # @param [Hash] access Access credentials
992
- # @option access [String] :client_id
993
- # @option access [String] :private_key
994
- # @return [Hash]
995
- #
996
- def details!(access = {})
997
- api = Api::Request.new do |request|
998
- request[:access] = access
999
- request[:method] = :GET
1000
- request[:path] = "/comparison/{{client_id}}document"
1001
- end
1002
- api.add_params(:guid => file.guid)
1003
- api.execute!
1004
- end
1005
-
1006
- #
1007
- # Changed in release 1.5.8
1008
- # Schedules a job for comparing document with given.
1009
- #
1010
- # @param [GroupDocs::Document] document
1011
- # @param [Hash] access Access credentials
1012
- # @option access [String] :client_id
1013
- # @option access [String] :private_key
1014
- # @return [GroupDocs::Job]
1015
- #
1016
- # @raise [ArgumentError] if document is not GroupDocs::Document object
1017
- #
1018
- def compare!(document, callback, access = {})
1019
- document.is_a?(GroupDocs::Document) or raise ArgumentError,
1020
- "Document should be GroupDocs::Document object, received: #{document.inspect}"
1021
-
1022
- api = Api::Request.new do |request|
1023
- request[:access] = access
1024
- request[:method] = :GET
1025
- request[:path] = "/comparison/{{client_id}}/compare"
1026
- end
1027
- api.add_params(:source => file.guid, :target => document.file.guid, :callback => callback)
1028
- json = api.execute!
1029
-
1030
- Job.new(:id => json[:job_id])
1031
- end
1032
-
1033
- #
1034
- # Updated in release 2.1.0
1035
- #
1036
- # Schedules a job for comparing document with given.
1037
- #
1038
- # @param [Array[GroupDocs::Document::Change]] changes Comparison changes to update (accept or reject)
1039
- # @option id [Float] :id
1040
- # @option type [String] :type
1041
- # @option action [String] :action
1042
- # @option Page [Array] :page
1043
- # @option box [Array] :box
1044
- # @option text [String] :text
1045
- # @param [Hash] access Access credentials
1046
- # @option access [String] :client_id
1047
- # @option access [String] :private_key
1048
- # @return [GroupDocs::Change]
1049
- #
1050
- def update_changes!(changes, access = {})
1051
- if changes.is_a?(Array)
1052
- changes.each do |e|
1053
- e.is_a?(GroupDocs::Document::Change) or raise ArgumentError,
1054
- "Change should be GroupDocs::Document::Change object, received: #{e.inspect}"
1055
- end
1056
- else
1057
- raise ArgumentError, "Changes should be Array , received: #{changes.inspect}"
1058
- end
1059
- api = Api::Request.new do |request|
1060
- request[:access] = access
1061
- request[:method] = :PUT
1062
- request[:path] = "/comparison/public/#{file.guid}/changes"
1063
- request[:request_body] = changes
1064
- end
1065
- api.execute!
1066
- end
1067
-
1068
- #
1069
- # @Changed in release 1.5.9
1070
- # Returns an array of changes in document.
1071
- #
1072
- # @example
1073
- # document_one = GroupDocs::Storage::Folder.list![0].to_document
1074
- # document_two = GroupDocs::Storage::Folder.list![1].to_document
1075
- # job = document_one.compare!(document_two)
1076
- # sleep(5) # wait for server to finish comparing
1077
- # result = job.documents![:outputs].first
1078
- # result.changes!
1079
- #
1080
- # @param [Hash] access Access credentials
1081
- # @option access [String] :client_id
1082
- # @option access [String] :private_key
1083
- #
1084
- def changes!(access = {})
1085
- api = Api::Request.new do |request|
1086
- request[:access] = access
1087
- request[:method] = :GET
1088
- request[:path] = "/comparison/public/#{file.guid}/changes"
1089
- end
1090
- json = api.execute!
1091
-
1092
- json[:changes].map do |change|
1093
- Document::Change.new(change)
1094
- end
1095
- end
1096
-
1097
- #
1098
- # Changed in release 1.5.8
1099
- # Download comparison result file.
1100
- #
1101
- # @example
1102
- # document_one = GroupDocs::Storage::Folder.list![0].to_document
1103
- # document_two = GroupDocs::Storage::Folder.list![1].to_document
1104
- # job = document_one.compare!(document_two)
1105
- # sleep(5) # wait for server to finish comparing
1106
- # result = job.documents![:outputs].first
1107
- # result.download!("#{File.dirname(__FILE__)}", {:format => 'pdf'})
1108
- #
1109
- # @param [Hash] options
1110
- # @option format [String] :format Comparison result file GUID #
1111
- # @param [Hash] access Access credentials
1112
- # @option access [String] :client_id
1113
- # @option access [String] :private_key
1114
- #
1115
- #
1116
- def download!( path, options = {}, access = {})
1117
- api = Api::Request.new do |request|
1118
- request[:access] = access
1119
- request[:method] = :DOWNLOAD
1120
- request[:path] = "/comparison/public/#{file.guid}/download"
1121
- end
1122
- api.add_params(options)
1123
- response = api.execute!
1124
-
1125
- if file.name.split('.').last != options[:format]
1126
- file_name = file.name.delete!(file.name.split('.').last) + options[:format]
1127
- else
1128
- file_name = file.name
1129
- end
1130
- filepath = "#{path}/#{file_name}"
1131
- Object::File.open(filepath, 'wb') do |file|
1132
- file.write(response)
1133
- end
1134
-
1135
- end
1136
-
1137
- #
1138
- # Returns document annotations collaborators.
1139
- #
1140
- # @param [Hash] access Access credentials
1141
- # @option access [String] :client_id
1142
- # @option access [String] :private_key
1143
- # @return [Array<GroupDocs::User>]
1144
- #
1145
- def collaborators!(access = {})
1146
- json = Api::Request.new do |request|
1147
- request[:access] = access
1148
- request[:method] = :GET
1149
- request[:path] = "/ant/{{client_id}}/files/#{file.guid}/collaborators"
1150
- end.execute!
1151
-
1152
- json[:collaborators].map do |collaborator|
1153
- User.new(collaborator)
1154
- end
1155
- end
1156
-
1157
- #
1158
- # Sets document annotations collaborators to given emails.
1159
- #
1160
- # @param [Array<String>] emails List of collaborators' email addresses
1161
- # @param [Integer] version Annotation version
1162
- # @param [Hash] access Access credentials
1163
- # @option access [String] :client_id
1164
- # @option access [String] :private_key
1165
- # @return [Array<GroupDocs::User>]
1166
- #
1167
- def set_collaborators!(emails, version = 1, access = {})
1168
- json = Api::Request.new do |request|
1169
- request[:access] = access
1170
- request[:method] = :PUT
1171
- request[:path] = "/ant/{{client_id}}/files/#{file.guid}/version/#{version}/collaborators"
1172
- request[:request_body] = emails
1173
- end.execute!
1174
-
1175
- json[:collaborators].map do |collaborator|
1176
- User.new(collaborator)
1177
- end
1178
- end
1179
-
1180
- #
1181
- # Adds document annotations collaborator.
1182
- #
1183
- # @param [GroupDocs::User] collaborator
1184
- # @param [Hash] access Access credentials
1185
- # @option access [String] :client_id
1186
- # @option access [String] :private_key
1187
- #
1188
- def add_collaborator!(collaborator, access = {})
1189
- collaborator.is_a?(GroupDocs::User) or raise ArgumentError,
1190
- "Collaborator should be GroupDocs::User object, received: #{collaborator.inspect}"
1191
-
1192
- Api::Request.new do |request|
1193
- request[:access] = access
1194
- request[:method] = :POST
1195
- request[:path] = "/ant/{{client_id}}/files/#{file.guid}/collaborators"
1196
- request[:request_body] = collaborator.to_hash
1197
- end.execute!
1198
- end
1199
-
1200
-
1201
- #
1202
- # Delete document reviewer
1203
- #
1204
- # @param [String] reviewerId Reviewer Id
1205
- # @param [Hash] access Access credentials
1206
- # @option access [String] :client_id
1207
- # @option access [String] :private_key
1208
- #
1209
- def remove_collaborators!(reviewerId, access = {})
1210
- Api::Request.new do |request|
1211
- request[:access] = access
1212
- request[:method] = :DELETE
1213
- request[:path] = "/ant/{{client_id}}/files/#{file.guid}/collaborators/#{reviewerId}"
1214
- end.execute!
1215
-
1216
- end
1217
-
1218
- #
1219
- # Sets reviewers for document.
1220
- #
1221
- # @example Change reviewer rights
1222
- # reviewers = document.collaborators!
1223
- # reviewers.each do |reviewer|
1224
- # reviewer.access_rights = %w(view)
1225
- # end
1226
- # document.set_reviewers! reviewers
1227
- #
1228
- # @param [Array<GroupDocs::User>] reviewers
1229
- # @param [Hash] access Access credentials
1230
- # @option access [String] :client_id
1231
- # @option access [String] :private_key
1232
- #
1233
- def set_reviewers!(reviewers, access = {})
1234
- Api::Request.new do |request|
1235
- request[:access] = access
1236
- request[:method] = :PUT
1237
- request[:path] = "/ant/{{client_id}}/files/#{file.guid}/reviewerRights"
1238
- request[:request_body] = reviewers.map(&:to_hash)
1239
- end.execute!
1240
- end
1241
-
1242
- #
1243
- # Returns an array of access rights for shared link.
1244
- #
1245
- # @param [Hash] access Access credentials
1246
- # @option access [String] :client_id
1247
- # @option access [String] :private_key
1248
- # @return [Array<Symbol>]
1249
- #
1250
- def shared_link_access_rights!(access = {})
1251
- json = Api::Request.new do |request|
1252
- request[:access] = access
1253
- request[:method] = :GET
1254
- request[:path] = "/ant/{{client_id}}/files/#{file.guid}/sharedLinkAccessRights"
1255
- end.execute!
1256
-
1257
- if json[:accessRights]
1258
- convert_byte_to_access_rights json[:accessRights]
1259
- else
1260
- []
1261
- end
1262
- end
1263
-
1264
- #
1265
- # Sets access rights for shared link.
1266
- #
1267
- # @param [Array<Symbol>] rights
1268
- # @param [Hash] access Access credentials
1269
- # @option access [String] :client_id
1270
- # @option access [String] :private_key
1271
- # @return [Array<Symbol>]
1272
- #
1273
- def set_shared_link_access_rights!(rights, access = {})
1274
- Api::Request.new do |request|
1275
- request[:access] = access
1276
- request[:method] = :PUT
1277
- request[:path] = "/ant/{{client_id}}/files/#{file.guid}/sharedLinkAccessRights"
1278
- request[:request_body] = convert_access_rights_to_byte(rights)
1279
-
1280
- end.execute!
1281
- end
1282
-
1283
- #
1284
- # Sets session callback URL.
1285
- #
1286
- # @param [String] url Callback URL
1287
- # @param [Hash] access Access credentials
1288
- # @option access [String] :client_id
1289
- # @option access [String] :private_key
1290
- #
1291
- def set_session_callback!(url, access = {})
1292
- Api::Request.new do |request|
1293
- request[:access] = access
1294
- request[:method] = :PUT
1295
- request[:path] = "/ant/{{client_id}}/files/#{file.guid}/sessionCallbackUrl"
1296
- request[:request_body] = url
1297
- end.execute!
1298
- end
1299
-
1300
- #
1301
- # Pass all unknown methods to file.
1302
- #
1303
-
1304
-
1305
- def method_missing(method, *args, &blk)
1306
- file.respond_to?(method) ? file.send(method, *args, &blk) : super
1307
- end
1308
-
1309
- def respond_to?(method)
1310
- super or file.respond_to?(method)
1311
- end
1312
-
1313
-
1314
- #
1315
- # added in release 1.5.8
1316
- #
1317
- # Returns document hyperlinks
1318
- #
1319
- # @param [Hash] access Access credentials
1320
- # @option access [String] :client_id
1321
- # @option access [String] :private_key
1322
- #
1323
- def hyperlinks!(access = {})
1324
- json = Api::Request.new do |request|
1325
- request[:access] = access
1326
- request[:method] = :GET
1327
- request[:path] = "/doc/{{client_id}}/files/#{file.guid}/hyperlinks"
1328
- end.execute!
1329
-
1330
- json[:links]
1331
- end
1332
-
1333
- #
1334
- # Changed in release 1.5.8
1335
- #
1336
- #
1337
- # Public Sign document
1338
- #
1339
- # @param [String] document Document GUID
1340
- # @param [Hash] settings Settings of the signing document
1341
- # @param settings [String] waterMarkText
1342
- # @param settings [String] waterMarkImage
1343
- # @param settings [String] name (required)
1344
- # @param settings [Double] top (required)
1345
- # @param settings [Double] left (required)
1346
- # @param settings [Double] width (required)
1347
- # @param settings [Double] height (required)
1348
- # @param settings [String] placeSignatureOn (required)
1349
- # @param settings [String] data
1350
- # @param [Hash] access Access credentials
1351
- # @option access [String] :client_id
1352
- # @option access [String] :private_key
1353
- # @return [Array]
1354
- #
1355
- def public_sign_document!(options = {}, access = {})
1356
- json = Api::Request.new do |request|
1357
- request[:access] = access
1358
- request[:method] = :POST
1359
- request[:path] = "/signature/public/documents/#{file.guid}/sign"
1360
- request[:request_body] = options
1361
- end.execute!
1362
-
1363
- json[:jobId]
1364
- end
1365
-
1366
- #
1367
- # Changed in release 1.5.8
1368
- #
1369
- #
1370
- # Get document fields
1371
- #
1372
- # @param [String] document Document GUID
1373
- # @param [Hash] settings Settings of the signing document
1374
- # @param [Hash] access Access credentials
1375
- # @option access [String] :client_id
1376
- # @option access [String] :private_key
1377
- # @return [Array]
1378
- #
1379
- def self.public_fields!(access = {})
1380
- Api::Request.new do |request|
1381
- request[:access] = access
1382
- request[:method] = :GET
1383
- request[:path] = "/signature/public/documents/#{file.guid}/fields"
1384
- end.execute!
1385
- end
1386
-
1387
- # changed in release 2.1.0
1388
- #
1389
- # Get template fields.
1390
- #
1391
- # @param [Hash] access Access credentials
1392
- # @option access [String] :client_id
1393
- # @option access [String] :private_key
1394
- #
1395
- def editor_fields!(access = {})
1396
- Api::Request.new do |request|
1397
- request[:access] = access
1398
- request[:method] = :GET
1399
- request[:path] = "/doc/{{client_id}}/files/#{file.guid}/editor_fields"
1400
- end.execute!
1401
- end
1402
-
1403
- # added in release 1.7.0
1404
- #
1405
- # Create questionnaire template from file.
1406
- #
1407
- # @example
1408
- #
1409
- # file = GroupDocs::Storage::File.new({:guid => '3be4e06494caed131d912c75e17d5f22592e3044032e0f81b35f13a8c9fefb49'}).to_document
1410
- # field = GroupDocs::Document::TemplateEditorFields.new
1411
- # field.name = 'test'
1412
- # field.fieldtype = 'TextBox'
1413
- # field.page = 1
1414
- # file.questionnaire_template!([field] )
1415
- #
1416
- #
1417
- # @param List[GroupDocs::Document::TemplateEditorFields] fields
1418
- # @param [Hash] access Access credentials
1419
- # @option access [String] :client_id
1420
- # @option access [String] :private_key
1421
- #
1422
- def questionnaire_template!(fields, access = {})
1423
-
1424
- fields.each do |field|
1425
- field.is_a?(GroupDocs::Document::TemplateEditorFields) or raise ArgumentError,
1426
- "Fields should be List GroupDocs::Document::TemplateEditorFields objects, received: #{fields.inspect}"
1427
- end
1428
-
1429
- json = Api::Request.new do |request|
1430
- request[:access] = access
1431
- request[:method] = :POST
1432
- request[:path] = "/merge/{{client_id}}/files/#{file.guid}/templates"
1433
- request[:request_body] = fields
1434
- end.execute!
1435
- json[:templateFields].map do |field|
1436
- Document::Field.new(field)
1437
- end
1438
- end
1439
-
1440
- # added in release 1.8.0
1441
- #
1442
- # Add template editor fields to the specific document
1443
- #
1444
- # @example
1445
- #
1446
- # file = GroupDocs::Storage::File.new({:guid => '3be4e06494caed131d912c75e17d5f22592e3044032e0f81b35f13a8c9fefb49'}).to_document
1447
- # field = GroupDocs::Document::TemplateEditorFields.new
1448
- # field.name = 'test'
1449
- # field.fieldtype = 'TextBox'
1450
- # field.page = 1
1451
- # file.add_questionnaire_template!([field] )
1452
- #
1453
- #
1454
- # @param List[GroupDocs::Document::TemplateEditorFields] fields
1455
- # @param [Hash] access Access credentials
1456
- # @option access [String] :client_id
1457
- # @option access [String] :private_key
1458
- #
1459
- def add_questionnaire_template!(fields, access = {})
1460
-
1461
- fields.each do |field|
1462
- field.is_a?(GroupDocs::Document::TemplateEditorFields) or raise ArgumentError,
1463
- "Fields should be List GroupDocs::Document::TemplateEditorFields objects, received: #{fields.inspect}"
1464
- end
1465
-
1466
- json = Api::Request.new do |request|
1467
- request[:access] = access
1468
- request[:method] = :POST
1469
- request[:path] = "/merge/{{client_id}}/files/#{file.guid}/templates/add"
1470
- request[:request_body] = fields
1471
- end.execute!
1472
- json[:templateFields].map do |field|
1473
- Document::Field.new(field)
1474
- end
1475
- end
1476
-
1477
-
1478
- # added in release 1.8.0
1479
- #
1480
- # Update template's fields
1481
- #
1482
- # @example
1483
- #
1484
- # file = GroupDocs::Storage::File.new({:guid => '3be4e06494caed131d912c75e17d5f22592e3044032e0f81b35f13a8c9fefb49'}).to_document
1485
- # field = GroupDocs::Document::TemplateEditorFields.new
1486
- # field.name = 'test'
1487
- # field.fieldtype = 'TextBox'
1488
- # field.page = 1
1489
- # file.update_questionnaire_template!([field] )
1490
- #
1491
- #
1492
- # @param List[GroupDocs::Document::TemplateEditorFields] fields
1493
- # @param [Hash] access Access credentials
1494
- # @option access [String] :client_id
1495
- # @option access [String] :private_key
1496
- #
1497
- def update_questionnaire_template!(fields, access = {})
1498
-
1499
- fields.each do |field|
1500
- field.is_a?(GroupDocs::Document::TemplateEditorFields) or raise ArgumentError,
1501
- "Fields should be List GroupDocs::Document::TemplateEditorFields objects, received: #{fields.inspect}"
1502
- end
1503
-
1504
- json = Api::Request.new do |request|
1505
- request[:access] = access
1506
- request[:method] = :PUT
1507
- request[:path] = "/merge/{{client_id}}/files/#{file.guid}/templates/update"
1508
- request[:request_body] = fields
1509
- end.execute!
1510
- json[:templateFields].map do |field|
1511
- Document::Field.new(field)
1512
- end
1513
- end
1514
-
1515
- # added in release 1.8.0
1516
- #
1517
- # Delete template's fields
1518
- #
1519
- # @example
1520
- #
1521
- # file = GroupDocs::Storage::File.new({:guid => '3be4e06494caed131d912c75e17d5f22592e3044032e0f81b35f13a8c9fefb49'}).to_document
1522
- # field = file.editor_fields!
1523
- # file.delete_questionnaire_template!([field] )
1524
- #
1525
- #
1526
- # @param List[GroupDocs::Document::TemplateEditorFields] fields
1527
- # @param [Hash] access Access credentials
1528
- # @option access [String] :client_id
1529
- # @option access [String] :private_key
1530
- #
1531
- def delete_questionnaire_template!(fields, access = {})
1532
-
1533
- fields.each do |field|
1534
- field.is_a?(GroupDocs::Document::TemplateEditorFields) or raise ArgumentError,
1535
- "Fields should be List GroupDocs::Document::TemplateEditorFields objects, received: #{fields.inspect}"
1536
- end
1537
-
1538
- json = Api::Request.new do |request|
1539
- request[:access] = access
1540
- request[:method] = :DELETE
1541
- request[:path] = "/merge/{{client_id}}/files/#{file.guid}/templates/delete"
1542
- request[:request_body] = fields
1543
- end.execute!
1544
- json[:templateFields].map do |field|
1545
- Document::Field.new(field)
1546
- end
1547
- end
1548
-
1549
- end # Document
1550
- end # GroupDocs
1
+ module GroupDocs
2
+ class Document < Api::Entity
3
+
4
+ require 'groupdocs/document/annotation'
5
+ require 'groupdocs/document/change'
6
+ require 'groupdocs/document/field'
7
+ require 'groupdocs/document/metadata'
8
+ require 'groupdocs/document/rectangle'
9
+ require 'groupdocs/document/view'
10
+ require 'groupdocs/document/editor'
11
+ require 'groupdocs/document/style'
12
+ require 'groupdocs/document/page'
13
+
14
+
15
+ ACCESS_MODES = {
16
+ :private => 0,
17
+ :restricted => 1,
18
+ :public => 2,
19
+ :inherited => 254,
20
+ :denied => 255,
21
+ }
22
+
23
+ include Api::Helpers::AccessMode
24
+ include Api::Helpers::AccessRights
25
+ include Api::Helpers::Status
26
+ extend Api::Helpers::MIME
27
+
28
+ #
29
+ # Returns an array of views for all documents.
30
+ #
31
+ # @param [Hash] options
32
+ # @option options [Integer] :page_index Page to start with
33
+ # @option options [Integer] :page_size Total number of entries
34
+ # @param [Hash] access Access credentials
35
+ # @option access [String] :client_id
36
+ # @option access [String] :private_key
37
+ # @return [Array<GroupDocs::Document::View>]
38
+ #
39
+ def self.views!(options = {}, access = {})
40
+ api = Api::Request.new do |request|
41
+ request[:access] = access
42
+ request[:method] = :GET
43
+ request[:path] = '/doc/{{client_id}}/views'
44
+ end
45
+ api.add_params(options)
46
+ json = api.execute!
47
+
48
+ json[:views].map do |view|
49
+ Document::View.new(view)
50
+ end
51
+ end
52
+
53
+ #
54
+ # Returns an array of all templates (documents in "Templates" directory).
55
+ #
56
+ # @param [Hash] options Options
57
+ # @option options [String] :orderBy Order by column
58
+ # @option options [Boolean] :isAscending Order by ascending or descending
59
+ # @param [Hash] access Access credentials
60
+ # @option access [String] :client_id
61
+ # @option access [String] :private_key
62
+ # @return [Array<GroupDocs::Document>]
63
+ #
64
+ def self.templates!(options = {}, access = {})
65
+ api = Api::Request.new do |request|
66
+ request[:access] = access
67
+ request[:method] = :GET
68
+ request[:path] = '/merge/{{client_id}}/templates'
69
+ end
70
+ api.add_params(options)
71
+ json = api.execute!
72
+ json[:templates].map do |template|
73
+ template.merge!(:file => Storage::File.new(template))
74
+ Document.new(template)
75
+ end
76
+ end
77
+
78
+ #
79
+ # Signs given documents with signatures.
80
+ #
81
+ # @example
82
+ # # prepare documents
83
+ # file_one = GroupDocs::Storage::File.new(name: 'document_one.doc', local_path: '~/Documents/document_one.doc')
84
+ # file_two = GroupDocs::Storage::File.new(name: 'document_one.pdf', local_path: '~/Documents/document_one.pdf')
85
+ # document_one = file_one.to_document
86
+ # document_two = file_two.to_document
87
+ # # prepare signatures
88
+ # signature_one = GroupDocs::Signature.new(name: 'John Smith', image_path: '~/Documents/signature_one.png')
89
+ # signature_two = GroupDocs::Signature.new(name: 'Sara Smith', image_path: '~/Documents/signature_two.png')
90
+ # signature_one.position = { top: 0.1, left: 0.07, width: 50, height: 50 }
91
+ # signature_one.email = "test1@mail.com"
92
+ # signature_two.position = { top: 0.2, left: 0.2, width: 100, height: 100 }
93
+ # signature_one.email = "test1@mail.com"
94
+ # # sign documents and download results
95
+ # signed_documents = GroupDocs::Document.sign_documents!([document_one, document_two], [signature_one, signature_two])
96
+ # signed_documents.each do |document|
97
+ # document.file.download! '~/Documents'
98
+ # end
99
+ #
100
+ # @param [Array<GroupDocs::Document>] documents Each document file should have "#name" and "#local_path"
101
+ # @param [Array<GroupDocs::Signature>] signatures Each signature should have "#name", "#image_path" and "#position"
102
+ #
103
+ def self.sign_documents!(documents, signatures, options = {}, access = {})
104
+ documents.each do |document|
105
+ document.is_a?(Document) or raise ArgumentError, "Each document should be GroupDocs::Document object, received: #{document.inspect}"
106
+ document.file.name or raise ArgumentError, "Each document file should have name, received: #{document.file.name.inspect}"
107
+ document.file.local_path or raise ArgumentError, "Each document file should have local_path, received: #{document.file.local_path.inspect}"
108
+ end
109
+ signatures.each do |signature|
110
+ signature.is_a?(Signature) or raise ArgumentError, "Each signature should be GroupDocs::Signature object, received: #{signature.inspect}"
111
+ signature.name or raise ArgumentError, "Each signature should have name, received: #{signature.name.inspect}"
112
+ signature.image_path or raise ArgumentError, "Each signature should have image_path, received: #{signature.image_path.inspect}"
113
+ signature.position or raise ArgumentError, "Each signature should have position, received: #{signature.position.inspect}"
114
+ end
115
+
116
+ documents_to_sign = []
117
+ documents.map(&:file).each do |file|
118
+ document = { :name => file.name }
119
+ contents = File.open(file.local_path, 'rb').read
120
+ contents = Base64.strict_encode64(contents)
121
+ document.merge!(:data => "data:#{mime_type(file.local_path)};base64,#{contents}")
122
+
123
+ documents_to_sign << document
124
+
125
+ end
126
+
127
+ signers = []
128
+ signatures.each do |signature|
129
+ contents = File.open(signature.image_path, 'rb').read
130
+ contents = Base64.strict_encode64(contents)
131
+ signer = { :name => signature.name, :data => "data:#{mime_type(signature.image_path)};base64,#{contents}" }
132
+ signer.merge!(signature.position)
133
+ # place signature on is not implemented yet
134
+ signer.merge!(:placeSignatureOn => nil)
135
+ signer.merge!(:email => signature.email)
136
+
137
+ signers << signer
138
+
139
+
140
+ end
141
+
142
+ json = Api::Request.new do |request|
143
+ request[:access] = access
144
+ request[:method] = :POST
145
+ request[:path] = '/signature/{{client_id}}/sign'
146
+ request[:request_body] = { :documents => documents_to_sign, :signers => signers }
147
+ end.execute!
148
+ json[:jobId]
149
+
150
+ end
151
+
152
+ #
153
+ # Get sign documents status
154
+ #
155
+ # @param [String] job_guid
156
+ # @param [Hash] access Access credentials
157
+ # @option access [String] :client_id
158
+ # @option access [String] :private_key
159
+ #
160
+ def document_status!(job_guid, access = {})
161
+ json = Api::Request.new do |request|
162
+ request[:access] = access
163
+ request[:method] = :PUT
164
+ request[:path] = "/signature/{{client_id}}/documents/#{job_guid}"
165
+ end.execute!
166
+
167
+ json[:documents]
168
+ end
169
+
170
+ #
171
+ # Cnanged in release 2.0.0
172
+ #
173
+ # Returns a document metadata by given path.
174
+ #
175
+ # @param [String] path Full path to document
176
+ # @param [Hash] access Access credentials
177
+ # @option access [String] :client_id
178
+ # @option access [String] :private_key
179
+ # @return [Array<GroupDocs::Document::View>]
180
+ #
181
+ def self.metadata!(path, access = {})
182
+ json = Api::Request.new do |request|
183
+ request[:access] = access
184
+ request[:method] = :GET
185
+ request[:path] = "/doc/{{client_id}}/files/#{path}"
186
+ end.execute!
187
+
188
+ Document::MetaData.new do |metadata|
189
+ metadata.id = json[:id]
190
+ metadata.guid = json[:guid]
191
+ metadata.page_count = json[:page_count]
192
+ metadata.views_count = json[:views_count]
193
+ metadata.type = json[:type]
194
+ metadata.url = json[:url]
195
+ if json[:last_view]
196
+ metadata.last_view = json[:last_view]
197
+ end
198
+ end
199
+ end
200
+
201
+ # @attr [GroupDocs::Storage::File] file
202
+ attr_accessor :file
203
+ # @attr [Time] process_date
204
+ attr_accessor :process_date
205
+ # @attr [Array<GroupDocs::Storage::File>] outputs
206
+ attr_accessor :outputs
207
+ # @attr [Array<Symbol>] output_formats
208
+ attr_accessor :output_formats
209
+ # @attr [Symbol] status
210
+ attr_accessor :status
211
+ # @attr [Integer] order
212
+ attr_accessor :order
213
+ # @attr [Integer] field_count
214
+ attr_accessor :field_count
215
+
216
+ #added in release 1.6.0
217
+ # @attr [String] fieldType
218
+ attr_accessor :fieldType
219
+ # @attr [Int] dependent_questionnaires_count
220
+ attr_accessor :dependent_questionnaires_count
221
+ # @attr [Long] upload_time
222
+ attr_accessor :upload_time
223
+
224
+
225
+ #added in release 2.0.0
226
+ # @attr [String] documentDescription
227
+ attr_accessor :documentDescription
228
+
229
+
230
+ [
231
+ :news ,
232
+ :alerts ,
233
+ :support ,
234
+ :is_real_time_broadcast ,
235
+ :is_scroll_broadcast ,
236
+ :is_zoom_broadcast ,
237
+ :is_annotation_navigation_widget ,
238
+ :is_annotation_zoom_widget ,
239
+ :is_annotation_download_widget ,
240
+ :is_annotation_print_widget ,
241
+ :is_annotation_help_widget ,
242
+ :is_right_panel ,
243
+ :is_thumbnails_panel ,
244
+ :is_toolbar ,
245
+ :is_text_annotation_button ,
246
+ :is_rectangle_annotation_button ,
247
+ :is_point_annotation_button ,
248
+ :is_strikeout_annotation_button ,
249
+ :is_polyline_annotation_button ,
250
+ :is_typewriter_annotation_button ,
251
+ :is_watermark_annotation_button ,
252
+ :is_viewer_navigation_widget ,
253
+ :is_viewer_zoom_widget ,
254
+ :is_viewer_download_widget ,
255
+ :is_viewer_print_widget ,
256
+ :is_viewer_help_widget ,
257
+ ].each do |option|
258
+ # @attr [Boolean] option
259
+ attr_accessor :"#{option}_enabled"
260
+ end
261
+ [
262
+ :standard_header_always ,
263
+ :annotation_document_name ,
264
+ :viewer_document_name ,
265
+ ].each do |option|
266
+ # @attr [Boolean] option
267
+ attr_accessor :"is_#{option}_shown"
268
+ end
269
+
270
+
271
+ #
272
+ # Coverts passed array of attributes hash to array of GroupDocs::Storage::File.
273
+ #
274
+ # @param [Array<Hash>] outputs Array of file attributes hashes
275
+ #
276
+ def outputs=(outputs)
277
+ if outputs
278
+ @outputs = outputs.map do |output|
279
+ GroupDocs::Storage::File.new(output)
280
+ end
281
+ end
282
+ end
283
+
284
+ #
285
+ # Returns output formats in human-readable format.
286
+ #
287
+ # @return [Array<Symbol>]
288
+ #
289
+ def output_formats
290
+ @output_formats.split(',').map(&:to_sym)
291
+ end
292
+
293
+ #
294
+ # Converts status to human-readable format.
295
+ #
296
+ # @return [Symbol]
297
+ #
298
+ def status
299
+ parse_status(@status)
300
+ end
301
+
302
+ #
303
+ # Converts timestamp which is return by API server to Time object.
304
+ #
305
+ # @return [Time]
306
+ #
307
+ def process_date
308
+ Time.at(@process_date / 1000)
309
+ end
310
+
311
+ # Compatibility with response JSON
312
+ alias_method :proc_date=, :process_date=
313
+
314
+ #
315
+ # Creates new GroupDocs::Document.
316
+ #
317
+ # You should avoid creating documents directly. Instead, use #to_document
318
+ # instance method of GroupDocs::Storage::File.
319
+ #
320
+ # @raise [ArgumentError] If file is not passed or is not an instance of GroupDocs::Storage::File
321
+ #
322
+ def initialize(options = {}, &blk)
323
+ super(options, &blk)
324
+ file.is_a?(GroupDocs::Storage::File) or raise ArgumentError,
325
+ "You have to pass GroupDocs::Storage::File object: #{file.inspect}."
326
+ end
327
+
328
+ #
329
+ # Returns a stream of bytes representing a particular document page image.
330
+ #
331
+ # @param [String] path Document path
332
+ # @param [String] name Name document (format - jpg)
333
+ # @example path = "#{File.dirname(__FILE__)}"
334
+ # name = "test.jpg"
335
+ # @param [Integer] page_number Document page number to get image for
336
+ # @param [Integer] dimension Image dimension "<width>x<height>"(500x600)
337
+ # @param [Hash] options
338
+ # @option options [Integer] :quality Image quality in range 1-100.
339
+ # @option options [Boolean] :use_pdf A flag indicating whether a document should be converted to PDF format before generating the image.
340
+ # @option options [Boolean] :expires The date and time in milliseconds since epoch the URL expires.
341
+ # @param [Hash] access Access credentials
342
+ # @option access [String] :client_id
343
+ # @option access [String] :private_key
344
+ # @return []
345
+ #
346
+ def page_image!(path, name, page_number, dimension, options = {}, access = {})
347
+ api = Api::Request.new do |request|
348
+ request[:access] = access
349
+ request[:method] = :DOWNLOAD
350
+ request[:path] = "/doc/{{client_id}}/files/#{file.guid}/pages/#{page_number}/images/#{dimension}"
351
+ end
352
+ api.add_params(options)
353
+ response = api.execute!
354
+
355
+ filepath = "#{path}/#{name}"
356
+ Object::File.open(filepath, 'wb') do |file|
357
+ file.write(response)
358
+ end
359
+
360
+ filepath
361
+
362
+ end
363
+
364
+
365
+
366
+
367
+
368
+
369
+ #
370
+ # Returns array of URLs to images representing document pages.
371
+ #
372
+ # @example
373
+ # file = GroupDocs::Storage::Folder.list!.last
374
+ # document = file.to_document
375
+ # document.page_images! 1024, 768, first_page: 0, page_count: 1
376
+ #
377
+ # @param [Integer] width Image width
378
+ # @param [Integer] height Image height
379
+ # @param [Hash] options
380
+ # @option options [Integer] :first_page Start page to return image for (starting with 0)
381
+ # @option options [Integer] :page_count Number of pages to return image for
382
+ # @option options [Integer] :quality
383
+ # @option options [Boolean] :use_pdf
384
+ # @option options [Boolean] :token
385
+ # @param [Hash] access Access credentials
386
+ # @option access [String] :client_id
387
+ # @option access [String] :private_key
388
+ # @return [Array<String>]
389
+ #
390
+ def page_images!(width, height, options = {}, access = {})
391
+ api = Api::Request.new do |request|
392
+ request[:access] = access
393
+ request[:method] = :GET
394
+ request[:path] = "/doc/{{client_id}}/files/#{file.guid}/pages/images/#{width}x#{height}/urls"
395
+ end
396
+ api.add_params(options)
397
+ json = api.execute!
398
+
399
+ json[:url]
400
+ end
401
+
402
+
403
+ #
404
+ # Returns editing metadata.
405
+ #
406
+ # @param [Hash] access Access credentials
407
+ # @option access [String] :client_id
408
+ # @option access [String] :private_key
409
+ #
410
+ def editlock!(access = {})
411
+ Api::Request.new do |request|
412
+ request[:access] = access
413
+ request[:method] = :GET
414
+ request[:path] = "/doc/{{client_id}}/files/#{file.guid}/editlock"
415
+ end.execute!
416
+ end
417
+
418
+ #
419
+ # Removes edit lock for a document and replaces the document with its edited copy
420
+ #
421
+ # @param [Hash] options
422
+ # @option options [String] :lockId Start page to return image for (starting with 0)
423
+ # @param [Hash] access Access credentials
424
+ # @option access [String] :client_id
425
+ # @option access [String] :private_key
426
+ # @return [Integer]
427
+ #
428
+ def editlock_clear!(options = {}, access = {})
429
+ api = Api::Request.new do |request|
430
+ request[:access] = access
431
+ request[:method] = :DELETE
432
+ request[:path] = "/doc/{{client_id}}/files/#{file.guid}/editlock"
433
+ end
434
+ api.add_params(options).execute!
435
+ end
436
+
437
+ #
438
+ # Returns tags assigned to the document
439
+ #
440
+ # @param [Hash] access Access credentials
441
+ # @option access [String] :client_id
442
+ # @option access [String] :private_key
443
+ # @return [Array<String>]
444
+ #
445
+ def tags!(access = {})
446
+ Api::Request.new do |request|
447
+ request[:access] = access
448
+ request[:method] = :GET
449
+ request[:path] = "/doc/{{client_id}}/files/#{file.guid}/tags"
450
+ end.execute!
451
+ end
452
+
453
+ #
454
+ # Assign tags to the document.
455
+ #
456
+ # @param [Hash] access Access credentials
457
+ # @option access [String] :client_id
458
+ # @option access [String] :private_key
459
+ # @return [String]
460
+ #
461
+ def tags_set!(access = {})
462
+ Api::Request.new do |request|
463
+ request[:access] = access
464
+ request[:method] = :PUT
465
+ request[:path] = "/doc/{{client_id}}/files/#{file.guid}/tags"
466
+ end.execute!
467
+ end
468
+
469
+ #
470
+ # Removes tags assigned to the document
471
+ #
472
+ # @param [Hash] access Access credentials
473
+ # @option access [String] :client_id
474
+ # @option access [String] :private_key
475
+ # @return [String]
476
+ #
477
+ def tags_clear!(access = {})
478
+ Api::Request.new do |request|
479
+ request[:access] = access
480
+ request[:method] = :DELETE
481
+ request[:path] = "/doc/{{client_id}}/files/#{file.guid}/tags"
482
+ end.execute!
483
+ end
484
+
485
+ #
486
+ # Returns document content
487
+ #
488
+ # @param [String] content_type Content type
489
+ # @param [Hash] access Access credentials
490
+ # @option access [String] :client_id
491
+ # @option access [String] :private_key
492
+ # @return [String]
493
+ #
494
+ def content!(content_type, access = {})
495
+ json = Api::Request.new do |request|
496
+ request[:access] = access
497
+ request[:method] = :GET
498
+ request[:path] = "/doc/{{client_id}}/files/#{file.guid}/content/#{content_type}"
499
+ end.execute!
500
+
501
+ json[:content]
502
+ end
503
+
504
+ #
505
+ # Returns array of URLs to images representing document pages thumbnails.
506
+ #
507
+ # @example
508
+ # file = GroupDocs::Storage::Folder.list!.last
509
+ # document = file.to_document
510
+ # document.thumbnails! first_page: 0, page_count: 1, width: 1024
511
+ #
512
+ # @param [Hash] options
513
+ # @option options [Integer] :page_number Start page to return image for (starting with 0)
514
+ # @option options [Integer] :page_count Number of pages to return image for
515
+ # @option options [Integer] :width
516
+ # @option options [Integer] :quality
517
+ # @option options [Boolean] :use_pdf
518
+ # @param [Hash] access Access credentials
519
+ # @option access [String] :client_id
520
+ # @option access [String] :private_key
521
+ # @return [Array<String>]
522
+ #
523
+ def thumbnails!(options = {}, access = {})
524
+ api = Api::Request.new do |request|
525
+ request[:access] = access
526
+ request[:method] = :POST
527
+ request[:path] = "/doc/{{client_id}}/files/#{file.guid}/thumbnails"
528
+ end
529
+ api.add_params(options)
530
+ json = api.execute!
531
+
532
+ json[:image_urls]
533
+ end
534
+
535
+
536
+
537
+ #
538
+ # Returns access mode of document.
539
+ #
540
+ # @param [Hash] access Access credentials
541
+ # @option access [String] :client_id
542
+ # @option access [String] :private_key
543
+ # @return [Symbol] One of :private, :restricted or :public access modes
544
+ #
545
+ def access_mode!(access = {})
546
+ json = Api::Request.new do |request|
547
+ request[:access] = access
548
+ request[:method] = :GET
549
+ request[:path] = "/doc/{{client_id}}/files/#{file.guid}/accessinfo"
550
+ end.execute!
551
+
552
+ parse_access_mode(json[:access])
553
+ end
554
+
555
+ #
556
+ # Sets access mode of document.
557
+ #
558
+ # @param [Symbol] mode One of :private, :restricted or :public access modes
559
+ # @param [Hash] access Access credentials
560
+ # @option access [String] :client_id
561
+ # @option access [String] :private_key
562
+ # @return [Symbol] Set access mode
563
+ #
564
+ def access_mode_set!(mode, access = {})
565
+ api = Api::Request.new do |request|
566
+ request[:access] = access
567
+ request[:method] = :PUT
568
+ request[:path] = "/doc/{{client_id}}/files/#{file.id}/accessinfo"
569
+ end
570
+ api.add_params(:mode => ACCESS_MODES[mode])
571
+ json = api.execute!
572
+
573
+ parse_access_mode(json[:access])
574
+ end
575
+ # note that aliased version cannot accept access credentials hash
576
+ alias_method :access_mode=, :access_mode_set!
577
+
578
+ #
579
+ # Returns array of file formats document can be converted to.
580
+ #
581
+ # @param [Hash] access Access credentials
582
+ # @option access [String] :client_id
583
+ # @option access [String] :private_key
584
+ # @return [Array<Symbol>]
585
+ #
586
+ def formats!(access = {})
587
+ json = Api::Request.new do |request|
588
+ request[:access] = access
589
+ request[:method] = :GET
590
+ request[:path] = "/doc/{{client_id}}/files/#{file.id}/formats"
591
+ end.execute!
592
+
593
+ json[:types].map do |format|
594
+ format.downcase.to_sym
595
+ end
596
+ end
597
+
598
+ #
599
+ # Cnanged in release 2.0.0
600
+ #
601
+ # Returns document metadata.
602
+ #
603
+ # @param [Hash] access Access credentials
604
+ # @option access [String] :client_id
605
+ # @option access [String] :private_key
606
+ # @return [GroupDocs::Document::MetaData]
607
+ #
608
+ def metadata!(access = {})
609
+ json = Api::Request.new do |request|
610
+ request[:access] = access
611
+ request[:method] = :GET
612
+ request[:path] = "/doc/{{client_id}}/files/#{file.guid}/metadata"
613
+ end.execute!
614
+
615
+ Document::MetaData.new do |metadata|
616
+ metadata.id = json[:id]
617
+ metadata.guid = json[:guid]
618
+ metadata.page_count = json[:page_count]
619
+ metadata.views_count = json[:views_count]
620
+ metadata.type = json[:type]
621
+ metadata.url = json[:url]
622
+ if json[:last_view]
623
+ metadata.last_view = json[:last_view]
624
+ end
625
+ end
626
+ end
627
+
628
+ #
629
+ # Returns an array of document fields.
630
+ #
631
+ # @param [Hash] access Access credentials
632
+ # @option access [String] :client_id
633
+ # @option access [String] :private_key
634
+ # @return [Array<GroupDocs::Document::Field>]
635
+ #
636
+ def fields!(access = {})
637
+ api = Api::Request.new do |request|
638
+ request[:access] = access
639
+ request[:method] = :GET
640
+ request[:path] = "/doc/{{client_id}}/files/#{file.guid}/fields"
641
+ end
642
+ api.add_params(:include_geometry => true)
643
+ json = api.execute!
644
+
645
+ json[:fields].map do |field|
646
+ Document::Field.new(field)
647
+ end
648
+ end
649
+
650
+ #
651
+ # Returns an array of users a document is shared with.
652
+ #
653
+ # @param [Hash] access Access credentials
654
+ # @option access [String] :client_id
655
+ # @option access [String] :private_key
656
+ # @return [Array<GroupDocs::User>]
657
+ #
658
+ def sharers!(access = {})
659
+ json = Api::Request.new do |request|
660
+ request[:access] = access
661
+ request[:method] = :GET
662
+ request[:path] = "/doc/{{client_id}}/files/#{file.id}/accessinfo"
663
+ end.execute!
664
+
665
+ json[:sharers].map do |user|
666
+ User.new(user)
667
+ end
668
+ end
669
+
670
+ #
671
+ # Returns an array of users a document is shared with.
672
+ # @param [String] sharers_types
673
+ # @param [Hash] options
674
+ # @option options [String] :page_index
675
+ # @option options [String] :page_size
676
+ # @option options [String] :order_by
677
+ # @option options [Boolean] :order_ask
678
+ # @param [Hash] access Access credentials
679
+ # @option access [String] :client_id
680
+ # @option access [String] :private_key
681
+ # @return [Array<GroupDocs::User>]
682
+ #
683
+ def shared_documents!(sharers_types, options = {}, access = {})
684
+ api = Api::Request.new do |request|
685
+ request[:access] = access
686
+ request[:method] = :GET
687
+ request[:path] = "/doc/{{client_id}}/shares/#{sharers_types}"
688
+ end
689
+ api.add_params(options).execute!
690
+
691
+ end
692
+
693
+ #
694
+ # Sets document sharers to given emails.
695
+ #
696
+ # If empty array or nil passed, clears sharers.
697
+ #
698
+ # @param [Array] emails List of email addresses to share with
699
+ # @param [Hash] access Access credentials
700
+ # @option access [String] :client_id
701
+ # @option access [String] :private_key
702
+ # @return [Array<GroupDocs::User>]
703
+ #
704
+ def sharers_set!(emails, access = {})
705
+ if emails.nil? || emails.empty?
706
+ sharers_clear!(access)
707
+ else
708
+ json = Api::Request.new do |request|
709
+ request[:access] = access
710
+ request[:method] = :PUT
711
+ request[:path] = "/doc/{{client_id}}/files/#{file.id}/sharers"
712
+ request[:request_body] = emails
713
+ end.execute!
714
+
715
+ json[:shared_users].map do |user|
716
+ User.new(user)
717
+ end
718
+ end
719
+ end
720
+
721
+ #
722
+ # Sets document password.
723
+ #
724
+ # @param [String] password New password for document
725
+ # @param [Hash] access Access credentials
726
+ # @option access [String] :client_id
727
+ # @option access [String] :private_key
728
+ # @return [Array<GroupDocs::User>]
729
+ #
730
+ def password_set!(password, access = {})
731
+ Api::Request.new do |request|
732
+ request[:access] = access
733
+ request[:method] = :PUT
734
+ request[:path] = "/doc/{{client_id}}/files/#{file.guid}/password"
735
+ request[:request_body] = password
736
+ end.execute!
737
+
738
+ end
739
+
740
+ #
741
+ # Sets document user status.
742
+ #
743
+ # @param [String] status (Pending = 0, Accepted = 1, Declined = 2)
744
+ # @param [Hash] access Access credentials
745
+ # @option access [String] :client_id
746
+ # @option access [String] :private_key
747
+ # @return [String]
748
+ #
749
+ def user_status_set!(status, access = {})
750
+ Api::Request.new do |request|
751
+ request[:access] = access
752
+ request[:method] = :PUT
753
+ request[:path] = "/doc/{{client_id}}/files/#{file.guid}/sharer"
754
+ request[:request_body] = status
755
+ end.execute!
756
+
757
+ end
758
+
759
+ #
760
+ # Clears sharers list.
761
+ #
762
+ # @param [Hash] access Access credentials
763
+ # @option access [String] :client_id
764
+ # @option access [String] :private_key
765
+ # @return nil
766
+ #
767
+ def sharers_clear!(access = {})
768
+ Api::Request.new do |request|
769
+ request[:access] = access
770
+ request[:method] = :DELETE
771
+ request[:path] = "/doc/{{client_id}}/files/#{file.id}/sharers"
772
+ end.execute![:shared_users]
773
+
774
+ end
775
+
776
+ #
777
+ # Converts document to given format.
778
+ #
779
+ # @example
780
+ # document = GroupDocs::Storage::Folder.list!.first.to_document
781
+ # job = document.convert!(:docx)
782
+ # sleep(5) # wait for server to finish converting
783
+ # original_document = job.documents![:inputs].first
784
+ # converted_file = original_file.outputs.first
785
+ # converted_file.download!(File.dirname(__FILE__))
786
+ #
787
+ # @param [Symbol] format
788
+ # @param [Hash] options
789
+ # @option options [Boolean] :email_results
790
+ # @option options [String] :new_description
791
+ # @option options [String] :print_script
792
+ # @option options [String] :callback
793
+ # @param [Hash] access Access credentials
794
+ # @option access [String] :client_id
795
+ # @option access [String] :private_key
796
+ # @return [GroupDocs::Job] Created job
797
+ #
798
+ def convert!(format, options = {}, access = {})
799
+ options.merge!(:new_type => format)
800
+
801
+ api = Api::Request.new do |request|
802
+ request[:access] = access
803
+ request[:method] = :POST
804
+ request[:path] = "/async/{{client_id}}/files/#{file.guid}"
805
+ end
806
+ api.add_params(options)
807
+ json = api.execute!
808
+
809
+ Job.new(:id => json[:job_id])
810
+ end
811
+
812
+ #
813
+ # Creates new job to merge datasource into document.
814
+ #
815
+ # @param [GroupDocs::DataSource] datasource
816
+ # @param [Hash] options
817
+ # @option options [Boolean] :new_type New file format type
818
+ # @option options [Boolean] :email_results Set to true if converted document should be emailed
819
+ # @param [Hash] access Access credentials
820
+ # @option access [String] :client_id
821
+ # @option access [String] :private_key
822
+ # @return [GroupDocs::Job]
823
+ #
824
+ # @raise [ArgumentError] if datasource is not GroupDocs::DataSource object
825
+ #
826
+ def datasource!(datasource, options = {}, access = {})
827
+ datasource.is_a?(GroupDocs::DataSource) or raise ArgumentError,
828
+ "Datasource should be GroupDocs::DataSource object, received: #{datasource.inspect}"
829
+
830
+ api = Api::Request.new do |request|
831
+ request[:access] = access
832
+ request[:method] = :POST
833
+ request[:path] = "/merge/{{client_id}}/files/#{file.guid}/datasources/#{datasource.id}"
834
+ end
835
+ api.add_params(options)
836
+ json = api.execute!
837
+
838
+ Job.new(:id => json[:job_id])
839
+ end
840
+
841
+ #
842
+ # Creates new job to merge datasource fields into document.
843
+ #
844
+ # @param [GroupDocs::DataSource] datasource
845
+ # @param [Hash] options
846
+ # @option options [Boolean] :new_type New file format type
847
+ # @option options [Boolean] :email_results Set to true if converted document should be emailed
848
+ # @option options [Boolean] :assembly_name
849
+ # @param [Array] datasourceFields (:name [String], :value [String], :contentType [String], :type [String], :nested_fields [<Array> datasourceFields])
850
+ # @param [Hash] access Access credentials
851
+ # @option access [String] :client_id
852
+ # @option access [String] :private_key
853
+ # @return [GroupDocs::Job]
854
+ #
855
+ # @raise [ArgumentError] if datasource is not GroupDocs::DataSource object
856
+ #
857
+ def datasource_fields!(datasource, options = {}, access = {})
858
+ datasource.is_a?(GroupDocs::DataSource) or raise ArgumentError,
859
+ "Datasource should be GroupDocs::DataSource object, received: #{datasource.inspect}"
860
+
861
+ api = Api::Request.new do |request|
862
+ request[:access] = access
863
+ request[:method] = :POST
864
+ request[:path] = "/merge/{{client_id}}/files/#{file.guid}/datasources"
865
+ request[:request_body] = datasource.fields
866
+ end
867
+ api.add_params(options)
868
+ json = api.execute!
869
+
870
+ Job.new(:id => json[:job_id])
871
+ end
872
+
873
+
874
+ #
875
+ # Returns an array of questionnaires.
876
+ #
877
+ # @param [Hash] access Access credentials
878
+ # @option access [String] :client_id
879
+ # @option access [String] :private_key
880
+ # @return [Array<GroupDocs::Questionnaire>]
881
+ #
882
+ def questionnaires!(access = {})
883
+ json = Api::Request.new do |request|
884
+ request[:access] = access
885
+ request[:method] = :GET
886
+ request[:path] = "/merge/{{client_id}}/files/#{file.guid}/questionnaires"
887
+ end.execute!
888
+
889
+ json[:questionnaires].map do |questionnaire|
890
+ Questionnaire.new(questionnaire)
891
+ end
892
+ end
893
+
894
+ #
895
+ # Adds questionnaire to document.
896
+ #
897
+ # @param [GroupDocs::Questionnaire] questionnaire
898
+ # @param [Hash] access Access credentials
899
+ # @option access [String] :client_id
900
+ # @option access [String] :private_key
901
+ #
902
+ # @raise [ArgumentError] if questionnaire is not GroupDocs::Questionnaire object
903
+ #
904
+ def add_questionnaire!(questionnaire, access = {})
905
+ questionnaire.is_a?(GroupDocs::Questionnaire) or raise ArgumentError,
906
+ "Questionnaire should be GroupDocs::Questionnaire object, received: #{questionnaire.inspect}"
907
+
908
+ Api::Request.new do |request|
909
+ request[:access] = access
910
+ request[:method] = :PUT
911
+ request[:path] = "/merge/{{client_id}}/files/#{file.guid}/questionnaires/#{questionnaire.id}"
912
+ end.execute!
913
+ end
914
+
915
+ #
916
+ # Creates questionnaire and adds it to document.
917
+ #
918
+ # @param [GroupDocs::Questionnaire] questionnaire
919
+ # @param [Hash] access Access credentials
920
+ # @option access [String] :client_id
921
+ # @option access [String] :private_key
922
+ # @return [GroupDocs::Questionnaire]
923
+ #
924
+ # @raise [ArgumentError] if questionnaire is not GroupDocs::Questionnaire object
925
+ #
926
+ def create_questionnaire!(questionnaire, access = {})
927
+ questionnaire.is_a?(GroupDocs::Questionnaire) or raise ArgumentError,
928
+ "Questionnaire should be GroupDocs::Questionnaire object, received: #{questionnaire.inspect}"
929
+
930
+ json = Api::Request.new do |request|
931
+ request[:access] = access
932
+ request[:method] = :POST
933
+ request[:path] = "/merge/{{client_id}}/files/#{file.guid}/questionnaires"
934
+ request[:request_body] = questionnaire.to_hash
935
+ end.execute!
936
+
937
+ questionnaire.id = json[:questionnaire_id]
938
+ questionnaire
939
+ end
940
+
941
+ #
942
+ # Detaches questionnaire from document.
943
+ #
944
+ # @param [GroupDocs::Questionnaire] questionnaire
945
+ # @param [Hash] access Access credentials
946
+ # @option access [String] :client_id
947
+ # @option access [String] :private_key
948
+ #
949
+ # @raise [ArgumentError] if questionnaire is not GroupDocs::Questionnaire object
950
+ #
951
+ def remove_questionnaire!(questionnaire, access = {})
952
+ questionnaire.is_a?(GroupDocs::Questionnaire) or raise ArgumentError,
953
+ "Questionnaire should be GroupDocs::Questionnaire object, received: #{questionnaire.inspect}"
954
+
955
+ Api::Request.new do |request|
956
+ request[:access] = access
957
+ request[:method] = :DELETE
958
+ request[:path] = "/merge/{{client_id}}/files/#{file.guid}/questionnaires/#{questionnaire.id}"
959
+ end.execute!
960
+ end
961
+
962
+ #
963
+ # Returns an array of annotations.
964
+ #
965
+ # @param [Hash] access Access credentials
966
+ # @option access [String] :client_id
967
+ # @option access [String] :private_key
968
+ # @return [Array<GroupDocs::Document::Annotation>]
969
+ #
970
+ def annotations!(access = {})
971
+ json = Api::Request.new do |request|
972
+ request[:access] = access
973
+ request[:method] = :GET
974
+ request[:path] = "/ant/{{client_id}}/files/#{file.guid}/annotations"
975
+ end.execute!
976
+
977
+ if json[:annotations]
978
+ json[:annotations].map do |annotation|
979
+ annotation.merge!(:document => self)
980
+ Document::Annotation.new(annotation)
981
+ end
982
+ else
983
+ []
984
+ end
985
+ end
986
+
987
+ #
988
+ # Changed in release 1.5.8
989
+ # Returns document details.
990
+ #
991
+ # @param [Hash] access Access credentials
992
+ # @option access [String] :client_id
993
+ # @option access [String] :private_key
994
+ # @return [Hash]
995
+ #
996
+ def details!(access = {})
997
+ api = Api::Request.new do |request|
998
+ request[:access] = access
999
+ request[:method] = :GET
1000
+ request[:path] = "/comparison/{{client_id}}document"
1001
+ end
1002
+ api.add_params(:guid => file.guid)
1003
+ api.execute!
1004
+ end
1005
+
1006
+ #
1007
+ # Changed in release 1.5.8
1008
+ # Schedules a job for comparing document with given.
1009
+ #
1010
+ # @param [GroupDocs::Document] document
1011
+ # @param [Hash] access Access credentials
1012
+ # @option access [String] :client_id
1013
+ # @option access [String] :private_key
1014
+ # @return [GroupDocs::Job]
1015
+ #
1016
+ # @raise [ArgumentError] if document is not GroupDocs::Document object
1017
+ #
1018
+ def compare!(document, callback, access = {})
1019
+ document.is_a?(GroupDocs::Document) or raise ArgumentError,
1020
+ "Document should be GroupDocs::Document object, received: #{document.inspect}"
1021
+
1022
+ api = Api::Request.new do |request|
1023
+ request[:access] = access
1024
+ request[:method] = :GET
1025
+ request[:path] = "/comparison/{{client_id}}/compare"
1026
+ end
1027
+ api.add_params(:source => file.guid, :target => document.file.guid, :callback => callback)
1028
+ json = api.execute!
1029
+
1030
+ Job.new(:id => json[:job_id])
1031
+ end
1032
+
1033
+ #
1034
+ # Updated in release 2.1.0
1035
+ #
1036
+ # Schedules a job for comparing document with given.
1037
+ #
1038
+ # @param [Array[GroupDocs::Document::Change]] changes Comparison changes to update (accept or reject)
1039
+ # @option id [Float] :id
1040
+ # @option type [String] :type
1041
+ # @option action [String] :action
1042
+ # @option Page [Array] :page
1043
+ # @option box [Array] :box
1044
+ # @option text [String] :text
1045
+ # @param [Hash] access Access credentials
1046
+ # @option access [String] :client_id
1047
+ # @option access [String] :private_key
1048
+ # @return [GroupDocs::Change]
1049
+ #
1050
+ def update_changes!(changes, access = {})
1051
+ if changes.is_a?(Array)
1052
+ changes.each do |e|
1053
+ e.is_a?(GroupDocs::Document::Change) or raise ArgumentError,
1054
+ "Change should be GroupDocs::Document::Change object, received: #{e.inspect}"
1055
+ end
1056
+ else
1057
+ raise ArgumentError, "Changes should be Array , received: #{changes.inspect}"
1058
+ end
1059
+ api = Api::Request.new do |request|
1060
+ request[:access] = access
1061
+ request[:method] = :PUT
1062
+ request[:path] = "/comparison/public/#{file.guid}/changes"
1063
+ request[:request_body] = changes
1064
+ end
1065
+ api.execute!
1066
+ end
1067
+
1068
+ #
1069
+ # @Changed in release 1.5.9
1070
+ # Returns an array of changes in document.
1071
+ #
1072
+ # @example
1073
+ # document_one = GroupDocs::Storage::Folder.list![0].to_document
1074
+ # document_two = GroupDocs::Storage::Folder.list![1].to_document
1075
+ # job = document_one.compare!(document_two)
1076
+ # sleep(5) # wait for server to finish comparing
1077
+ # result = job.documents![:outputs].first
1078
+ # result.changes!
1079
+ #
1080
+ # @param [Hash] access Access credentials
1081
+ # @option access [String] :client_id
1082
+ # @option access [String] :private_key
1083
+ #
1084
+ def changes!(access = {})
1085
+ api = Api::Request.new do |request|
1086
+ request[:access] = access
1087
+ request[:method] = :GET
1088
+ request[:path] = "/comparison/public/#{file.guid}/changes"
1089
+ end
1090
+ json = api.execute!
1091
+
1092
+ json[:changes].map do |change|
1093
+ Document::Change.new(change)
1094
+ end
1095
+ end
1096
+
1097
+ #
1098
+ # Changed in release 1.5.8
1099
+ # Download comparison result file.
1100
+ #
1101
+ # @example
1102
+ # document_one = GroupDocs::Storage::Folder.list![0].to_document
1103
+ # document_two = GroupDocs::Storage::Folder.list![1].to_document
1104
+ # job = document_one.compare!(document_two)
1105
+ # sleep(5) # wait for server to finish comparing
1106
+ # result = job.documents![:outputs].first
1107
+ # result.download!("#{File.dirname(__FILE__)}", {:format => 'pdf'})
1108
+ #
1109
+ # @param [Hash] options
1110
+ # @option format [String] :format Comparison result file GUID #
1111
+ # @param [Hash] access Access credentials
1112
+ # @option access [String] :client_id
1113
+ # @option access [String] :private_key
1114
+ #
1115
+ #
1116
+ def download!( path, options = {}, access = {})
1117
+ api = Api::Request.new do |request|
1118
+ request[:access] = access
1119
+ request[:method] = :DOWNLOAD
1120
+ request[:path] = "/comparison/public/#{file.guid}/download"
1121
+ end
1122
+ api.add_params(options)
1123
+ response = api.execute!
1124
+
1125
+ if file.name.split('.').last != options[:format]
1126
+ file_name = file.name.delete!(file.name.split('.').last) + options[:format]
1127
+ else
1128
+ file_name = file.name
1129
+ end
1130
+ filepath = "#{path}/#{file_name}"
1131
+ Object::File.open(filepath, 'wb') do |file|
1132
+ file.write(response)
1133
+ end
1134
+
1135
+ end
1136
+
1137
+ #
1138
+ # Returns document annotations collaborators.
1139
+ #
1140
+ # @param [Hash] access Access credentials
1141
+ # @option access [String] :client_id
1142
+ # @option access [String] :private_key
1143
+ # @return [Array<GroupDocs::User>]
1144
+ #
1145
+ def collaborators!(access = {})
1146
+ json = Api::Request.new do |request|
1147
+ request[:access] = access
1148
+ request[:method] = :GET
1149
+ request[:path] = "/ant/{{client_id}}/files/#{file.guid}/collaborators"
1150
+ end.execute!
1151
+
1152
+ json[:collaborators].map do |collaborator|
1153
+ User.new(collaborator)
1154
+ end
1155
+ end
1156
+
1157
+ #
1158
+ # Sets document annotations collaborators to given emails.
1159
+ #
1160
+ # @param [Array<String>] emails List of collaborators' email addresses
1161
+ # @param [Integer] version Annotation version
1162
+ # @param [Hash] access Access credentials
1163
+ # @option access [String] :client_id
1164
+ # @option access [String] :private_key
1165
+ # @return [Array<GroupDocs::User>]
1166
+ #
1167
+ def set_collaborators!(emails, version = 1, access = {})
1168
+ json = Api::Request.new do |request|
1169
+ request[:access] = access
1170
+ request[:method] = :PUT
1171
+ request[:path] = "/ant/{{client_id}}/files/#{file.guid}/version/#{version}/collaborators"
1172
+ request[:request_body] = emails
1173
+ end.execute!
1174
+
1175
+ json[:collaborators].map do |collaborator|
1176
+ User.new(collaborator)
1177
+ end
1178
+ end
1179
+
1180
+ #
1181
+ # Adds document annotations collaborator.
1182
+ #
1183
+ # @param [GroupDocs::User] collaborator
1184
+ # @param [Hash] access Access credentials
1185
+ # @option access [String] :client_id
1186
+ # @option access [String] :private_key
1187
+ #
1188
+ def add_collaborator!(collaborator, access = {})
1189
+ collaborator.is_a?(GroupDocs::User) or raise ArgumentError,
1190
+ "Collaborator should be GroupDocs::User object, received: #{collaborator.inspect}"
1191
+
1192
+ Api::Request.new do |request|
1193
+ request[:access] = access
1194
+ request[:method] = :POST
1195
+ request[:path] = "/ant/{{client_id}}/files/#{file.guid}/collaborators"
1196
+ request[:request_body] = collaborator.to_hash
1197
+ end.execute!
1198
+ end
1199
+
1200
+
1201
+ #
1202
+ # Delete document reviewer
1203
+ #
1204
+ # @param [String] reviewerId Reviewer Id
1205
+ # @param [Hash] access Access credentials
1206
+ # @option access [String] :client_id
1207
+ # @option access [String] :private_key
1208
+ #
1209
+ def remove_collaborators!(reviewerId, access = {})
1210
+ Api::Request.new do |request|
1211
+ request[:access] = access
1212
+ request[:method] = :DELETE
1213
+ request[:path] = "/ant/{{client_id}}/files/#{file.guid}/collaborators/#{reviewerId}"
1214
+ end.execute!
1215
+
1216
+ end
1217
+
1218
+ #
1219
+ # Sets reviewers for document.
1220
+ #
1221
+ # @example Change reviewer rights
1222
+ # reviewers = document.collaborators!
1223
+ # reviewers.each do |reviewer|
1224
+ # reviewer.access_rights = %w(view)
1225
+ # end
1226
+ # document.set_reviewers! reviewers
1227
+ #
1228
+ # @param [Array<GroupDocs::User>] reviewers
1229
+ # @param [Hash] access Access credentials
1230
+ # @option access [String] :client_id
1231
+ # @option access [String] :private_key
1232
+ #
1233
+ def set_reviewers!(reviewers, access = {})
1234
+ Api::Request.new do |request|
1235
+ request[:access] = access
1236
+ request[:method] = :PUT
1237
+ request[:path] = "/ant/{{client_id}}/files/#{file.guid}/reviewerRights"
1238
+ request[:request_body] = reviewers.map(&:to_hash)
1239
+ end.execute!
1240
+ end
1241
+
1242
+ #
1243
+ # Returns an array of access rights for shared link.
1244
+ #
1245
+ # @param [Hash] access Access credentials
1246
+ # @option access [String] :client_id
1247
+ # @option access [String] :private_key
1248
+ # @return [Array<Symbol>]
1249
+ #
1250
+ def shared_link_access_rights!(access = {})
1251
+ json = Api::Request.new do |request|
1252
+ request[:access] = access
1253
+ request[:method] = :GET
1254
+ request[:path] = "/ant/{{client_id}}/files/#{file.guid}/sharedLinkAccessRights"
1255
+ end.execute!
1256
+
1257
+ if json[:accessRights]
1258
+ convert_byte_to_access_rights json[:accessRights]
1259
+ else
1260
+ []
1261
+ end
1262
+ end
1263
+
1264
+ #
1265
+ # Sets access rights for shared link.
1266
+ #
1267
+ # @param [Array<Symbol>] rights
1268
+ # @param [Hash] access Access credentials
1269
+ # @option access [String] :client_id
1270
+ # @option access [String] :private_key
1271
+ # @return [Array<Symbol>]
1272
+ #
1273
+ def set_shared_link_access_rights!(rights, access = {})
1274
+ Api::Request.new do |request|
1275
+ request[:access] = access
1276
+ request[:method] = :PUT
1277
+ request[:path] = "/ant/{{client_id}}/files/#{file.guid}/sharedLinkAccessRights"
1278
+ request[:request_body] = convert_access_rights_to_byte(rights)
1279
+
1280
+ end.execute!
1281
+ end
1282
+
1283
+ #
1284
+ # Sets session callback URL.
1285
+ #
1286
+ # @param [String] url Callback URL
1287
+ # @param [Hash] access Access credentials
1288
+ # @option access [String] :client_id
1289
+ # @option access [String] :private_key
1290
+ #
1291
+ def set_session_callback!(url, access = {})
1292
+ Api::Request.new do |request|
1293
+ request[:access] = access
1294
+ request[:method] = :PUT
1295
+ request[:path] = "/ant/{{client_id}}/files/#{file.guid}/sessionCallbackUrl"
1296
+ request[:request_body] = url
1297
+ end.execute!
1298
+ end
1299
+
1300
+ #
1301
+ # Pass all unknown methods to file.
1302
+ #
1303
+
1304
+
1305
+ def method_missing(method, *args, &blk)
1306
+ file.respond_to?(method) ? file.send(method, *args, &blk) : super
1307
+ end
1308
+
1309
+ def respond_to?(method)
1310
+ super or file.respond_to?(method)
1311
+ end
1312
+
1313
+
1314
+ #
1315
+ # added in release 1.5.8
1316
+ #
1317
+ # Returns document hyperlinks
1318
+ #
1319
+ # @param [Hash] access Access credentials
1320
+ # @option access [String] :client_id
1321
+ # @option access [String] :private_key
1322
+ #
1323
+ def hyperlinks!(access = {})
1324
+ json = Api::Request.new do |request|
1325
+ request[:access] = access
1326
+ request[:method] = :GET
1327
+ request[:path] = "/doc/{{client_id}}/files/#{file.guid}/hyperlinks"
1328
+ end.execute!
1329
+
1330
+ json[:links]
1331
+ end
1332
+
1333
+ #
1334
+ # Changed in release 1.5.8
1335
+ #
1336
+ #
1337
+ # Public Sign document
1338
+ #
1339
+ # @param [String] document Document GUID
1340
+ # @param [Hash] settings Settings of the signing document
1341
+ # @param settings [String] waterMarkText
1342
+ # @param settings [String] waterMarkImage
1343
+ # @param settings [String] name (required)
1344
+ # @param settings [Double] top (required)
1345
+ # @param settings [Double] left (required)
1346
+ # @param settings [Double] width (required)
1347
+ # @param settings [Double] height (required)
1348
+ # @param settings [String] placeSignatureOn (required)
1349
+ # @param settings [String] data
1350
+ # @param [Hash] access Access credentials
1351
+ # @option access [String] :client_id
1352
+ # @option access [String] :private_key
1353
+ # @return [Array]
1354
+ #
1355
+ def public_sign_document!(options = {}, access = {})
1356
+ json = Api::Request.new do |request|
1357
+ request[:access] = access
1358
+ request[:method] = :POST
1359
+ request[:path] = "/signature/public/documents/#{file.guid}/sign"
1360
+ request[:request_body] = options
1361
+ end.execute!
1362
+
1363
+ json[:jobId]
1364
+ end
1365
+
1366
+ #
1367
+ # Changed in release 1.5.8
1368
+ #
1369
+ #
1370
+ # Get document fields
1371
+ #
1372
+ # @param [String] document Document GUID
1373
+ # @param [Hash] settings Settings of the signing document
1374
+ # @param [Hash] access Access credentials
1375
+ # @option access [String] :client_id
1376
+ # @option access [String] :private_key
1377
+ # @return [Array]
1378
+ #
1379
+ def self.public_fields!(access = {})
1380
+ Api::Request.new do |request|
1381
+ request[:access] = access
1382
+ request[:method] = :GET
1383
+ request[:path] = "/signature/public/documents/#{file.guid}/fields"
1384
+ end.execute!
1385
+ end
1386
+
1387
+ # changed in release 2.1.0
1388
+ #
1389
+ # Get template fields.
1390
+ #
1391
+ # @param [Hash] access Access credentials
1392
+ # @option access [String] :client_id
1393
+ # @option access [String] :private_key
1394
+ #
1395
+ def editor_fields!(access = {})
1396
+ Api::Request.new do |request|
1397
+ request[:access] = access
1398
+ request[:method] = :GET
1399
+ request[:path] = "/doc/{{client_id}}/files/#{file.guid}/editor_fields"
1400
+ end.execute!
1401
+ end
1402
+
1403
+ # added in release 1.7.0
1404
+ #
1405
+ # Create questionnaire template from file.
1406
+ #
1407
+ # @example
1408
+ #
1409
+ # file = GroupDocs::Storage::File.new({:guid => '3be4e06494caed131d912c75e17d5f22592e3044032e0f81b35f13a8c9fefb49'}).to_document
1410
+ # field = GroupDocs::Document::TemplateEditorFields.new
1411
+ # field.name = 'test'
1412
+ # field.fieldtype = 'TextBox'
1413
+ # field.page = 1
1414
+ # file.questionnaire_template!([field] )
1415
+ #
1416
+ #
1417
+ # @param List[GroupDocs::Document::TemplateEditorFields] fields
1418
+ # @param [Hash] access Access credentials
1419
+ # @option access [String] :client_id
1420
+ # @option access [String] :private_key
1421
+ #
1422
+ def questionnaire_template!(fields, access = {})
1423
+
1424
+ fields.each do |field|
1425
+ field.is_a?(GroupDocs::Document::TemplateEditorFields) or raise ArgumentError,
1426
+ "Fields should be List GroupDocs::Document::TemplateEditorFields objects, received: #{fields.inspect}"
1427
+ end
1428
+
1429
+ json = Api::Request.new do |request|
1430
+ request[:access] = access
1431
+ request[:method] = :POST
1432
+ request[:path] = "/merge/{{client_id}}/files/#{file.guid}/templates"
1433
+ request[:request_body] = fields
1434
+ end.execute!
1435
+ json[:templateFields].map do |field|
1436
+ Document::Field.new(field)
1437
+ end
1438
+ end
1439
+
1440
+ # added in release 1.8.0
1441
+ #
1442
+ # Add template editor fields to the specific document
1443
+ #
1444
+ # @example
1445
+ #
1446
+ # file = GroupDocs::Storage::File.new({:guid => '3be4e06494caed131d912c75e17d5f22592e3044032e0f81b35f13a8c9fefb49'}).to_document
1447
+ # field = GroupDocs::Document::TemplateEditorFields.new
1448
+ # field.name = 'test'
1449
+ # field.fieldtype = 'TextBox'
1450
+ # field.page = 1
1451
+ # file.add_questionnaire_template!([field] )
1452
+ #
1453
+ #
1454
+ # @param List[GroupDocs::Document::TemplateEditorFields] fields
1455
+ # @param [Hash] access Access credentials
1456
+ # @option access [String] :client_id
1457
+ # @option access [String] :private_key
1458
+ #
1459
+ def add_questionnaire_template!(fields, access = {})
1460
+
1461
+ fields.each do |field|
1462
+ field.is_a?(GroupDocs::Document::TemplateEditorFields) or raise ArgumentError,
1463
+ "Fields should be List GroupDocs::Document::TemplateEditorFields objects, received: #{fields.inspect}"
1464
+ end
1465
+
1466
+ json = Api::Request.new do |request|
1467
+ request[:access] = access
1468
+ request[:method] = :POST
1469
+ request[:path] = "/merge/{{client_id}}/files/#{file.guid}/templates/add"
1470
+ request[:request_body] = fields
1471
+ end.execute!
1472
+ json[:templateFields].map do |field|
1473
+ Document::Field.new(field)
1474
+ end
1475
+ end
1476
+
1477
+
1478
+ # added in release 1.8.0
1479
+ #
1480
+ # Update template's fields
1481
+ #
1482
+ # @example
1483
+ #
1484
+ # file = GroupDocs::Storage::File.new({:guid => '3be4e06494caed131d912c75e17d5f22592e3044032e0f81b35f13a8c9fefb49'}).to_document
1485
+ # field = GroupDocs::Document::TemplateEditorFields.new
1486
+ # field.name = 'test'
1487
+ # field.fieldtype = 'TextBox'
1488
+ # field.page = 1
1489
+ # file.update_questionnaire_template!([field] )
1490
+ #
1491
+ #
1492
+ # @param List[GroupDocs::Document::TemplateEditorFields] fields
1493
+ # @param [Hash] access Access credentials
1494
+ # @option access [String] :client_id
1495
+ # @option access [String] :private_key
1496
+ #
1497
+ def update_questionnaire_template!(fields, access = {})
1498
+
1499
+ fields.each do |field|
1500
+ field.is_a?(GroupDocs::Document::TemplateEditorFields) or raise ArgumentError,
1501
+ "Fields should be List GroupDocs::Document::TemplateEditorFields objects, received: #{fields.inspect}"
1502
+ end
1503
+
1504
+ json = Api::Request.new do |request|
1505
+ request[:access] = access
1506
+ request[:method] = :PUT
1507
+ request[:path] = "/merge/{{client_id}}/files/#{file.guid}/templates/update"
1508
+ request[:request_body] = fields
1509
+ end.execute!
1510
+ json[:templateFields].map do |field|
1511
+ Document::Field.new(field)
1512
+ end
1513
+ end
1514
+
1515
+ # added in release 1.8.0
1516
+ #
1517
+ # Delete template's fields
1518
+ #
1519
+ # @example
1520
+ #
1521
+ # file = GroupDocs::Storage::File.new({:guid => '3be4e06494caed131d912c75e17d5f22592e3044032e0f81b35f13a8c9fefb49'}).to_document
1522
+ # field = file.editor_fields!
1523
+ # file.delete_questionnaire_template!([field] )
1524
+ #
1525
+ #
1526
+ # @param List[GroupDocs::Document::TemplateEditorFields] fields
1527
+ # @param [Hash] access Access credentials
1528
+ # @option access [String] :client_id
1529
+ # @option access [String] :private_key
1530
+ #
1531
+ def delete_questionnaire_template!(fields, access = {})
1532
+
1533
+ fields.each do |field|
1534
+ field.is_a?(GroupDocs::Document::TemplateEditorFields) or raise ArgumentError,
1535
+ "Fields should be List GroupDocs::Document::TemplateEditorFields objects, received: #{fields.inspect}"
1536
+ end
1537
+
1538
+ json = Api::Request.new do |request|
1539
+ request[:access] = access
1540
+ request[:method] = :DELETE
1541
+ request[:path] = "/merge/{{client_id}}/files/#{file.guid}/templates/delete"
1542
+ request[:request_body] = fields
1543
+ end.execute!
1544
+ json[:templateFields].map do |field|
1545
+ Document::Field.new(field)
1546
+ end
1547
+ end
1548
+
1549
+ end # Document
1550
+ end # GroupDocs