groupdocs 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +5 -0
- data/Gemfile +3 -0
- data/README.md +141 -0
- data/Rakefile +9 -0
- data/groupdocs.gemspec +28 -0
- data/lib/groupdocs.rb +53 -0
- data/lib/groupdocs/api.rb +3 -0
- data/lib/groupdocs/api/entity.rb +113 -0
- data/lib/groupdocs/api/helpers.rb +5 -0
- data/lib/groupdocs/api/helpers/access_helper.rb +56 -0
- data/lib/groupdocs/api/helpers/actions_helper.rb +48 -0
- data/lib/groupdocs/api/helpers/rest_helper.rb +89 -0
- data/lib/groupdocs/api/helpers/status_helper.rb +48 -0
- data/lib/groupdocs/api/helpers/url_helper.rb +89 -0
- data/lib/groupdocs/api/request.rb +73 -0
- data/lib/groupdocs/api/sugar/lookup.rb +48 -0
- data/lib/groupdocs/datasource.rb +162 -0
- data/lib/groupdocs/datasource/field.rb +44 -0
- data/lib/groupdocs/document.rb +513 -0
- data/lib/groupdocs/document/annotation.rb +215 -0
- data/lib/groupdocs/document/annotation/reply.rb +167 -0
- data/lib/groupdocs/document/change.rb +35 -0
- data/lib/groupdocs/document/field.rb +27 -0
- data/lib/groupdocs/document/metadata.rb +26 -0
- data/lib/groupdocs/document/rectangle.rb +24 -0
- data/lib/groupdocs/document/view.rb +36 -0
- data/lib/groupdocs/errors.rb +10 -0
- data/lib/groupdocs/job.rb +201 -0
- data/lib/groupdocs/questionnaire.rb +221 -0
- data/lib/groupdocs/questionnaire/execution.rb +120 -0
- data/lib/groupdocs/questionnaire/page.rb +43 -0
- data/lib/groupdocs/questionnaire/question.rb +75 -0
- data/lib/groupdocs/questionnaire/question/answer.rb +10 -0
- data/lib/groupdocs/storage.rb +37 -0
- data/lib/groupdocs/storage/file.rb +248 -0
- data/lib/groupdocs/storage/folder.rb +314 -0
- data/lib/groupdocs/storage/package.rb +42 -0
- data/lib/groupdocs/user.rb +50 -0
- data/lib/groupdocs/version.rb +3 -0
- data/spec/groupdocs/api/entity_spec.rb +54 -0
- data/spec/groupdocs/api/helpers/access_helper_spec.rb +89 -0
- data/spec/groupdocs/api/helpers/actions_helper_spec.rb +51 -0
- data/spec/groupdocs/api/helpers/rest_helper_spec.rb +187 -0
- data/spec/groupdocs/api/helpers/status_helper_spec.rb +85 -0
- data/spec/groupdocs/api/helpers/url_helper_spec.rb +93 -0
- data/spec/groupdocs/api/request_spec.rb +85 -0
- data/spec/groupdocs/datasource/field_spec.rb +50 -0
- data/spec/groupdocs/datasource_spec.rb +156 -0
- data/spec/groupdocs/document/annotation/reply_spec.rb +179 -0
- data/spec/groupdocs/document/annotation_spec.rb +226 -0
- data/spec/groupdocs/document/change_spec.rb +35 -0
- data/spec/groupdocs/document/field_spec.rb +31 -0
- data/spec/groupdocs/document/metadata_spec.rb +26 -0
- data/spec/groupdocs/document/rectangle_spec.rb +34 -0
- data/spec/groupdocs/document/view_spec.rb +36 -0
- data/spec/groupdocs/document_spec.rb +509 -0
- data/spec/groupdocs/errors_spec.rb +7 -0
- data/spec/groupdocs/job_spec.rb +196 -0
- data/spec/groupdocs/questionnaire/execution_spec.rb +136 -0
- data/spec/groupdocs/questionnaire/page_spec.rb +50 -0
- data/spec/groupdocs/questionnaire/question/answer_spec.rb +11 -0
- data/spec/groupdocs/questionnaire/question_spec.rb +84 -0
- data/spec/groupdocs/questionnaire_spec.rb +217 -0
- data/spec/groupdocs/storage/file_spec.rb +242 -0
- data/spec/groupdocs/storage/folder_spec.rb +310 -0
- data/spec/groupdocs/storage/package_spec.rb +41 -0
- data/spec/groupdocs/storage_spec.rb +27 -0
- data/spec/groupdocs/user_spec.rb +53 -0
- data/spec/groupdocs_spec.rb +56 -0
- data/spec/spec_helper.rb +46 -0
- data/spec/support/files/resume.pdf +0 -0
- data/spec/support/json/annotation_collaborators_set.json +16 -0
- data/spec/support/json/annotation_create.json +12 -0
- data/spec/support/json/annotation_list.json +32 -0
- data/spec/support/json/annotation_remove.json +9 -0
- data/spec/support/json/annotation_replies_create.json +9 -0
- data/spec/support/json/annotation_replies_get.json +25 -0
- data/spec/support/json/comparison_changes.json +46 -0
- data/spec/support/json/comparison_compare.json +8 -0
- data/spec/support/json/comparison_document.json +10 -0
- data/spec/support/json/datasource_add.json +8 -0
- data/spec/support/json/datasource_get.json +22 -0
- data/spec/support/json/datasource_remove.json +8 -0
- data/spec/support/json/datasource_update.json +8 -0
- data/spec/support/json/document_access_info_get.json +14 -0
- data/spec/support/json/document_convert.json +8 -0
- data/spec/support/json/document_datasource.json +10 -0
- data/spec/support/json/document_fields.json +34 -0
- data/spec/support/json/document_formats.json +8 -0
- data/spec/support/json/document_metadata.json +15 -0
- data/spec/support/json/document_questionnaire_create.json +9 -0
- data/spec/support/json/document_questionnaires.json +23 -0
- data/spec/support/json/document_sharers_remove.json +8 -0
- data/spec/support/json/document_sharers_set.json +16 -0
- data/spec/support/json/document_views.json +32 -0
- data/spec/support/json/file_compress.json +8 -0
- data/spec/support/json/file_copy.json +14 -0
- data/spec/support/json/file_delete.json +5 -0
- data/spec/support/json/file_move.json +14 -0
- data/spec/support/json/file_upload.json +8 -0
- data/spec/support/json/folder_create.json +8 -0
- data/spec/support/json/folder_delete.json +5 -0
- data/spec/support/json/folder_list.json +21 -0
- data/spec/support/json/folder_move.json +8 -0
- data/spec/support/json/folder_sharers_get.json +16 -0
- data/spec/support/json/folder_sharers_remove.json +8 -0
- data/spec/support/json/folder_sharers_set.json +16 -0
- data/spec/support/json/job_add_url.json +8 -0
- data/spec/support/json/job_create.json +8 -0
- data/spec/support/json/job_documents.json +39 -0
- data/spec/support/json/job_file_add.json +8 -0
- data/spec/support/json/job_update.json +7 -0
- data/spec/support/json/jobs_get.json +52 -0
- data/spec/support/json/package_create.json +7 -0
- data/spec/support/json/questionnaire_create.json +8 -0
- data/spec/support/json/questionnaire_datasources.json +26 -0
- data/spec/support/json/questionnaire_execution_create.json +9 -0
- data/spec/support/json/questionnaire_execution_status_set.json +8 -0
- data/spec/support/json/questionnaire_execution_update.json +8 -0
- data/spec/support/json/questionnaire_executions.json +24 -0
- data/spec/support/json/questionnaire_get.json +14 -0
- data/spec/support/json/questionnaire_remove.json +8 -0
- data/spec/support/json/questionnaire_update.json +8 -0
- data/spec/support/json/questionnaires_get.json +22 -0
- data/spec/support/json/storage_info.json +10 -0
- data/spec/support/shared_examples/api/entity.rb +37 -0
- data/spec/support/shared_examples/api/helpers/status_helper.rb +12 -0
- data/spec/support/shared_examples/api/sugar/lookup.rb +57 -0
- metadata +356 -0
@@ -0,0 +1,44 @@
|
|
1
|
+
module GroupDocs
|
2
|
+
class DataSource::Field < GroupDocs::Api::Entity
|
3
|
+
|
4
|
+
TYPES = {
|
5
|
+
text: 0,
|
6
|
+
binary: 1,
|
7
|
+
}
|
8
|
+
|
9
|
+
# @attr [String] field
|
10
|
+
attr_accessor :field
|
11
|
+
# @attr [Integer] type
|
12
|
+
attr_accessor :type
|
13
|
+
# @attr [Array<String>] values
|
14
|
+
attr_accessor :values
|
15
|
+
|
16
|
+
# Compatibility with response JSON
|
17
|
+
alias_method :name=, :field=
|
18
|
+
|
19
|
+
#
|
20
|
+
# Updates type with machine-readable format.
|
21
|
+
#
|
22
|
+
# @param [Symbol] type
|
23
|
+
# @raise [ArgumentError] if type is unknown
|
24
|
+
#
|
25
|
+
def type=(type)
|
26
|
+
if type.is_a?(Symbol)
|
27
|
+
TYPES.keys.include?(type) or raise ArgumentError, "Unknown type: #{type.inspect}"
|
28
|
+
type = TYPES[type]
|
29
|
+
end
|
30
|
+
|
31
|
+
@type = type
|
32
|
+
end
|
33
|
+
|
34
|
+
#
|
35
|
+
# Returns field type in human-readable format.
|
36
|
+
#
|
37
|
+
# @return [Symbol]
|
38
|
+
#
|
39
|
+
def type
|
40
|
+
TYPES.invert[@type]
|
41
|
+
end
|
42
|
+
|
43
|
+
end # DataSource::Field
|
44
|
+
end # GroupDocs
|
@@ -0,0 +1,513 @@
|
|
1
|
+
module GroupDocs
|
2
|
+
class Document < GroupDocs::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
|
+
|
11
|
+
extend GroupDocs::Api::Sugar::Lookup
|
12
|
+
include GroupDocs::Api::Helpers::Access
|
13
|
+
include GroupDocs::Api::Helpers::Status
|
14
|
+
|
15
|
+
#
|
16
|
+
# Returns an array of all documents on server.
|
17
|
+
#
|
18
|
+
# @param [String] path Starting path to look for documents
|
19
|
+
# @param [Hash] access Access credentials
|
20
|
+
# @option access [String] :client_id
|
21
|
+
# @option access [String] :private_key
|
22
|
+
# @return [Array<GroupDocs::Storage::Document>]
|
23
|
+
#
|
24
|
+
def self.all!(path = '/', access = {})
|
25
|
+
GroupDocs::Storage::File.all!(path, access).map(&:to_document)
|
26
|
+
end
|
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 = { page_index: 0 }, access = {})
|
40
|
+
api = GroupDocs::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
|
+
GroupDocs::Document::View.new(view)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# @attr [GroupDocs::Storage::File] file
|
54
|
+
attr_accessor :file
|
55
|
+
# @attr [Time] process_date
|
56
|
+
attr_accessor :process_date
|
57
|
+
# @attr [Array] outputs
|
58
|
+
attr_accessor :outputs
|
59
|
+
|
60
|
+
#
|
61
|
+
# Converts timestamp which is return by API server to Time object.
|
62
|
+
#
|
63
|
+
# @return [Time]
|
64
|
+
#
|
65
|
+
def process_date
|
66
|
+
Time.at(@process_date)
|
67
|
+
end
|
68
|
+
|
69
|
+
# Compatibility with response JSON
|
70
|
+
alias_method :proc_date=, :process_date=
|
71
|
+
|
72
|
+
#
|
73
|
+
# Creates new GroupDocs::Document.
|
74
|
+
#
|
75
|
+
# You should avoid creating documents directly. Instead, use #to_document
|
76
|
+
# instance method of GroupDocs::Storage::File.
|
77
|
+
#
|
78
|
+
# @raise [ArgumentError] If file is not passed or is not an instance of GroupDocs::Storage::File
|
79
|
+
#
|
80
|
+
def initialize(options = {}, &blk)
|
81
|
+
super(options, &blk)
|
82
|
+
file.is_a?(GroupDocs::Storage::File) or raise ArgumentError,
|
83
|
+
"You have to pass GroupDocs::Storage::File object: #{file.inspect}."
|
84
|
+
end
|
85
|
+
|
86
|
+
#
|
87
|
+
# Returns access mode of document.
|
88
|
+
#
|
89
|
+
# @param [Hash] access Access credentials
|
90
|
+
# @option access [String] :client_id
|
91
|
+
# @option access [String] :private_key
|
92
|
+
# @return [Symbol] One of :private, :restricted or :public access modes
|
93
|
+
#
|
94
|
+
def access_mode!(access = {})
|
95
|
+
json = GroupDocs::Api::Request.new do |request|
|
96
|
+
request[:access] = access
|
97
|
+
request[:method] = :GET
|
98
|
+
request[:path] = "/doc/{{client_id}}/files/#{file.id}/accessinfo"
|
99
|
+
end.execute!
|
100
|
+
|
101
|
+
parse_access_mode(json[:access])
|
102
|
+
end
|
103
|
+
|
104
|
+
#
|
105
|
+
# Sets access mode of document.
|
106
|
+
#
|
107
|
+
# @param [Symbol] mode One of :private, :restricted or :public access modes
|
108
|
+
# @param [Hash] access Access credentials
|
109
|
+
# @option access [String] :client_id
|
110
|
+
# @option access [String] :private_key
|
111
|
+
# @return [Symbol] Set access mode
|
112
|
+
#
|
113
|
+
def access_mode_set!(mode, access = {})
|
114
|
+
api = GroupDocs::Api::Request.new do |request|
|
115
|
+
request[:access] = access
|
116
|
+
request[:method] = :PUT
|
117
|
+
request[:path] = "/doc/{{client_id}}/files/#{file.id}/accessinfo"
|
118
|
+
end
|
119
|
+
api.add_params(mode: parse_access_mode(mode))
|
120
|
+
json = api.execute!
|
121
|
+
|
122
|
+
parse_access_mode(json[:access])
|
123
|
+
end
|
124
|
+
# note that aliased version cannot accept access credentials hash
|
125
|
+
alias_method :access_mode=, :access_mode_set!
|
126
|
+
|
127
|
+
#
|
128
|
+
# Returns array of file formats document can be converted to.
|
129
|
+
#
|
130
|
+
# @param [Hash] access Access credentials
|
131
|
+
# @option access [String] :client_id
|
132
|
+
# @option access [String] :private_key
|
133
|
+
# @return [Array<Symbol>]
|
134
|
+
#
|
135
|
+
def formats!(access = {})
|
136
|
+
json = GroupDocs::Api::Request.new do |request|
|
137
|
+
request[:access] = access
|
138
|
+
request[:method] = :GET
|
139
|
+
request[:path] = "/doc/{{client_id}}/files/#{file.id}/formats"
|
140
|
+
end.execute!
|
141
|
+
|
142
|
+
json[:types].split(';').map do |format|
|
143
|
+
format.downcase.to_sym
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
#
|
148
|
+
# Returns document metadata.
|
149
|
+
#
|
150
|
+
# @param [Hash] access Access credentials
|
151
|
+
# @option access [String] :client_id
|
152
|
+
# @option access [String] :private_key
|
153
|
+
# @return [GroupDocs::Document::MetaData]
|
154
|
+
#
|
155
|
+
def metadata!(access = {})
|
156
|
+
json = GroupDocs::Api::Request.new do |request|
|
157
|
+
request[:access] = access
|
158
|
+
request[:method] = :GET
|
159
|
+
request[:path] = "/doc/{{client_id}}/files/#{file.id}/metadata"
|
160
|
+
end.execute!
|
161
|
+
|
162
|
+
GroupDocs::Document::MetaData.new do |metadata|
|
163
|
+
metadata.id = json[:id]
|
164
|
+
metadata.guid = json[:guid]
|
165
|
+
metadata.page_count = json[:page_count]
|
166
|
+
metadata.views_count = json[:views_count]
|
167
|
+
if json[:last_view]
|
168
|
+
metadata.last_view = json[:last_view]
|
169
|
+
metadata.last_view.document = self
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
#
|
175
|
+
# Returns an array of document fields.
|
176
|
+
#
|
177
|
+
# @param [Hash] options
|
178
|
+
# @option options [Boolean] :include_geometry Set to true if fields location and size should be returned
|
179
|
+
# @param [Hash] access Access credentials
|
180
|
+
# @option access [String] :client_id
|
181
|
+
# @option access [String] :private_key
|
182
|
+
# @return [Array<GroupDocs::Document::Field>]
|
183
|
+
#
|
184
|
+
def fields!(options = {}, access = {})
|
185
|
+
api = GroupDocs::Api::Request.new do |request|
|
186
|
+
request[:access] = access
|
187
|
+
request[:method] = :GET
|
188
|
+
request[:path] = "/doc/{{client_id}}/files/#{file.guid}/fields"
|
189
|
+
end
|
190
|
+
api.add_params(options)
|
191
|
+
json = api.execute!
|
192
|
+
|
193
|
+
json[:fields].map do |field|
|
194
|
+
GroupDocs::Document::Field.new(field)
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
#
|
199
|
+
# Returns an array of users a document is shared with.
|
200
|
+
#
|
201
|
+
# @param [Hash] access Access credentials
|
202
|
+
# @option access [String] :client_id
|
203
|
+
# @option access [String] :private_key
|
204
|
+
# @return [Array<GroupDocs::User>]
|
205
|
+
#
|
206
|
+
def sharers!(access = {})
|
207
|
+
json = GroupDocs::Api::Request.new do |request|
|
208
|
+
request[:access] = access
|
209
|
+
request[:method] = :GET
|
210
|
+
request[:path] = "/doc/{{client_id}}/files/#{file.id}/accessinfo"
|
211
|
+
end.execute!
|
212
|
+
|
213
|
+
json[:sharers].map do |user|
|
214
|
+
GroupDocs::User.new(user)
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
#
|
219
|
+
# Sets document sharers to given emails.
|
220
|
+
#
|
221
|
+
# If empty array or nil passed, clears sharers.
|
222
|
+
#
|
223
|
+
# @param [Array] emails List of email addresses to share with
|
224
|
+
# @param [Hash] access Access credentials
|
225
|
+
# @option access [String] :client_id
|
226
|
+
# @option access [String] :private_key
|
227
|
+
# @return [Array<GroupDocs::User>]
|
228
|
+
#
|
229
|
+
def sharers_set!(emails, access = {})
|
230
|
+
if emails.nil? || emails.empty?
|
231
|
+
sharers_clear!(access)
|
232
|
+
else
|
233
|
+
json = GroupDocs::Api::Request.new do |request|
|
234
|
+
request[:access] = access
|
235
|
+
request[:method] = :PUT
|
236
|
+
request[:path] = "/doc/{{client_id}}/files/#{file.id}/sharers"
|
237
|
+
request[:request_body] = emails
|
238
|
+
end.execute!
|
239
|
+
|
240
|
+
json[:shared_users].map do |user|
|
241
|
+
GroupDocs::User.new(user)
|
242
|
+
end
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
#
|
247
|
+
# Clears sharers list.
|
248
|
+
#
|
249
|
+
# @param [Hash] access Access credentials
|
250
|
+
# @option access [String] :client_id
|
251
|
+
# @option access [String] :private_key
|
252
|
+
# @return nil
|
253
|
+
#
|
254
|
+
def sharers_clear!(access = {})
|
255
|
+
GroupDocs::Api::Request.new do |request|
|
256
|
+
request[:access] = access
|
257
|
+
request[:method] = :DELETE
|
258
|
+
request[:path] = "/doc/{{client_id}}/files/#{file.id}/sharers"
|
259
|
+
end.execute![:shared_users]
|
260
|
+
end
|
261
|
+
|
262
|
+
#
|
263
|
+
# Converts document to given format.
|
264
|
+
#
|
265
|
+
# @param [Symbol] format
|
266
|
+
# @param [Hash] options
|
267
|
+
# @option options [Boolean] :email_results Set to true if converted document should be emailed
|
268
|
+
# @param [Hash] access Access credentials
|
269
|
+
# @option access [String] :client_id
|
270
|
+
# @option access [String] :private_key
|
271
|
+
# @return [GroupDocs::Job] Created job
|
272
|
+
#
|
273
|
+
def convert!(format, options = {}, access = {})
|
274
|
+
options.merge!(new_type: format)
|
275
|
+
|
276
|
+
api = GroupDocs::Api::Request.new do |request|
|
277
|
+
request[:access] = access
|
278
|
+
request[:method] = :POST
|
279
|
+
request[:path] = "/{{client_id}}/files/#{file.guid}"
|
280
|
+
end
|
281
|
+
api.add_params(options)
|
282
|
+
json = api.execute!
|
283
|
+
|
284
|
+
GroupDocs::Job.new(id: json[:job_id])
|
285
|
+
end
|
286
|
+
|
287
|
+
#
|
288
|
+
# Creates new job to merge datasource into document.
|
289
|
+
#
|
290
|
+
# @param [GroupDocs::DataSource] datasource
|
291
|
+
# @param [Hash] options
|
292
|
+
# @option options [Boolean] :new_type New file format type
|
293
|
+
# @option options [Boolean] :email_results Set to true if converted document should be emailed
|
294
|
+
# @param [Hash] access Access credentials
|
295
|
+
# @option access [String] :client_id
|
296
|
+
# @option access [String] :private_key
|
297
|
+
# @return [GroupDocs::Job]
|
298
|
+
#
|
299
|
+
# @raise [ArgumentError] if datasource is not GroupDocs::DataSource object
|
300
|
+
# @raise [ArgumentError] if options does not contain :new_type and/or :email_results
|
301
|
+
#
|
302
|
+
def datasource!(datasource, options, access = {})
|
303
|
+
datasource.is_a?(GroupDocs::DataSource) or raise ArgumentError,
|
304
|
+
"Datasource should be GroupDocs::DataSource object, received: #{datasource.inspect}"
|
305
|
+
(options[:new_type].nil? || options[:email_results].nil?) and raise ArgumentError,
|
306
|
+
"Both :new_type and :email_results should be passed, received: #{options.inspect}"
|
307
|
+
|
308
|
+
api = GroupDocs::Api::Request.new do |request|
|
309
|
+
request[:access] = access
|
310
|
+
request[:method] = :POST
|
311
|
+
request[:path] = "/merge/{{client_id}}/files/#{file.guid}/datasources/#{datasource.id}"
|
312
|
+
end
|
313
|
+
api.add_params(options)
|
314
|
+
json = api.execute!
|
315
|
+
|
316
|
+
GroupDocs::Job.new(id: json[:job_id])
|
317
|
+
end
|
318
|
+
|
319
|
+
#
|
320
|
+
# Returns an array of questionnaires.
|
321
|
+
#
|
322
|
+
# @param [Hash] access Access credentials
|
323
|
+
# @option access [String] :client_id
|
324
|
+
# @option access [String] :private_key
|
325
|
+
# @return [Array<GroupDocs::Questionnaire>]
|
326
|
+
#
|
327
|
+
def questionnaires!(access = {})
|
328
|
+
json = GroupDocs::Api::Request.new do |request|
|
329
|
+
request[:access] = access
|
330
|
+
request[:method] = :GET
|
331
|
+
request[:path] = "/merge/{{client_id}}/files/#{file.guid}/questionnaires"
|
332
|
+
end.execute!
|
333
|
+
|
334
|
+
json[:questionnaires].map do |questionnaire|
|
335
|
+
GroupDocs::Questionnaire.new(questionnaire)
|
336
|
+
end
|
337
|
+
end
|
338
|
+
|
339
|
+
#
|
340
|
+
# Adds questionnaire to document.
|
341
|
+
#
|
342
|
+
# @param [GroupDocs::Questionnaire] questionnaire
|
343
|
+
# @param [Hash] access Access credentials
|
344
|
+
# @option access [String] :client_id
|
345
|
+
# @option access [String] :private_key
|
346
|
+
#
|
347
|
+
# @raise [ArgumentError] if questionnaire is not GroupDocs::Questionnaire object
|
348
|
+
#
|
349
|
+
def add_questionnaire!(questionnaire, access = {})
|
350
|
+
questionnaire.is_a?(GroupDocs::Questionnaire) or raise ArgumentError,
|
351
|
+
"Questionnaire should be GroupDocs::Questionnaire object, received: #{questionnaire.inspect}"
|
352
|
+
|
353
|
+
GroupDocs::Api::Request.new do |request|
|
354
|
+
request[:access] = access
|
355
|
+
request[:method] = :PUT
|
356
|
+
request[:path] = "/merge/{{client_id}}/files/#{file.guid}/questionnaires/#{questionnaire.id}"
|
357
|
+
end.execute!
|
358
|
+
end
|
359
|
+
|
360
|
+
#
|
361
|
+
# Creates questionnaire and adds it to document.
|
362
|
+
#
|
363
|
+
# @param [GroupDocs::Questionnaire] questionnaire
|
364
|
+
# @param [Hash] access Access credentials
|
365
|
+
# @option access [String] :client_id
|
366
|
+
# @option access [String] :private_key
|
367
|
+
# @return [GroupDocs::Questionnaire]
|
368
|
+
#
|
369
|
+
# @raise [ArgumentError] if questionnaire is not GroupDocs::Questionnaire object
|
370
|
+
#
|
371
|
+
def create_questionnaire!(questionnaire, access = {})
|
372
|
+
questionnaire.is_a?(GroupDocs::Questionnaire) or raise ArgumentError,
|
373
|
+
"Questionnaire should be GroupDocs::Questionnaire object, received: #{questionnaire.inspect}"
|
374
|
+
|
375
|
+
json = GroupDocs::Api::Request.new do |request|
|
376
|
+
request[:access] = access
|
377
|
+
request[:method] = :POST
|
378
|
+
request[:path] = "/merge/{{client_id}}/files/#{file.guid}/questionnaires"
|
379
|
+
request[:request_body] = questionnaire.to_hash
|
380
|
+
end.execute!
|
381
|
+
|
382
|
+
questionnaire.id = json[:questionnaire_id]
|
383
|
+
questionnaire
|
384
|
+
end
|
385
|
+
|
386
|
+
#
|
387
|
+
# Detaches questionnaire from document.
|
388
|
+
#
|
389
|
+
# @param [GroupDocs::Questionnaire] questionnaire
|
390
|
+
# @param [Hash] access Access credentials
|
391
|
+
# @option access [String] :client_id
|
392
|
+
# @option access [String] :private_key
|
393
|
+
#
|
394
|
+
# @raise [ArgumentError] if questionnaire is not GroupDocs::Questionnaire object
|
395
|
+
#
|
396
|
+
def remove_questionnaire!(questionnaire, access = {})
|
397
|
+
questionnaire.is_a?(GroupDocs::Questionnaire) or raise ArgumentError,
|
398
|
+
"Questionnaire should be GroupDocs::Questionnaire object, received: #{questionnaire.inspect}"
|
399
|
+
|
400
|
+
GroupDocs::Api::Request.new do |request|
|
401
|
+
request[:access] = access
|
402
|
+
request[:method] = :DELETE
|
403
|
+
request[:path] = "/merge/{{client_id}}/files/#{file.guid}/questionnaires/#{questionnaire.id}"
|
404
|
+
end.execute!
|
405
|
+
end
|
406
|
+
|
407
|
+
#
|
408
|
+
# Returns an array of annotations.
|
409
|
+
#
|
410
|
+
# @param [Hash] access Access credentials
|
411
|
+
# @option access [String] :client_id
|
412
|
+
# @option access [String] :private_key
|
413
|
+
# @return [Array<GroupDocs::Document::Annotation>]
|
414
|
+
#
|
415
|
+
def annotations!(access = {})
|
416
|
+
json = GroupDocs::Api::Request.new do |request|
|
417
|
+
request[:access] = access
|
418
|
+
request[:method] = :GET
|
419
|
+
request[:path] = "/ant/{{client_id}}/files/#{file.guid}/annotations"
|
420
|
+
end.execute!
|
421
|
+
|
422
|
+
json[:annotations].map do |annotation|
|
423
|
+
annotation.merge!(document: self)
|
424
|
+
GroupDocs::Document::Annotation.new(annotation)
|
425
|
+
end
|
426
|
+
end
|
427
|
+
|
428
|
+
#
|
429
|
+
# Returns document details.
|
430
|
+
#
|
431
|
+
# @param [Hash] access Access credentials
|
432
|
+
# @option access [String] :client_id
|
433
|
+
# @option access [String] :private_key
|
434
|
+
# @return [Hash]
|
435
|
+
#
|
436
|
+
def details!(access = {})
|
437
|
+
api = GroupDocs::Api::Request.new do |request|
|
438
|
+
request[:access] = access
|
439
|
+
request[:method] = :GET
|
440
|
+
request[:path] = "/comparison/{{client_id}}/comparison/document"
|
441
|
+
end
|
442
|
+
api.add_params(guid: file.guid)
|
443
|
+
api.execute!
|
444
|
+
end
|
445
|
+
|
446
|
+
#
|
447
|
+
# Schedules a job for comparing document with given.
|
448
|
+
#
|
449
|
+
# @param [GroupDocs::Document] document
|
450
|
+
# @param [Hash] access Access credentials
|
451
|
+
# @option access [String] :client_id
|
452
|
+
# @option access [String] :private_key
|
453
|
+
# @return [GroupDocs::Job]
|
454
|
+
#
|
455
|
+
# @raise [ArgumentError] if document is not GroupDocs::Document object
|
456
|
+
#
|
457
|
+
def compare!(document, access = {})
|
458
|
+
document.is_a?(GroupDocs::Document) or raise ArgumentError,
|
459
|
+
"Document should be GroupDocs::Document object, received: #{document.inspect}"
|
460
|
+
|
461
|
+
api = GroupDocs::Api::Request.new do |request|
|
462
|
+
request[:access] = access
|
463
|
+
request[:method] = :GET
|
464
|
+
request[:path] = "/comparison/{{client_id}}/comparison/compare"
|
465
|
+
end
|
466
|
+
api.add_params(source: file.guid, target: document.file.guid)
|
467
|
+
json = api.execute!
|
468
|
+
|
469
|
+
GroupDocs::Job.new(id: json[:job_id])
|
470
|
+
end
|
471
|
+
|
472
|
+
#
|
473
|
+
# Returns an array of changes in document.
|
474
|
+
#
|
475
|
+
# @example
|
476
|
+
# document_one = GroupDocs::Document.find!(:name, 'CV.doc')
|
477
|
+
# document_two = GroupDocs::Document.find!(:name, 'Resume.doc')
|
478
|
+
# job = document_one.compare!(document_two)
|
479
|
+
# result = job.documents!.first
|
480
|
+
# result.changes!
|
481
|
+
#
|
482
|
+
# @param [Hash] access Access credentials
|
483
|
+
# @option access [String] :client_id
|
484
|
+
# @option access [String] :private_key
|
485
|
+
#
|
486
|
+
def changes!(access = {})
|
487
|
+
api = GroupDocs::Api::Request.new do |request|
|
488
|
+
request[:access] = access
|
489
|
+
request[:method] = :GET
|
490
|
+
request[:path] = "/comparison/{{client_id}}/comparison/changes"
|
491
|
+
end
|
492
|
+
api.add_params(resultFileId: file.guid)
|
493
|
+
json = api.execute!
|
494
|
+
|
495
|
+
json[:changes].map do |change|
|
496
|
+
GroupDocs::Document::Change.new(change)
|
497
|
+
end
|
498
|
+
end
|
499
|
+
|
500
|
+
#
|
501
|
+
# Pass all unknown methods to file.
|
502
|
+
#
|
503
|
+
|
504
|
+
def method_missing(method, *args, &blk)
|
505
|
+
file.respond_to?(method) ? file.send(method, *args, &blk) : super
|
506
|
+
end
|
507
|
+
|
508
|
+
def respond_to?(method)
|
509
|
+
super or file.respond_to?(method)
|
510
|
+
end
|
511
|
+
|
512
|
+
end # Document
|
513
|
+
end # GroupDocs
|