groupdocs 2.2.0 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.travis.yml +9 -9
- data/CHANGELOG.md +482 -477
- data/Gemfile +3 -3
- data/LICENSE.txt +21 -21
- data/README.md +94 -94
- data/Rakefile +9 -9
- data/examples/README.md +12 -12
- data/examples/api-samples/Gemfile +5 -5
- data/examples/api-samples/Gemfile.lock +49 -49
- data/examples/api-samples/README.md +23 -23
- data/examples/api-samples/public/css/style.css +229 -229
- data/examples/api-samples/public/docs/annotation-sample.html +167 -167
- data/examples/api-samples/public/docs/docco.css +500 -500
- data/examples/api-samples/public/docs/envelope-sample.html +374 -374
- data/examples/api-samples/public/docs/sample01.html +181 -181
- data/examples/api-samples/public/docs/sample02.html +199 -199
- data/examples/api-samples/public/docs/sample03.html +318 -318
- data/examples/api-samples/public/docs/sample04.html +217 -217
- data/examples/api-samples/public/docs/sample05.html +296 -296
- data/examples/api-samples/public/docs/sample06.html +347 -347
- data/examples/api-samples/public/docs/sample07.html +209 -209
- data/examples/api-samples/public/docs/sample08.html +277 -277
- data/examples/api-samples/public/docs/sample09.html +314 -314
- data/examples/api-samples/public/docs/sample10.html +270 -270
- data/examples/api-samples/public/docs/sample11.html +462 -462
- data/examples/api-samples/public/docs/sample12.html +199 -199
- data/examples/api-samples/public/docs/sample13.html +201 -201
- data/examples/api-samples/public/docs/sample14.html +204 -204
- data/examples/api-samples/public/docs/sample15.html +182 -182
- data/examples/api-samples/public/docs/sample16.html +234 -234
- data/examples/api-samples/public/docs/sample17.html +309 -309
- data/examples/api-samples/public/docs/sample18.html +721 -721
- data/examples/api-samples/public/docs/sample19.html +631 -631
- data/examples/api-samples/public/docs/sample20.html +230 -230
- data/examples/api-samples/public/docs/sample21.html +790 -790
- data/examples/api-samples/public/docs/sample22.html +408 -408
- data/examples/api-samples/public/docs/sample25.html +550 -550
- data/examples/api-samples/public/templates/base-simple_source.html +191 -191
- data/examples/api-samples/public/templates/testdocument.html +100 -100
- data/examples/api-samples/public/templates/welcome.htm +137 -137
- data/examples/api-samples/samples/annotation-sample.rb +56 -56
- data/examples/api-samples/samples/envelope-sample.rb +133 -133
- data/examples/api-samples/samples/sample01.rb +44 -44
- data/examples/api-samples/samples/sample02.rb +50 -50
- data/examples/api-samples/samples/sample03.rb +79 -79
- data/examples/api-samples/samples/sample04.rb +54 -54
- data/examples/api-samples/samples/sample05.rb +83 -83
- data/examples/api-samples/samples/sample06.rb +86 -86
- data/examples/api-samples/samples/sample07.rb +59 -59
- data/examples/api-samples/samples/sample08.rb +76 -76
- data/examples/api-samples/samples/sample09.rb +85 -85
- data/examples/api-samples/samples/sample10.rb +70 -70
- data/examples/api-samples/samples/sample11.rb +132 -132
- data/examples/api-samples/samples/sample12.rb +48 -48
- data/examples/api-samples/samples/sample13.rb +49 -49
- data/examples/api-samples/samples/sample14.rb +54 -54
- data/examples/api-samples/samples/sample15.rb +43 -43
- data/examples/api-samples/samples/sample16.rb +57 -57
- data/examples/api-samples/samples/sample17.rb +70 -70
- data/examples/api-samples/samples/sample18.rb +190 -190
- data/examples/api-samples/samples/sample19.rb +188 -188
- data/examples/api-samples/samples/sample20.rb +68 -68
- data/examples/api-samples/samples/sample21.rb +212 -212
- data/examples/api-samples/samples/sample22.rb +109 -109
- data/examples/api-samples/samples/sample25.rb +127 -127
- data/examples/api-samples/views/_others_samples.haml +233 -233
- data/examples/api-samples/views/annotation_sample.haml +63 -63
- data/examples/api-samples/views/envelope_sample.haml +72 -72
- data/examples/api-samples/views/index.haml +235 -235
- data/examples/api-samples/views/layout.haml +3 -3
- data/examples/api-samples/views/sample01.haml +63 -63
- data/examples/api-samples/views/sample02.haml +52 -52
- data/examples/api-samples/views/sample03.haml +87 -87
- data/examples/api-samples/views/sample04.haml +55 -55
- data/examples/api-samples/views/sample05.haml +86 -86
- data/examples/api-samples/views/sample06.haml +58 -58
- data/examples/api-samples/views/sample07.haml +52 -52
- data/examples/api-samples/views/sample08.haml +100 -100
- data/examples/api-samples/views/sample09.haml +95 -95
- data/examples/api-samples/views/sample10.haml +93 -93
- data/examples/api-samples/views/sample11.haml +140 -140
- data/examples/api-samples/views/sample12.haml +68 -68
- data/examples/api-samples/views/sample13.haml +64 -64
- data/examples/api-samples/views/sample14.haml +60 -60
- data/examples/api-samples/views/sample15.haml +51 -51
- data/examples/api-samples/views/sample16.haml +50 -50
- data/examples/api-samples/views/sample17.haml +54 -54
- data/examples/api-samples/views/sample18.haml +143 -143
- data/examples/api-samples/views/sample19.haml +92 -92
- data/examples/api-samples/views/sample20.haml +54 -54
- data/examples/api-samples/views/sample21.haml +123 -123
- data/examples/api-samples/views/sample22.haml +106 -106
- data/examples/api-samples/views/sample25.haml +101 -101
- data/examples/api-samples/views/sample31.haml +2 -2
- data/examples/api-samples/web.rb +20 -20
- data/examples/viewer/Gemfile +5 -5
- data/examples/viewer/app.rb +52 -52
- data/groupdocs.gemspec +31 -31
- data/lib/groupdocs.rb +62 -62
- data/lib/groupdocs/api.rb +6 -6
- data/lib/groupdocs/api/entity.rb +112 -112
- data/lib/groupdocs/api/helpers.rb +11 -11
- data/lib/groupdocs/api/helpers/access_mode_helper.rb +27 -27
- data/lib/groupdocs/api/helpers/access_rights_helper.rb +55 -55
- data/lib/groupdocs/api/helpers/accessor_helper.rb +30 -30
- data/lib/groupdocs/api/helpers/byte_flag_helper.rb +49 -49
- data/lib/groupdocs/api/helpers/credentials_helper.rb +35 -35
- data/lib/groupdocs/api/helpers/mime_helper.rb +21 -21
- data/lib/groupdocs/api/helpers/path_helper.rb +28 -28
- data/lib/groupdocs/api/helpers/rest_helper.rb +99 -99
- data/lib/groupdocs/api/helpers/signature_public_helper.rb +22 -22
- data/lib/groupdocs/api/helpers/status_helper.rb +27 -27
- data/lib/groupdocs/api/helpers/url_helper.rb +101 -101
- data/lib/groupdocs/api/request.rb +91 -91
- data/lib/groupdocs/datasource.rb +249 -249
- data/lib/groupdocs/datasource/field.rb +39 -39
- data/lib/groupdocs/document.rb +1550 -1550
- data/lib/groupdocs/document/annotation.rb +421 -421
- data/lib/groupdocs/document/annotation/reply.rb +173 -173
- data/lib/groupdocs/document/annotation/reviewer.rb +66 -66
- data/lib/groupdocs/document/change.rb +56 -56
- data/lib/groupdocs/document/field.rb +53 -53
- data/lib/groupdocs/document/metadata.rb +32 -32
- data/lib/groupdocs/document/rectangle.rb +18 -18
- data/lib/groupdocs/document/view.rb +36 -36
- data/lib/groupdocs/errors.rb +8 -8
- data/lib/groupdocs/job.rb +468 -468
- data/lib/groupdocs/questionnaire.rb +530 -530
- data/lib/groupdocs/questionnaire/collector.rb +335 -335
- data/lib/groupdocs/questionnaire/execution.rb +181 -181
- data/lib/groupdocs/questionnaire/page.rb +43 -43
- data/lib/groupdocs/questionnaire/question.rb +108 -108
- data/lib/groupdocs/questionnaire/question/answer.rb +15 -15
- data/lib/groupdocs/signature.rb +380 -380
- data/lib/groupdocs/signature/contact.rb +181 -181
- data/lib/groupdocs/signature/envelope.rb +747 -747
- data/lib/groupdocs/signature/envelope/log.rb +20 -20
- data/lib/groupdocs/signature/field.rb +286 -286
- data/lib/groupdocs/signature/field/location.rb +71 -71
- data/lib/groupdocs/signature/form.rb +804 -804
- data/lib/groupdocs/signature/list.rb +92 -92
- data/lib/groupdocs/signature/recipient.rb +79 -79
- data/lib/groupdocs/signature/role.rb +54 -54
- data/lib/groupdocs/signature/shared.rb +6 -6
- data/lib/groupdocs/signature/shared/document_methods.rb +158 -158
- data/lib/groupdocs/signature/shared/entity_fields.rb +76 -76
- data/lib/groupdocs/signature/shared/entity_methods.rb +144 -144
- data/lib/groupdocs/signature/shared/field_methods.rb +354 -354
- data/lib/groupdocs/signature/shared/recipient_methods.rb +75 -75
- data/lib/groupdocs/signature/shared/resource_methods.rb +65 -65
- data/lib/groupdocs/signature/template.rb +124 -124
- data/lib/groupdocs/storage.rb +44 -44
- data/lib/groupdocs/storage/file.rb +432 -432
- data/lib/groupdocs/storage/folder.rb +288 -288
- data/lib/groupdocs/storage/package.rb +48 -48
- data/lib/groupdocs/storage/provider.rb +32 -32
- data/lib/groupdocs/subscription.rb +323 -323
- data/lib/groupdocs/subscription/limit.rb +20 -20
- data/lib/groupdocs/user.rb +955 -930
- data/lib/groupdocs/version.rb +3 -3
- data/spec/groupdocs/api/entity_spec.rb +55 -55
- data/spec/groupdocs/api/helpers/access_mode_helper_spec.rb +21 -21
- data/spec/groupdocs/api/helpers/access_rights_helper_spec.rb +43 -43
- data/spec/groupdocs/api/helpers/accessor_helper_spec.rb +16 -16
- data/spec/groupdocs/api/helpers/byte_flag_helper_spec.rb +23 -23
- data/spec/groupdocs/api/helpers/credentials_helpers_spec.rb +48 -48
- data/spec/groupdocs/api/helpers/mime_helper_spec.rb +16 -16
- data/spec/groupdocs/api/helpers/path_helper_spec.rb +15 -15
- data/spec/groupdocs/api/helpers/rest_helper_spec.rb +161 -161
- data/spec/groupdocs/api/helpers/signature_public_helper_spec.rb +21 -21
- data/spec/groupdocs/api/helpers/status_helper_spec.rb +22 -22
- data/spec/groupdocs/api/helpers/url_helper_spec.rb +112 -112
- data/spec/groupdocs/api/request_spec.rb +112 -112
- data/spec/groupdocs/datasource/field_spec.rb +29 -29
- data/spec/groupdocs/datasource_spec.rb +145 -145
- data/spec/groupdocs/document/annotation/reply_spec.rb +154 -154
- data/spec/groupdocs/document/annotation/reviewer_spec.rb +51 -51
- data/spec/groupdocs/document/annotation_spec.rb +234 -234
- data/spec/groupdocs/document/change_spec.rb +39 -39
- data/spec/groupdocs/document/field_spec.rb +28 -28
- data/spec/groupdocs/document/metadata_spec.rb +21 -21
- data/spec/groupdocs/document/rectangle_spec.rb +14 -14
- data/spec/groupdocs/document/view_spec.rb +33 -33
- data/spec/groupdocs/document_spec.rb +859 -859
- data/spec/groupdocs/errors_spec.rb +7 -7
- data/spec/groupdocs/job_spec.rb +323 -323
- data/spec/groupdocs/questionnaire/collector_spec.rb +197 -197
- data/spec/groupdocs/questionnaire/execution_spec.rb +162 -162
- data/spec/groupdocs/questionnaire/page_spec.rb +47 -47
- data/spec/groupdocs/questionnaire/question/answer_spec.rb +9 -9
- data/spec/groupdocs/questionnaire/question_spec.rb +75 -75
- data/spec/groupdocs/questionnaire_spec.rb +295 -295
- data/spec/groupdocs/signature/contact_spec.rb +142 -142
- data/spec/groupdocs/signature/envelope/log_spec.rb +15 -15
- data/spec/groupdocs/signature/envelope_spec.rb +384 -384
- data/spec/groupdocs/signature/field/location_spec.rb +40 -40
- data/spec/groupdocs/signature/field_spec.rb +235 -235
- data/spec/groupdocs/signature/form_spec.rb +205 -205
- data/spec/groupdocs/signature/list_spec.rb +87 -87
- data/spec/groupdocs/signature/recipient_spec.rb +26 -26
- data/spec/groupdocs/signature/role_spec.rb +47 -47
- data/spec/groupdocs/signature/template_spec.rb +80 -80
- data/spec/groupdocs/signature_spec.rb +194 -194
- data/spec/groupdocs/storage/file_spec.rb +303 -303
- data/spec/groupdocs/storage/folder_spec.rb +270 -270
- data/spec/groupdocs/storage/package_spec.rb +38 -38
- data/spec/groupdocs/storage/provider_spec.rb +21 -21
- data/spec/groupdocs/storage_spec.rb +27 -27
- data/spec/groupdocs/subscription/limit_spec.rb +16 -16
- data/spec/groupdocs/subscription_spec.rb +74 -74
- data/spec/groupdocs/user_spec.rb +257 -257
- data/spec/groupdocs_spec.rb +63 -63
- data/spec/spec_helper.rb +73 -73
- data/spec/support/json/annotation_access_set.json +11 -11
- data/spec/support/json/annotation_collaborators_get.json +16 -16
- data/spec/support/json/annotation_collaborators_set.json +16 -16
- data/spec/support/json/annotation_create.json +12 -12
- data/spec/support/json/annotation_list.json +32 -32
- data/spec/support/json/annotation_marker_move.json +10 -10
- data/spec/support/json/annotation_move.json +8 -8
- data/spec/support/json/annotation_remove.json +9 -9
- data/spec/support/json/annotation_replies_create.json +9 -9
- data/spec/support/json/annotation_replies_get.json +25 -25
- data/spec/support/json/annotation_reviewers_get.json +18 -18
- data/spec/support/json/comparison_changes.json +46 -46
- data/spec/support/json/comparison_compare.json +8 -8
- data/spec/support/json/comparison_document.json +10 -10
- data/spec/support/json/contact_add.json +12 -12
- data/spec/support/json/contacts_get.json +19 -19
- data/spec/support/json/contacts_import.json +8 -8
- data/spec/support/json/datasource_add.json +8 -8
- data/spec/support/json/datasource_get.json +22 -22
- data/spec/support/json/datasource_remove.json +8 -8
- data/spec/support/json/datasource_update.json +8 -8
- data/spec/support/json/delete_account.json +9 -9
- data/spec/support/json/document_access_info_get.json +14 -14
- data/spec/support/json/document_convert.json +8 -8
- data/spec/support/json/document_datasource.json +10 -10
- data/spec/support/json/document_fields.json +34 -34
- data/spec/support/json/document_formats.json +8 -8
- data/spec/support/json/document_metadata.json +15 -15
- data/spec/support/json/document_page_images_get.json +20 -20
- data/spec/support/json/document_questionnaire_create.json +9 -9
- data/spec/support/json/document_questionnaires.json +23 -23
- data/spec/support/json/document_sharers_remove.json +8 -8
- data/spec/support/json/document_sharers_set.json +16 -16
- data/spec/support/json/document_thumbnails.json +24 -24
- data/spec/support/json/document_views.json +32 -32
- data/spec/support/json/envelope_get.json +46 -46
- data/spec/support/json/envelope_logs.json +16 -16
- data/spec/support/json/envelope_recipient_add.json +26 -26
- data/spec/support/json/envelopes_all.json +48 -48
- data/spec/support/json/envelopes_resources.json +31 -31
- data/spec/support/json/file_compress.json +8 -8
- data/spec/support/json/file_copy.json +14 -14
- data/spec/support/json/file_delete.json +5 -5
- data/spec/support/json/file_move.json +14 -14
- data/spec/support/json/file_upload.json +8 -8
- data/spec/support/json/folder_create.json +8 -8
- data/spec/support/json/folder_delete.json +5 -5
- data/spec/support/json/folder_list.json +22 -22
- data/spec/support/json/folder_move.json +8 -8
- data/spec/support/json/folder_sharers_get.json +16 -16
- data/spec/support/json/folder_sharers_remove.json +8 -8
- data/spec/support/json/folder_sharers_set.json +16 -16
- data/spec/support/json/form_get.json +21 -21
- data/spec/support/json/forms_all.json +23 -23
- data/spec/support/json/job_add_url.json +8 -8
- data/spec/support/json/job_create.json +8 -8
- data/spec/support/json/job_documents.json +40 -40
- data/spec/support/json/job_file_add.json +8 -8
- data/spec/support/json/job_get.json +30 -30
- data/spec/support/json/job_update.json +7 -7
- data/spec/support/json/jobs_get.json +58 -58
- data/spec/support/json/list_add.json +12 -12
- data/spec/support/json/lists_get.json +19 -19
- data/spec/support/json/package_create.json +7 -7
- data/spec/support/json/questionnaire_collector.json +17 -17
- data/spec/support/json/questionnaire_collectors.json +38 -38
- data/spec/support/json/questionnaire_collectors_add.json +10 -10
- data/spec/support/json/questionnaire_create.json +10 -10
- data/spec/support/json/questionnaire_datasources.json +26 -26
- data/spec/support/json/questionnaire_execution_add.json +9 -9
- data/spec/support/json/questionnaire_execution_status_set.json +8 -8
- data/spec/support/json/questionnaire_execution_update.json +8 -8
- data/spec/support/json/questionnaire_executions.json +28 -28
- data/spec/support/json/questionnaire_get.json +17 -17
- data/spec/support/json/questionnaire_remove.json +8 -8
- data/spec/support/json/questionnaire_update.json +8 -8
- data/spec/support/json/questionnaires_get.json +40 -40
- data/spec/support/json/sign_documents.json +16 -16
- data/spec/support/json/signature_create.json +12 -12
- data/spec/support/json/signature_field_add.json +25 -25
- data/spec/support/json/signature_fields_get.json +27 -27
- data/spec/support/json/signature_roles_get.json +17 -17
- data/spec/support/json/signatures_get.json +19 -19
- data/spec/support/json/storage_info.json +10 -10
- data/spec/support/json/subscription_plan_get.json +9 -9
- data/spec/support/json/subscription_plans_get.json +17 -17
- data/spec/support/json/template_get.json +35 -35
- data/spec/support/json/template_get_documents.json +15 -15
- data/spec/support/json/template_get_recipients.json +20 -20
- data/spec/support/json/templates_all.json +37 -37
- data/spec/support/json/templates_get.json +21 -21
- data/spec/support/json/update_account.json +10 -10
- data/spec/support/json/user_area.json +67 -67
- data/spec/support/json/user_embed_key.json +38 -38
- data/spec/support/json/user_get_embed_key.json +67 -67
- data/spec/support/json/user_login.json +67 -67
- data/spec/support/json/user_profile_get.json +24 -24
- data/spec/support/json/user_providers.json +31 -31
- data/spec/support/json/user_roles.json +25 -25
- data/spec/support/json/user_users_get.json +27 -27
- data/spec/support/shared_examples/api/entity.rb +39 -39
- data/spec/support/shared_examples/api/helpers/access_mode_helper.rb +11 -11
- data/spec/support/shared_examples/api/helpers/status_helper.rb +11 -11
- data/spec/support/shared_examples/signature/shared/document_methods.rb +68 -68
- data/spec/support/shared_examples/signature/shared/entity_fields.rb +56 -56
- data/spec/support/shared_examples/signature/shared/entity_methods.rb +116 -116
- data/spec/support/shared_examples/signature/shared/field_methods.rb +220 -220
- data/spec/support/shared_examples/signature/shared/recipient_methods.rb +46 -46
- data/spec/support/shared_examples/signature/shared/resource_methods.rb +46 -46
- metadata +35 -55
@@ -1,7 +1,7 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
%w(NoClientIdError NoPrivateKeyError UnsupportedMethodError BadResponseError).each do |error|
|
4
|
-
describe GroupDocs.const_get(error) do
|
5
|
-
it { should be_a(StandardError) }
|
6
|
-
end
|
7
|
-
end
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
%w(NoClientIdError NoPrivateKeyError UnsupportedMethodError BadResponseError).each do |error|
|
4
|
+
describe GroupDocs.const_get(error) do
|
5
|
+
it { should be_a(StandardError) }
|
6
|
+
end
|
7
|
+
end
|
data/spec/groupdocs/job_spec.rb
CHANGED
@@ -1,323 +1,323 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe GroupDocs::Job do
|
4
|
-
|
5
|
-
it_behaves_like GroupDocs::Api::Entity
|
6
|
-
include_examples GroupDocs::Api::Helpers::Status
|
7
|
-
|
8
|
-
describe '.all!' do
|
9
|
-
before(:each) do
|
10
|
-
mock_api_server(load_json('jobs_get'))
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'accepts access credentials hash' do
|
14
|
-
lambda do
|
15
|
-
described_class.all!({}, :client_id => 'client_id', :private_key => 'private_key')
|
16
|
-
end.should_not raise_error()
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'accepts options hash' do
|
20
|
-
lambda do
|
21
|
-
described_class.all!(:page => 1, :count => 2)
|
22
|
-
end.should_not raise_error()
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'returns an array of GroupDocs::Job objects' do
|
26
|
-
jobs = described_class.all!
|
27
|
-
jobs.should be_an(Array)
|
28
|
-
jobs.each do |job|
|
29
|
-
job.should be_a(GroupDocs::Job)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
describe '.get!' do
|
35
|
-
before(:each) do
|
36
|
-
mock_api_server(load_json('job_get'))
|
37
|
-
end
|
38
|
-
|
39
|
-
it 'accepts access credentials hash' do
|
40
|
-
lambda do
|
41
|
-
described_class.get!(1, :client_id => 'client_id', :private_key => 'private_key')
|
42
|
-
end.should_not raise_error()
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'returns GroupDocs::Job object' do
|
46
|
-
described_class.get!(1).should be_a(GroupDocs::Job)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
describe '.create!' do
|
51
|
-
before(:each) do
|
52
|
-
mock_api_server(load_json('job_create'))
|
53
|
-
end
|
54
|
-
|
55
|
-
let(:actions) { %w(convert compress_zip) }
|
56
|
-
|
57
|
-
it 'accepts access credentials hash' do
|
58
|
-
lambda do
|
59
|
-
described_class.create!({ :actions => %w(convert) }, :client_id => 'client_id', :private_key => 'private_key')
|
60
|
-
end.should_not raise_error()
|
61
|
-
end
|
62
|
-
|
63
|
-
it 'raises error if actions are passed' do
|
64
|
-
lambda { described_class.create!({}) }.should raise_error(ArgumentError)
|
65
|
-
end
|
66
|
-
|
67
|
-
it 'convert actions to byte flag' do
|
68
|
-
described_class.should_receive(:convert_actions_to_byte).with(actions).and_return(5)
|
69
|
-
described_class.create!(:actions => actions)
|
70
|
-
end
|
71
|
-
|
72
|
-
it 'returns GroupDocs::Job object' do
|
73
|
-
described_class.create!(:actions => actions).should be_a(GroupDocs::Job)
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
it { should have_accessor(:id) }
|
78
|
-
it { should have_accessor(:guid) }
|
79
|
-
it { should have_accessor(:name) }
|
80
|
-
it { should have_accessor(:priority) }
|
81
|
-
it { should have_accessor(:actions) }
|
82
|
-
it { should have_accessor(:email_results) }
|
83
|
-
it { should have_accessor(:url_only) }
|
84
|
-
it { should have_accessor(:documents) }
|
85
|
-
it { should have_accessor(:requested_time) }
|
86
|
-
|
87
|
-
describe '#documents=' do
|
88
|
-
let(:response) do
|
89
|
-
{
|
90
|
-
:inputs => [
|
91
|
-
{ :id => 1, :guid => 'fhy9yh94u238dgf', :status => 0, :outputs => [] },
|
92
|
-
{ :id => 2, :guid => 'ofh9rhy9rfohf9s', :status => 2, :outputs => [] }
|
93
|
-
]
|
94
|
-
}
|
95
|
-
end
|
96
|
-
|
97
|
-
it 'saves documents as array of GroupDocs::Document objects' do
|
98
|
-
subject.documents = response
|
99
|
-
documents = subject.documents
|
100
|
-
documents.should be_an(Array)
|
101
|
-
documents.each do |document|
|
102
|
-
document.should be_a(GroupDocs::Document)
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
it 'does nothing if nil is passed' do
|
107
|
-
lambda do
|
108
|
-
subject.documents = nil
|
109
|
-
end.should_not change(subject, :documents)
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
describe '#requested_time' do
|
114
|
-
it 'converts timestamp to Time object' do
|
115
|
-
subject.requested_time = 1330450135000
|
116
|
-
subject.requested_time.should == Time.at(1330450135)
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
describe '#actions' do
|
121
|
-
it 'converts actions to human-readable format' do
|
122
|
-
subject.actions = 'Convert, Combine, CompressZip'
|
123
|
-
subject.actions.should == [:convert, :combine, :compress_zip]
|
124
|
-
end
|
125
|
-
|
126
|
-
it 'does nothing if there are no actions' do
|
127
|
-
subject.actions = nil
|
128
|
-
subject.actions.should be_nil
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
describe '#documents!' do
|
133
|
-
before(:each) do
|
134
|
-
mock_api_server(load_json('job_documents'))
|
135
|
-
end
|
136
|
-
|
137
|
-
it 'accepts access credentials hash' do
|
138
|
-
lambda do
|
139
|
-
subject.documents!(:client_id => 'client_id', :private_key => 'private_key')
|
140
|
-
end.should_not raise_error()
|
141
|
-
end
|
142
|
-
|
143
|
-
it 'updates job status' do
|
144
|
-
subject.documents!
|
145
|
-
subject.status.should == :archived
|
146
|
-
end
|
147
|
-
|
148
|
-
it 'returns hash' do
|
149
|
-
subject.documents!.should be_a(Hash)
|
150
|
-
end
|
151
|
-
|
152
|
-
it 'returns array of input documents' do
|
153
|
-
documents = subject.documents![:inputs]
|
154
|
-
documents.should be_an(Array)
|
155
|
-
documents.each do |document|
|
156
|
-
document.should be_a(GroupDocs::Document)
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
|
-
it 'returns array of output documents' do
|
161
|
-
documents = subject.documents![:outputs]
|
162
|
-
documents.should be_an(Array)
|
163
|
-
documents.each do |document|
|
164
|
-
document.should be_a(GroupDocs::Document)
|
165
|
-
end
|
166
|
-
end
|
167
|
-
|
168
|
-
it 'returns empty arrays if there are no documents' do
|
169
|
-
mock_api_server('{ "status": "Ok", "result": {}}')
|
170
|
-
subject.documents!.should == { :inputs => [], :outputs => [] }
|
171
|
-
end
|
172
|
-
end
|
173
|
-
|
174
|
-
describe '#add_document!' do
|
175
|
-
before(:each) do
|
176
|
-
mock_api_server(load_json('job_file_add'))
|
177
|
-
end
|
178
|
-
|
179
|
-
let(:document) do
|
180
|
-
GroupDocs::Document.new(:file => GroupDocs::Storage::File.new)
|
181
|
-
end
|
182
|
-
|
183
|
-
it 'accepts access credentials hash' do
|
184
|
-
lambda do
|
185
|
-
subject.add_document!(document, {}, :client_id => 'client_id', :private_key => 'private_key')
|
186
|
-
end.should_not raise_error()
|
187
|
-
end
|
188
|
-
|
189
|
-
it 'accepts options hash' do
|
190
|
-
lambda do
|
191
|
-
subject.add_document!(document, :output_formats => %w(pdf txt))
|
192
|
-
end.should_not raise_error()
|
193
|
-
end
|
194
|
-
|
195
|
-
it 'raises error if document is not an instance of GroupDocs::Document' do
|
196
|
-
lambda { subject.add_document!('Document') }.should raise_error(ArgumentError)
|
197
|
-
end
|
198
|
-
|
199
|
-
it 'returns document ID' do
|
200
|
-
subject.add_document!(document).should be_an(Integer)
|
201
|
-
end
|
202
|
-
end
|
203
|
-
|
204
|
-
describe '#delete_document!' do
|
205
|
-
before(:each) do
|
206
|
-
mock_api_server('{ "result": {}, "status": "Ok" }')
|
207
|
-
end
|
208
|
-
|
209
|
-
it 'accepts access credentials hash' do
|
210
|
-
lambda do
|
211
|
-
subject.delete_document!('a9ufg8s7dfgsdf', :client_id => 'client_id', :private_key => 'private_key')
|
212
|
-
end.should_not raise_error()
|
213
|
-
end
|
214
|
-
|
215
|
-
it 'returns empty hash' do
|
216
|
-
subject.delete_document!('a9ufg8s7dfgsdf').should be_empty
|
217
|
-
end
|
218
|
-
end
|
219
|
-
|
220
|
-
describe '#add_datasource!' do
|
221
|
-
before(:each) do
|
222
|
-
mock_api_server('{ "status": "Ok", "result": {}}')
|
223
|
-
end
|
224
|
-
let(:document) do
|
225
|
-
GroupDocs::Document.new(:file => GroupDocs::Storage::File.new)
|
226
|
-
end
|
227
|
-
|
228
|
-
let(:datasource) do
|
229
|
-
GroupDocs::DataSource.new
|
230
|
-
end
|
231
|
-
|
232
|
-
it 'accepts access credentials hash' do
|
233
|
-
lambda do
|
234
|
-
subject.add_datasource!(document, datasource, :client_id => 'client_id', :private_key => 'private_key')
|
235
|
-
end.should_not raise_error()
|
236
|
-
end
|
237
|
-
|
238
|
-
it 'raises error if document is not an instance of GroupDocs::Document' do
|
239
|
-
lambda { subject.add_datasource!('Document') }.should raise_error(ArgumentError)
|
240
|
-
end
|
241
|
-
|
242
|
-
it 'raises error if datasource is not an instance of GroupDocs::DataSource' do
|
243
|
-
lambda { subject.add_datasource!(document, 'DataSource') }.should raise_error(ArgumentError)
|
244
|
-
end
|
245
|
-
end
|
246
|
-
|
247
|
-
describe '#add_url!' do
|
248
|
-
before(:each) do
|
249
|
-
mock_api_server(load_json('job_add_url'))
|
250
|
-
end
|
251
|
-
|
252
|
-
let(:url) { 'http://www.google.com' }
|
253
|
-
|
254
|
-
it 'accepts access credentials hash' do
|
255
|
-
lambda do
|
256
|
-
subject.add_url!(url, {}, :client_id => 'client_id', :private_key => 'private_key')
|
257
|
-
end.should_not raise_error()
|
258
|
-
end
|
259
|
-
|
260
|
-
it 'accepts options hash' do
|
261
|
-
lambda do
|
262
|
-
subject.add_url!(url, :out_formats => %W(pdf txt))
|
263
|
-
end.should_not raise_error()
|
264
|
-
end
|
265
|
-
|
266
|
-
it 'returns document ID' do
|
267
|
-
subject.add_url!(url).should be_an(Integer)
|
268
|
-
end
|
269
|
-
end
|
270
|
-
|
271
|
-
describe '#update!' do
|
272
|
-
before(:each) do
|
273
|
-
mock_api_server(load_json('job_update'))
|
274
|
-
end
|
275
|
-
|
276
|
-
it 'accepts access credentials hash' do
|
277
|
-
lambda do
|
278
|
-
subject.update!({}, :client_id => 'client_id', :private_key => 'private_key')
|
279
|
-
end.should_not raise_error()
|
280
|
-
end
|
281
|
-
|
282
|
-
it 'parses status' do
|
283
|
-
subject.should_receive(:parse_status).with(:draft).and_return(-1)
|
284
|
-
subject.update!(:status => :draft)
|
285
|
-
end
|
286
|
-
end
|
287
|
-
|
288
|
-
describe '#delete!' do
|
289
|
-
before(:each) do
|
290
|
-
mock_api_server('{ "status": "Ok", "result": {} }')
|
291
|
-
end
|
292
|
-
|
293
|
-
it 'accepts access credentials hash' do
|
294
|
-
lambda do
|
295
|
-
subject.delete!(:client_id => 'client_id', :private_key => 'private_key')
|
296
|
-
end.should_not raise_error()
|
297
|
-
end
|
298
|
-
end
|
299
|
-
|
300
|
-
describe '#convert_actions_to_byte' do
|
301
|
-
let(:actions) { %w(convert compare) }
|
302
|
-
|
303
|
-
it 'raises error if actions is not an array' do
|
304
|
-
lambda { described_class.convert_actions_to_byte(:export) }.should raise_error(ArgumentError)
|
305
|
-
end
|
306
|
-
|
307
|
-
it 'raises error if action is unknown' do
|
308
|
-
lambda { described_class.convert_actions_to_byte(%w(unknown)) }.should raise_error(ArgumentError)
|
309
|
-
end
|
310
|
-
|
311
|
-
it 'converts each action to Symbol' do
|
312
|
-
actions.each do |action|
|
313
|
-
symbol = action.to_sym
|
314
|
-
action.should_receive(:to_sym).and_return(symbol)
|
315
|
-
end
|
316
|
-
described_class.convert_actions_to_byte(actions)
|
317
|
-
end
|
318
|
-
|
319
|
-
it 'returns correct byte flag' do
|
320
|
-
described_class.convert_actions_to_byte(actions).should == 257
|
321
|
-
end
|
322
|
-
end
|
323
|
-
end
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe GroupDocs::Job do
|
4
|
+
|
5
|
+
it_behaves_like GroupDocs::Api::Entity
|
6
|
+
include_examples GroupDocs::Api::Helpers::Status
|
7
|
+
|
8
|
+
describe '.all!' do
|
9
|
+
before(:each) do
|
10
|
+
mock_api_server(load_json('jobs_get'))
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'accepts access credentials hash' do
|
14
|
+
lambda do
|
15
|
+
described_class.all!({}, :client_id => 'client_id', :private_key => 'private_key')
|
16
|
+
end.should_not raise_error()
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'accepts options hash' do
|
20
|
+
lambda do
|
21
|
+
described_class.all!(:page => 1, :count => 2)
|
22
|
+
end.should_not raise_error()
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'returns an array of GroupDocs::Job objects' do
|
26
|
+
jobs = described_class.all!
|
27
|
+
jobs.should be_an(Array)
|
28
|
+
jobs.each do |job|
|
29
|
+
job.should be_a(GroupDocs::Job)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe '.get!' do
|
35
|
+
before(:each) do
|
36
|
+
mock_api_server(load_json('job_get'))
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'accepts access credentials hash' do
|
40
|
+
lambda do
|
41
|
+
described_class.get!(1, :client_id => 'client_id', :private_key => 'private_key')
|
42
|
+
end.should_not raise_error()
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'returns GroupDocs::Job object' do
|
46
|
+
described_class.get!(1).should be_a(GroupDocs::Job)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe '.create!' do
|
51
|
+
before(:each) do
|
52
|
+
mock_api_server(load_json('job_create'))
|
53
|
+
end
|
54
|
+
|
55
|
+
let(:actions) { %w(convert compress_zip) }
|
56
|
+
|
57
|
+
it 'accepts access credentials hash' do
|
58
|
+
lambda do
|
59
|
+
described_class.create!({ :actions => %w(convert) }, :client_id => 'client_id', :private_key => 'private_key')
|
60
|
+
end.should_not raise_error()
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'raises error if actions are passed' do
|
64
|
+
lambda { described_class.create!({}) }.should raise_error(ArgumentError)
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'convert actions to byte flag' do
|
68
|
+
described_class.should_receive(:convert_actions_to_byte).with(actions).and_return(5)
|
69
|
+
described_class.create!(:actions => actions)
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'returns GroupDocs::Job object' do
|
73
|
+
described_class.create!(:actions => actions).should be_a(GroupDocs::Job)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
it { should have_accessor(:id) }
|
78
|
+
it { should have_accessor(:guid) }
|
79
|
+
it { should have_accessor(:name) }
|
80
|
+
it { should have_accessor(:priority) }
|
81
|
+
it { should have_accessor(:actions) }
|
82
|
+
it { should have_accessor(:email_results) }
|
83
|
+
it { should have_accessor(:url_only) }
|
84
|
+
it { should have_accessor(:documents) }
|
85
|
+
it { should have_accessor(:requested_time) }
|
86
|
+
|
87
|
+
describe '#documents=' do
|
88
|
+
let(:response) do
|
89
|
+
{
|
90
|
+
:inputs => [
|
91
|
+
{ :id => 1, :guid => 'fhy9yh94u238dgf', :status => 0, :outputs => [] },
|
92
|
+
{ :id => 2, :guid => 'ofh9rhy9rfohf9s', :status => 2, :outputs => [] }
|
93
|
+
]
|
94
|
+
}
|
95
|
+
end
|
96
|
+
|
97
|
+
it 'saves documents as array of GroupDocs::Document objects' do
|
98
|
+
subject.documents = response
|
99
|
+
documents = subject.documents
|
100
|
+
documents.should be_an(Array)
|
101
|
+
documents.each do |document|
|
102
|
+
document.should be_a(GroupDocs::Document)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'does nothing if nil is passed' do
|
107
|
+
lambda do
|
108
|
+
subject.documents = nil
|
109
|
+
end.should_not change(subject, :documents)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
describe '#requested_time' do
|
114
|
+
it 'converts timestamp to Time object' do
|
115
|
+
subject.requested_time = 1330450135000
|
116
|
+
subject.requested_time.should == Time.at(1330450135)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
describe '#actions' do
|
121
|
+
it 'converts actions to human-readable format' do
|
122
|
+
subject.actions = 'Convert, Combine, CompressZip'
|
123
|
+
subject.actions.should == [:convert, :combine, :compress_zip]
|
124
|
+
end
|
125
|
+
|
126
|
+
it 'does nothing if there are no actions' do
|
127
|
+
subject.actions = nil
|
128
|
+
subject.actions.should be_nil
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
describe '#documents!' do
|
133
|
+
before(:each) do
|
134
|
+
mock_api_server(load_json('job_documents'))
|
135
|
+
end
|
136
|
+
|
137
|
+
it 'accepts access credentials hash' do
|
138
|
+
lambda do
|
139
|
+
subject.documents!(:client_id => 'client_id', :private_key => 'private_key')
|
140
|
+
end.should_not raise_error()
|
141
|
+
end
|
142
|
+
|
143
|
+
it 'updates job status' do
|
144
|
+
subject.documents!
|
145
|
+
subject.status.should == :archived
|
146
|
+
end
|
147
|
+
|
148
|
+
it 'returns hash' do
|
149
|
+
subject.documents!.should be_a(Hash)
|
150
|
+
end
|
151
|
+
|
152
|
+
it 'returns array of input documents' do
|
153
|
+
documents = subject.documents![:inputs]
|
154
|
+
documents.should be_an(Array)
|
155
|
+
documents.each do |document|
|
156
|
+
document.should be_a(GroupDocs::Document)
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
it 'returns array of output documents' do
|
161
|
+
documents = subject.documents![:outputs]
|
162
|
+
documents.should be_an(Array)
|
163
|
+
documents.each do |document|
|
164
|
+
document.should be_a(GroupDocs::Document)
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
it 'returns empty arrays if there are no documents' do
|
169
|
+
mock_api_server('{ "status": "Ok", "result": {}}')
|
170
|
+
subject.documents!.should == { :inputs => [], :outputs => [] }
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
describe '#add_document!' do
|
175
|
+
before(:each) do
|
176
|
+
mock_api_server(load_json('job_file_add'))
|
177
|
+
end
|
178
|
+
|
179
|
+
let(:document) do
|
180
|
+
GroupDocs::Document.new(:file => GroupDocs::Storage::File.new)
|
181
|
+
end
|
182
|
+
|
183
|
+
it 'accepts access credentials hash' do
|
184
|
+
lambda do
|
185
|
+
subject.add_document!(document, {}, :client_id => 'client_id', :private_key => 'private_key')
|
186
|
+
end.should_not raise_error()
|
187
|
+
end
|
188
|
+
|
189
|
+
it 'accepts options hash' do
|
190
|
+
lambda do
|
191
|
+
subject.add_document!(document, :output_formats => %w(pdf txt))
|
192
|
+
end.should_not raise_error()
|
193
|
+
end
|
194
|
+
|
195
|
+
it 'raises error if document is not an instance of GroupDocs::Document' do
|
196
|
+
lambda { subject.add_document!('Document') }.should raise_error(ArgumentError)
|
197
|
+
end
|
198
|
+
|
199
|
+
it 'returns document ID' do
|
200
|
+
subject.add_document!(document).should be_an(Integer)
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
describe '#delete_document!' do
|
205
|
+
before(:each) do
|
206
|
+
mock_api_server('{ "result": {}, "status": "Ok" }')
|
207
|
+
end
|
208
|
+
|
209
|
+
it 'accepts access credentials hash' do
|
210
|
+
lambda do
|
211
|
+
subject.delete_document!('a9ufg8s7dfgsdf', :client_id => 'client_id', :private_key => 'private_key')
|
212
|
+
end.should_not raise_error()
|
213
|
+
end
|
214
|
+
|
215
|
+
it 'returns empty hash' do
|
216
|
+
subject.delete_document!('a9ufg8s7dfgsdf').should be_empty
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
220
|
+
describe '#add_datasource!' do
|
221
|
+
before(:each) do
|
222
|
+
mock_api_server('{ "status": "Ok", "result": {}}')
|
223
|
+
end
|
224
|
+
let(:document) do
|
225
|
+
GroupDocs::Document.new(:file => GroupDocs::Storage::File.new)
|
226
|
+
end
|
227
|
+
|
228
|
+
let(:datasource) do
|
229
|
+
GroupDocs::DataSource.new
|
230
|
+
end
|
231
|
+
|
232
|
+
it 'accepts access credentials hash' do
|
233
|
+
lambda do
|
234
|
+
subject.add_datasource!(document, datasource, :client_id => 'client_id', :private_key => 'private_key')
|
235
|
+
end.should_not raise_error()
|
236
|
+
end
|
237
|
+
|
238
|
+
it 'raises error if document is not an instance of GroupDocs::Document' do
|
239
|
+
lambda { subject.add_datasource!('Document') }.should raise_error(ArgumentError)
|
240
|
+
end
|
241
|
+
|
242
|
+
it 'raises error if datasource is not an instance of GroupDocs::DataSource' do
|
243
|
+
lambda { subject.add_datasource!(document, 'DataSource') }.should raise_error(ArgumentError)
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
describe '#add_url!' do
|
248
|
+
before(:each) do
|
249
|
+
mock_api_server(load_json('job_add_url'))
|
250
|
+
end
|
251
|
+
|
252
|
+
let(:url) { 'http://www.google.com' }
|
253
|
+
|
254
|
+
it 'accepts access credentials hash' do
|
255
|
+
lambda do
|
256
|
+
subject.add_url!(url, {}, :client_id => 'client_id', :private_key => 'private_key')
|
257
|
+
end.should_not raise_error()
|
258
|
+
end
|
259
|
+
|
260
|
+
it 'accepts options hash' do
|
261
|
+
lambda do
|
262
|
+
subject.add_url!(url, :out_formats => %W(pdf txt))
|
263
|
+
end.should_not raise_error()
|
264
|
+
end
|
265
|
+
|
266
|
+
it 'returns document ID' do
|
267
|
+
subject.add_url!(url).should be_an(Integer)
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
describe '#update!' do
|
272
|
+
before(:each) do
|
273
|
+
mock_api_server(load_json('job_update'))
|
274
|
+
end
|
275
|
+
|
276
|
+
it 'accepts access credentials hash' do
|
277
|
+
lambda do
|
278
|
+
subject.update!({}, :client_id => 'client_id', :private_key => 'private_key')
|
279
|
+
end.should_not raise_error()
|
280
|
+
end
|
281
|
+
|
282
|
+
it 'parses status' do
|
283
|
+
subject.should_receive(:parse_status).with(:draft).and_return(-1)
|
284
|
+
subject.update!(:status => :draft)
|
285
|
+
end
|
286
|
+
end
|
287
|
+
|
288
|
+
describe '#delete!' do
|
289
|
+
before(:each) do
|
290
|
+
mock_api_server('{ "status": "Ok", "result": {} }')
|
291
|
+
end
|
292
|
+
|
293
|
+
it 'accepts access credentials hash' do
|
294
|
+
lambda do
|
295
|
+
subject.delete!(:client_id => 'client_id', :private_key => 'private_key')
|
296
|
+
end.should_not raise_error()
|
297
|
+
end
|
298
|
+
end
|
299
|
+
|
300
|
+
describe '#convert_actions_to_byte' do
|
301
|
+
let(:actions) { %w(convert compare) }
|
302
|
+
|
303
|
+
it 'raises error if actions is not an array' do
|
304
|
+
lambda { described_class.convert_actions_to_byte(:export) }.should raise_error(ArgumentError)
|
305
|
+
end
|
306
|
+
|
307
|
+
it 'raises error if action is unknown' do
|
308
|
+
lambda { described_class.convert_actions_to_byte(%w(unknown)) }.should raise_error(ArgumentError)
|
309
|
+
end
|
310
|
+
|
311
|
+
it 'converts each action to Symbol' do
|
312
|
+
actions.each do |action|
|
313
|
+
symbol = action.to_sym
|
314
|
+
action.should_receive(:to_sym).and_return(symbol)
|
315
|
+
end
|
316
|
+
described_class.convert_actions_to_byte(actions)
|
317
|
+
end
|
318
|
+
|
319
|
+
it 'returns correct byte flag' do
|
320
|
+
described_class.convert_actions_to_byte(actions).should == 257
|
321
|
+
end
|
322
|
+
end
|
323
|
+
end
|