docspring 3.5.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.openapi-generator/FILES +361 -150
- data/.openapi-generator/VERSION +1 -1
- data/.rubocop.yml +1 -1
- data/.travis.yml +1 -1
- data/AGENTS.md +79 -19
- data/CHANGELOG.md +123 -0
- data/Gemfile.lock +7 -7
- data/README.md +60 -53
- data/docs/{RenameFolderData.md → AiFieldNamingLanguage.md} +2 -5
- data/docs/AuthenticationCheck.md +18 -0
- data/docs/{CreateFolderData.md → BarcodeSymbology.md} +2 -5
- data/docs/{CreateWebhookData.md → CheckCharacter.md} +2 -5
- data/docs/Client.md +890 -777
- data/docs/{UpdateWebhookData.md → CombinedFieldType.md} +2 -5
- data/docs/CombinedPdf.md +44 -0
- data/docs/CombinedPdfFiles.md +18 -0
- data/docs/CombinedPdfList.md +20 -0
- data/docs/CombinedPdfSource.md +26 -0
- data/docs/CombinedPdfSourceInput.md +88 -0
- data/docs/CombinedPdfSourcePdf.md +20 -0
- data/docs/CombinedPdfSourceType.md +15 -0
- data/docs/CombinedPdfState.md +15 -0
- data/docs/CopyTemplateRequest.md +22 -0
- data/docs/CreateCombinedPdfRequest.md +26 -0
- data/docs/CreateCustomFileFromUploadRequest.md +18 -0
- data/docs/CreateFolderRequest.md +20 -0
- data/docs/CreateSignatureRequestEventRequest.md +24 -0
- data/docs/CreateSignatureRequestTokenRequest.md +18 -0
- data/docs/CreateSubmissionBatchRequest.md +26 -0
- data/docs/CreateSubmissionRequest.md +36 -0
- data/docs/CreateTemplateRequest.md +94 -0
- data/docs/CreateWebhookRequest.md +38 -0
- data/docs/CustomFile.md +11 -3
- data/docs/CustomFileList.md +20 -0
- data/docs/CustomFileSourcePdf.md +20 -0
- data/docs/ErrorCode.md +15 -0
- data/docs/ErrorDetail.md +26 -0
- data/docs/ErrorInfo.md +32 -0
- data/docs/ErrorResponse.md +1 -3
- data/docs/ExpirationInterval.md +15 -0
- data/docs/FieldComparisonCondition.md +22 -0
- data/docs/FieldComparisonOperator.md +15 -0
- data/docs/FieldDisplayType.md +15 -0
- data/docs/FieldEqualsCondition.md +22 -0
- data/docs/FieldEqualsOperator.md +15 -0
- data/docs/FieldInCondition.md +22 -0
- data/docs/FieldOverride.md +142 -0
- data/docs/FieldPresenceCondition.md +20 -0
- data/docs/FieldPresenceOperator.md +15 -0
- data/docs/FieldRangeCondition.md +24 -0
- data/docs/FieldReimportState.md +15 -0
- data/docs/FieldSetupLogic.md +15 -0
- data/docs/FieldSetupNaming.md +15 -0
- data/docs/FieldSetupSource.md +15 -0
- data/docs/Folder.md +9 -5
- data/docs/FolderList.md +20 -0
- data/docs/GeneratedFile.md +32 -0
- data/docs/GeneratedFileState.md +15 -0
- data/docs/HtmlEngineOptions.md +36 -0
- data/docs/HtmlEngineOptionsInput.md +36 -0
- data/docs/ImageGravity.md +15 -0
- data/docs/ImageScaleType.md +15 -0
- data/docs/ModelCodeLanguage.md +15 -0
- data/docs/MoveFolderRequest.md +18 -0
- data/docs/MoveTemplateRequest.md +18 -0
- data/docs/NumberConditionType.md +15 -0
- data/docs/PageFormat.md +15 -0
- data/docs/PublishTemplateVersionRequest.md +20 -0
- data/docs/RenameFolderRequest.md +18 -0
- data/docs/RestoreTemplateVersionRequest.md +18 -0
- data/docs/ShapeType.md +15 -0
- data/docs/SignatureRequest.md +66 -0
- data/docs/SignatureRequestAuthSecondFactorType.md +15 -0
- data/docs/SignatureRequestAuthType.md +15 -0
- data/docs/SignatureRequestEvent.md +32 -0
- data/docs/SignatureRequestEventType.md +15 -0
- data/docs/SignatureRequestInput.md +46 -0
- data/docs/SignatureRequestMessageType.md +15 -0
- data/docs/SignatureRequestState.md +15 -0
- data/docs/SignatureRequestToken.md +30 -0
- data/docs/SignatureRequestTokenType.md +15 -0
- data/docs/StringConditionType.md +15 -0
- data/docs/Submission.md +41 -47
- data/docs/SubmissionAction.md +6 -8
- data/docs/SubmissionActionState.md +15 -0
- data/docs/SubmissionActionType.md +15 -0
- data/docs/SubmissionBatch.md +16 -10
- data/docs/SubmissionBatchState.md +15 -0
- data/docs/SubmissionFiles.md +22 -0
- data/docs/SubmissionInput.md +38 -0
- data/docs/SubmissionList.md +20 -0
- data/docs/SubmissionSource.md +15 -0
- data/docs/SubmissionSourcePdf.md +20 -0
- data/docs/SubmissionState.md +15 -0
- data/docs/Template.md +73 -107
- data/docs/TemplateActor.md +26 -0
- data/docs/TemplateActorType.md +15 -0
- data/docs/TemplateDefaults.md +56 -0
- data/docs/TemplateDefaultsInput.md +56 -0
- data/docs/TemplateDocument.md +40 -0
- data/docs/TemplateDocumentState.md +15 -0
- data/docs/TemplateFieldDependency.md +26 -0
- data/docs/TemplateFieldDependencyAction.md +15 -0
- data/docs/TemplateFieldDependencyCondition.md +24 -0
- data/docs/TemplateFieldDependencyConditionInput.md +93 -0
- data/docs/TemplateFieldDependencyInput.md +26 -0
- data/docs/TemplateFieldDependencyMatch.md +15 -0
- data/docs/TemplateFieldDependencyOperator.md +15 -0
- data/docs/TemplateFieldLogicStatus.md +15 -0
- data/docs/TemplateFormMode.md +15 -0
- data/docs/TemplateModelCode.md +22 -0
- data/docs/TemplatePageAiError.md +15 -0
- data/docs/TemplatePageAiNamingStatus.md +15 -0
- data/docs/TemplatePageFieldsStatus.md +15 -0
- data/docs/TemplatePageImageStatus.md +15 -0
- data/docs/TemplatePageProcessingStatus.md +26 -0
- data/docs/TemplateSourcePdf.md +24 -0
- data/docs/TemplateSummary.md +90 -0
- data/docs/TemplateSummaryList.md +20 -0
- data/docs/TemplateType.md +15 -0
- data/docs/TemplateVersion.md +24 -0
- data/docs/TemplateVersionType.md +15 -0
- data/docs/TextAlignment.md +15 -0
- data/docs/TextOverflow.md +15 -0
- data/docs/TextVerticalAlignment.md +15 -0
- data/docs/Typeface.md +15 -0
- data/docs/UpdateSignatureRequestRequest.md +34 -0
- data/docs/UpdateTemplateDocumentRequest.md +22 -0
- data/docs/UpdateTemplateRequest.md +80 -0
- data/docs/UpdateWebhookRequest.md +38 -0
- data/docs/UploadMethod.md +15 -0
- data/docs/UploadPresign.md +24 -0
- data/docs/UrlSourcePdf.md +20 -0
- data/docs/Webhook.md +20 -20
- data/docs/WebhookEventType.md +15 -0
- data/docs/WebhookList.md +20 -0
- data/docs/WebhookMode.md +15 -0
- data/docspring.gemspec +3 -3
- data/lib/docspring/api/client.rb +995 -942
- data/lib/docspring/api_client.rb +14 -6
- data/lib/docspring/api_error.rb +3 -3
- data/lib/docspring/api_model_base.rb +88 -0
- data/lib/docspring/configuration.rb +12 -7
- data/lib/docspring/models/ai_field_naming_language.rb +42 -0
- data/lib/docspring/models/authentication_check.rb +185 -0
- data/lib/docspring/models/barcode_symbology.rb +47 -0
- data/lib/docspring/models/check_character.rb +44 -0
- data/lib/docspring/models/combined_field_type.rb +41 -0
- data/lib/docspring/models/{combined_submission.rb → combined_pdf.rb} +228 -206
- data/lib/docspring/models/combined_pdf_files.rb +167 -0
- data/lib/docspring/models/combined_pdf_list.rb +200 -0
- data/lib/docspring/models/{update_webhook_data.rb → combined_pdf_source.rb} +107 -103
- data/lib/docspring/models/combined_pdf_source_input.rb +62 -0
- data/lib/docspring/models/combined_pdf_source_pdf.rb +212 -0
- data/lib/docspring/models/combined_pdf_source_type.rb +44 -0
- data/lib/docspring/models/combined_pdf_state.rb +44 -0
- data/lib/docspring/models/{copy_template_options.rb → copy_template_request.rb} +32 -87
- data/lib/docspring/models/{combine_pdfs_data.rb → create_combined_pdf_request.rb} +60 -123
- data/lib/docspring/models/{create_custom_file_data.rb → create_custom_file_from_upload_request.rb} +29 -96
- data/lib/docspring/models/{move_template_data.rb → create_folder_request.rb} +60 -102
- data/lib/docspring/models/{create_submission_data_request_event_request.rb → create_signature_request_event_request.rb} +50 -122
- data/lib/docspring/models/create_signature_request_token_request.rb +190 -0
- data/lib/docspring/models/{submission_batch_data.rb → create_submission_batch_request.rb} +53 -108
- data/lib/docspring/models/{create_pdf_submission_data.rb → create_submission_request.rb} +97 -149
- data/lib/docspring/models/create_template_request.rb +601 -0
- data/lib/docspring/models/create_webhook_request.rb +368 -0
- data/lib/docspring/models/custom_file.rb +132 -95
- data/lib/docspring/models/custom_file_list.rb +200 -0
- data/lib/docspring/models/custom_file_source_pdf.rb +212 -0
- data/lib/docspring/models/error_code.rb +60 -0
- data/lib/docspring/models/error_detail.rb +242 -0
- data/lib/docspring/models/error_info.rb +316 -0
- data/lib/docspring/models/error_response.rb +28 -138
- data/lib/docspring/models/expiration_interval.rb +42 -0
- data/lib/docspring/models/field_comparison_condition.rb +247 -0
- data/lib/docspring/models/field_comparison_operator.rb +43 -0
- data/lib/docspring/models/field_display_type.rb +45 -0
- data/lib/docspring/models/field_equals_condition.rb +247 -0
- data/lib/docspring/models/field_equals_operator.rb +41 -0
- data/lib/docspring/models/{create_folder_data.rb → field_in_condition.rb} +101 -103
- data/lib/docspring/models/field_override.rb +829 -0
- data/lib/docspring/models/field_presence_condition.rb +234 -0
- data/lib/docspring/models/field_presence_operator.rb +41 -0
- data/lib/docspring/models/field_range_condition.rb +234 -0
- data/lib/docspring/models/field_reimport_state.rb +43 -0
- data/lib/docspring/models/field_setup_logic.rb +41 -0
- data/lib/docspring/models/field_setup_naming.rb +41 -0
- data/lib/docspring/models/field_setup_source.rb +42 -0
- data/lib/docspring/models/folder.rb +134 -93
- data/lib/docspring/models/folder_list.rb +200 -0
- data/lib/docspring/models/generated_file.rb +326 -0
- data/lib/docspring/models/generated_file_state.rb +42 -0
- data/lib/docspring/models/html_engine_options.rb +416 -0
- data/lib/docspring/models/html_engine_options_input.rb +280 -0
- data/lib/docspring/models/image_gravity.rb +48 -0
- data/lib/docspring/models/image_scale_type.rb +42 -0
- data/lib/docspring/models/model_code_language.rb +48 -0
- data/lib/docspring/models/{move_folder_data.rb → move_folder_request.rb} +31 -87
- data/lib/docspring/models/move_template_request.rb +171 -0
- data/lib/docspring/models/number_condition_type.rb +45 -0
- data/lib/docspring/models/page_format.rb +52 -0
- data/lib/docspring/models/{publish_version_data.rb → publish_template_version_request.rb} +64 -99
- data/lib/docspring/models/{rename_folder_data.rb → rename_folder_request.rb} +29 -87
- data/lib/docspring/models/{restore_version_data.rb → restore_template_version_request.rb} +29 -87
- data/lib/docspring/models/shape_type.rb +45 -0
- data/lib/docspring/models/{submission_data_request_show.rb → signature_request.rb} +240 -171
- data/lib/docspring/models/signature_request_auth_second_factor_type.rb +45 -0
- data/lib/docspring/models/signature_request_auth_type.rb +46 -0
- data/lib/docspring/models/{submission_data_request_event.rb → signature_request_event.rb} +137 -122
- data/lib/docspring/models/signature_request_event_type.rb +45 -0
- data/lib/docspring/models/{update_submission_data_request_data.rb → signature_request_input.rb} +156 -173
- data/lib/docspring/models/signature_request_message_type.rb +48 -0
- data/lib/docspring/models/signature_request_state.rb +42 -0
- data/lib/docspring/models/signature_request_token.rb +369 -0
- data/lib/docspring/models/signature_request_token_type.rb +41 -0
- data/lib/docspring/models/string_condition_type.rb +44 -0
- data/lib/docspring/models/submission.rb +374 -339
- data/lib/docspring/models/submission_action.rb +64 -136
- data/lib/docspring/models/submission_action_state.rb +43 -0
- data/lib/docspring/models/submission_action_type.rb +46 -0
- data/lib/docspring/models/submission_batch.rb +157 -112
- data/lib/docspring/models/submission_batch_state.rb +42 -0
- data/lib/docspring/models/submission_files.rb +188 -0
- data/lib/docspring/models/submission_input.rb +274 -0
- data/lib/docspring/models/submission_list.rb +200 -0
- data/lib/docspring/models/submission_source.rb +43 -0
- data/lib/docspring/models/submission_source_pdf.rb +212 -0
- data/lib/docspring/models/submission_state.rb +52 -0
- data/lib/docspring/models/template.rb +485 -766
- data/lib/docspring/models/{add_fields_data.rb → template_actor.rb} +119 -105
- data/lib/docspring/models/template_actor_type.rb +42 -0
- data/lib/docspring/models/template_defaults.rb +395 -0
- data/lib/docspring/models/template_defaults_input.rb +395 -0
- data/lib/docspring/models/template_document.rb +396 -0
- data/lib/docspring/models/template_document_state.rb +44 -0
- data/lib/docspring/models/{success_error_response.rb → template_field_dependency.rb} +122 -114
- data/lib/docspring/models/template_field_dependency_action.rb +42 -0
- data/lib/docspring/models/{create_pdf_template.rb → template_field_dependency_condition.rb} +116 -103
- data/lib/docspring/models/template_field_dependency_condition_input.rb +67 -0
- data/lib/docspring/models/template_field_dependency_input.rb +285 -0
- data/lib/docspring/models/template_field_dependency_match.rb +41 -0
- data/lib/docspring/models/template_field_dependency_operator.rb +49 -0
- data/lib/docspring/models/template_field_logic_status.rb +44 -0
- data/lib/docspring/models/template_form_mode.rb +42 -0
- data/lib/docspring/models/{template_model_code_response.rb → template_model_code.rb} +37 -96
- data/lib/docspring/models/template_page_ai_error.rb +43 -0
- data/lib/docspring/models/template_page_ai_naming_status.rb +41 -0
- data/lib/docspring/models/template_page_fields_status.rb +44 -0
- data/lib/docspring/models/template_page_image_status.rb +41 -0
- data/lib/docspring/models/template_page_processing_status.rb +275 -0
- data/lib/docspring/models/{create_webhook_data.rb → template_source_pdf.rb} +92 -103
- data/lib/docspring/models/{template_preview.rb → template_summary.rb} +436 -589
- data/lib/docspring/models/template_summary_list.rb +200 -0
- data/lib/docspring/models/template_type.rb +41 -0
- data/lib/docspring/models/template_version.rb +238 -0
- data/lib/docspring/models/template_version_type.rb +42 -0
- data/lib/docspring/models/text_alignment.rb +43 -0
- data/lib/docspring/models/text_overflow.rb +41 -0
- data/lib/docspring/models/text_vertical_alignment.rb +42 -0
- data/lib/docspring/models/typeface.rb +56 -0
- data/lib/docspring/models/{create_submission_data_request_data.rb → update_signature_request_request.rb} +72 -196
- data/lib/docspring/models/update_template_document_request.rb +205 -0
- data/lib/docspring/models/update_template_request.rb +514 -0
- data/lib/docspring/models/update_webhook_request.rb +344 -0
- data/lib/docspring/models/upload_method.rb +40 -0
- data/lib/docspring/models/{upload_presign_response.rb → upload_presign.rb} +93 -140
- data/lib/docspring/models/url_source_pdf.rb +212 -0
- data/lib/docspring/models/webhook.rb +97 -107
- data/lib/docspring/models/webhook_event_type.rb +64 -0
- data/lib/docspring/models/webhook_list.rb +200 -0
- data/lib/docspring/models/webhook_mode.rb +41 -0
- data/lib/docspring/request_schemas.json +3187 -0
- data/lib/docspring/request_validator.rb +396 -0
- data/lib/docspring/version.rb +4 -4
- data/lib/docspring.rb +125 -53
- data/spec/api/client_spec.rb +304 -277
- data/spec/models/ai_field_naming_language_spec.rb +30 -0
- data/spec/models/authentication_check_spec.rb +36 -0
- data/spec/models/barcode_symbology_spec.rb +30 -0
- data/spec/models/check_character_spec.rb +30 -0
- data/spec/models/combined_field_type_spec.rb +30 -0
- data/spec/models/combined_pdf_files_spec.rb +36 -0
- data/spec/models/combined_pdf_list_spec.rb +42 -0
- data/spec/models/combined_pdf_source_input_spec.rb +44 -0
- data/spec/models/combined_pdf_source_pdf_spec.rb +42 -0
- data/spec/models/{submission_data_request_token_spec.rb → combined_pdf_source_spec.rb} +18 -12
- data/spec/models/combined_pdf_source_type_spec.rb +30 -0
- data/spec/models/{combined_submission_spec.rb → combined_pdf_spec.rb} +20 -24
- data/spec/models/combined_pdf_state_spec.rb +30 -0
- data/spec/models/{copy_template_options_spec.rb → copy_template_request_spec.rb} +9 -9
- data/spec/models/{combine_pdfs_data_spec.rb → create_combined_pdf_request_spec.rb} +12 -18
- data/spec/models/{create_custom_file_data_spec.rb → create_custom_file_from_upload_request_spec.rb} +9 -9
- data/spec/models/{move_template_data_spec.rb → create_folder_request_spec.rb} +11 -11
- data/spec/models/{list_submissions_response_spec.rb → create_signature_request_event_request_spec.rb} +18 -12
- data/spec/models/create_signature_request_token_request_spec.rb +36 -0
- data/spec/models/{submission_batch_data_spec.rb → create_submission_batch_request_spec.rb} +13 -13
- data/spec/models/{create_pdf_submission_data_spec.rb → create_submission_request_spec.rb} +24 -18
- data/spec/models/{template_preview_spec.rb → create_template_request_spec.rb} +40 -118
- data/spec/models/create_webhook_request_spec.rb +96 -0
- data/spec/models/custom_file_list_spec.rb +42 -0
- data/spec/models/custom_file_source_pdf_spec.rb +42 -0
- data/spec/models/custom_file_spec.rb +29 -5
- data/spec/models/error_code_spec.rb +30 -0
- data/spec/models/{create_submission_response_spec.rb → error_detail_spec.rb} +14 -18
- data/spec/models/{batch_generate_pdfs201_response_spec.rb → error_info_spec.rb} +27 -19
- data/spec/models/error_response_spec.rb +4 -14
- data/spec/models/expiration_interval_spec.rb +30 -0
- data/spec/models/field_comparison_condition_spec.rb +48 -0
- data/spec/models/field_comparison_operator_spec.rb +30 -0
- data/spec/models/field_display_type_spec.rb +30 -0
- data/spec/models/field_equals_condition_spec.rb +48 -0
- data/spec/models/field_equals_operator_spec.rb +30 -0
- data/spec/models/field_in_condition_spec.rb +48 -0
- data/spec/models/field_override_spec.rb +408 -0
- data/spec/models/field_presence_condition_spec.rb +42 -0
- data/spec/models/field_presence_operator_spec.rb +30 -0
- data/spec/models/field_range_condition_spec.rb +54 -0
- data/spec/models/field_reimport_state_spec.rb +30 -0
- data/spec/models/field_setup_logic_spec.rb +30 -0
- data/spec/models/field_setup_naming_spec.rb +30 -0
- data/spec/models/field_setup_source_spec.rb +30 -0
- data/spec/models/folder_list_spec.rb +42 -0
- data/spec/models/folder_spec.rb +16 -4
- data/spec/models/generated_file_spec.rb +78 -0
- data/spec/models/generated_file_state_spec.rb +30 -0
- data/spec/models/html_engine_options_input_spec.rb +90 -0
- data/spec/models/html_engine_options_spec.rb +90 -0
- data/spec/models/image_gravity_spec.rb +30 -0
- data/spec/models/image_scale_type_spec.rb +30 -0
- data/spec/models/model_code_language_spec.rb +30 -0
- data/spec/models/move_folder_request_spec.rb +36 -0
- data/spec/models/move_template_request_spec.rb +36 -0
- data/spec/models/number_condition_type_spec.rb +30 -0
- data/spec/models/page_format_spec.rb +30 -0
- data/spec/models/{publish_version_data_spec.rb → publish_template_version_request_spec.rb} +11 -11
- data/spec/models/{rename_folder_data_spec.rb → rename_folder_request_spec.rb} +9 -9
- data/spec/models/restore_template_version_request_spec.rb +36 -0
- data/spec/models/shape_type_spec.rb +30 -0
- data/spec/models/signature_request_auth_second_factor_type_spec.rb +30 -0
- data/spec/models/signature_request_auth_type_spec.rb +30 -0
- data/spec/models/{submission_data_request_event_spec.rb → signature_request_event_spec.rb} +16 -18
- data/spec/models/signature_request_event_type_spec.rb +30 -0
- data/spec/models/{create_submission_data_request_data_spec.rb → signature_request_input_spec.rb} +28 -30
- data/spec/models/signature_request_message_type_spec.rb +30 -0
- data/spec/models/{submission_data_request_show_spec.rb → signature_request_spec.rb} +31 -31
- data/spec/models/signature_request_state_spec.rb +30 -0
- data/spec/models/signature_request_token_spec.rb +72 -0
- data/spec/models/signature_request_token_type_spec.rb +30 -0
- data/spec/models/string_condition_type_spec.rb +30 -0
- data/spec/models/submission_action_spec.rb +4 -22
- data/spec/models/submission_action_state_spec.rb +30 -0
- data/spec/models/submission_action_type_spec.rb +30 -0
- data/spec/models/submission_batch_spec.rb +27 -13
- data/spec/models/submission_batch_state_spec.rb +30 -0
- data/spec/models/submission_files_spec.rb +48 -0
- data/spec/models/submission_input_spec.rb +96 -0
- data/spec/models/submission_list_spec.rb +42 -0
- data/spec/models/submission_source_pdf_spec.rb +42 -0
- data/spec/models/submission_source_spec.rb +30 -0
- data/spec/models/submission_spec.rb +26 -56
- data/spec/models/submission_state_spec.rb +30 -0
- data/spec/models/template_actor_spec.rb +60 -0
- data/spec/models/template_actor_type_spec.rb +30 -0
- data/spec/models/{submission_data_request_spec.rb → template_defaults_input_spec.rb} +29 -53
- data/spec/models/template_defaults_spec.rb +150 -0
- data/spec/models/{json_schema_spec.rb → template_document_spec.rb} +21 -21
- data/spec/models/template_document_state_spec.rb +30 -0
- data/spec/models/template_field_dependency_action_spec.rb +30 -0
- data/spec/models/template_field_dependency_condition_input_spec.rb +44 -0
- data/spec/models/template_field_dependency_condition_spec.rb +54 -0
- data/spec/models/template_field_dependency_input_spec.rb +60 -0
- data/spec/models/template_field_dependency_match_spec.rb +30 -0
- data/spec/models/template_field_dependency_operator_spec.rb +30 -0
- data/spec/models/template_field_dependency_spec.rb +60 -0
- data/spec/models/template_field_logic_status_spec.rb +30 -0
- data/spec/models/template_form_mode_spec.rb +30 -0
- data/spec/models/{template_model_code_response_spec.rb → template_model_code_spec.rb} +9 -13
- data/spec/models/template_page_ai_error_spec.rb +30 -0
- data/spec/models/template_page_ai_naming_status_spec.rb +30 -0
- data/spec/models/template_page_fields_status_spec.rb +30 -0
- data/spec/models/template_page_image_status_spec.rb +30 -0
- data/spec/models/template_page_processing_status_spec.rb +60 -0
- data/spec/models/template_source_pdf_spec.rb +54 -0
- data/spec/models/template_spec.rb +40 -154
- data/spec/models/template_summary_list_spec.rb +42 -0
- data/spec/models/template_summary_spec.rb +252 -0
- data/spec/models/template_type_spec.rb +30 -0
- data/spec/models/template_version_spec.rb +54 -0
- data/spec/models/template_version_type_spec.rb +30 -0
- data/spec/models/text_alignment_spec.rb +30 -0
- data/spec/models/text_overflow_spec.rb +30 -0
- data/spec/models/text_vertical_alignment_spec.rb +30 -0
- data/spec/models/typeface_spec.rb +30 -0
- data/spec/models/{submission_batch_with_submissions_spec.rb → update_signature_request_request_spec.rb} +18 -22
- data/spec/models/update_template_document_request_spec.rb +48 -0
- data/spec/models/{submission_preview_spec.rb → update_template_request_spec.rb} +81 -41
- data/spec/models/update_webhook_request_spec.rb +96 -0
- data/spec/models/upload_method_spec.rb +30 -0
- data/spec/models/{upload_presign_response_spec.rb → upload_presign_spec.rb} +13 -17
- data/spec/models/url_source_pdf_spec.rb +42 -0
- data/spec/models/webhook_event_type_spec.rb +30 -0
- data/spec/models/webhook_list_spec.rb +42 -0
- data/spec/models/webhook_mode_spec.rb +30 -0
- data/spec/models/webhook_spec.rb +4 -8
- data/spec/spec_helper.rb +3 -3
- metadata +485 -202
- data/docs/AddFieldsData.md +0 -18
- data/docs/BatchGeneratePdfs201Response.md +0 -28
- data/docs/CombinePdfsData.md +0 -28
- data/docs/CombinedSubmission.md +0 -44
- data/docs/CombinedSubmissionAction.md +0 -30
- data/docs/CopyTemplateOptions.md +0 -22
- data/docs/CreateCombinedSubmissionResponse.md +0 -26
- data/docs/CreateCustomFileData.md +0 -18
- data/docs/CreateCustomFileResponse.md +0 -24
- data/docs/CreateHtmlTemplate.md +0 -18
- data/docs/CreatePdfSubmissionData.md +0 -34
- data/docs/CreatePdfTemplate.md +0 -18
- data/docs/CreateSubmissionDataRequestData.md +0 -44
- data/docs/CreateSubmissionDataRequestEventRequest.md +0 -24
- data/docs/CreateSubmissionDataRequestEventResponse.md +0 -24
- data/docs/CreateSubmissionDataRequestResponse.md +0 -24
- data/docs/CreateSubmissionDataRequestTokenResponse.md +0 -24
- data/docs/CreateSubmissionResponse.md +0 -26
- data/docs/ErrorOrMultipleErrorsResponse.md +0 -22
- data/docs/ForbiddenErrorResponse.md +0 -22
- data/docs/JsonSchema.md +0 -40
- data/docs/ListSubmissionsResponse.md +0 -22
- data/docs/MoveFolderData.md +0 -18
- data/docs/MoveTemplateData.md +0 -20
- data/docs/MultipleErrorsResponse.md +0 -20
- data/docs/PublishVersionData.md +0 -20
- data/docs/RestoreVersionData.md +0 -18
- data/docs/Submission422Response.md +0 -24
- data/docs/SubmissionBatchData.md +0 -26
- data/docs/SubmissionBatchWithSubmissions.md +0 -34
- data/docs/SubmissionDataRequest.md +0 -60
- data/docs/SubmissionDataRequestEvent.md +0 -30
- data/docs/SubmissionDataRequestShow.md +0 -62
- data/docs/SubmissionDataRequestToken.md +0 -24
- data/docs/SubmissionPreview.md +0 -64
- data/docs/SuccessErrorResponse.md +0 -20
- data/docs/SuccessMultipleErrorsResponse.md +0 -20
- data/docs/TemplateAddFieldsResponse.md +0 -22
- data/docs/TemplateDeleteResponse.md +0 -24
- data/docs/TemplateModelCodeResponse.md +0 -22
- data/docs/TemplatePreview.md +0 -116
- data/docs/TemplatePublishVersionResponse.md +0 -22
- data/docs/UpdateHtmlTemplate.md +0 -18
- data/docs/UpdatePdfTemplate.md +0 -18
- data/docs/UpdateSubmissionDataRequestData.md +0 -42
- data/docs/UploadPresignResponse.md +0 -24
- data/lib/docspring/models/batch_generate_pdfs201_response.rb +0 -352
- data/lib/docspring/models/combined_submission_action.rb +0 -384
- data/lib/docspring/models/create_combined_submission_response.rb +0 -324
- data/lib/docspring/models/create_custom_file_response.rb +0 -314
- data/lib/docspring/models/create_html_template.rb +0 -243
- data/lib/docspring/models/create_submission_data_request_event_response.rb +0 -314
- data/lib/docspring/models/create_submission_data_request_response.rb +0 -314
- data/lib/docspring/models/create_submission_data_request_token_response.rb +0 -314
- data/lib/docspring/models/create_submission_response.rb +0 -324
- data/lib/docspring/models/error_or_multiple_errors_response.rb +0 -290
- data/lib/docspring/models/forbidden_error_response.rb +0 -323
- data/lib/docspring/models/json_schema.rb +0 -329
- data/lib/docspring/models/list_submissions_response.rb +0 -283
- data/lib/docspring/models/multiple_errors_response.rb +0 -296
- data/lib/docspring/models/submission422_response.rb +0 -299
- data/lib/docspring/models/submission_batch_with_submissions.rb +0 -433
- data/lib/docspring/models/submission_data_request.rb +0 -570
- data/lib/docspring/models/submission_data_request_token.rb +0 -279
- data/lib/docspring/models/submission_preview.rb +0 -637
- data/lib/docspring/models/success_multiple_errors_response.rb +0 -279
- data/lib/docspring/models/template_add_fields_response.rb +0 -290
- data/lib/docspring/models/template_delete_response.rb +0 -300
- data/lib/docspring/models/template_publish_version_response.rb +0 -305
- data/lib/docspring/models/update_html_template.rb +0 -243
- data/lib/docspring/models/update_pdf_template.rb +0 -243
- data/spec/models/add_fields_data_spec.rb +0 -36
- data/spec/models/combined_submission_action_spec.rb +0 -84
- data/spec/models/create_combined_submission_response_spec.rb +0 -64
- data/spec/models/create_custom_file_response_spec.rb +0 -58
- data/spec/models/create_folder_data_spec.rb +0 -36
- data/spec/models/create_html_template_spec.rb +0 -36
- data/spec/models/create_pdf_template_spec.rb +0 -36
- data/spec/models/create_submission_data_request_event_request_spec.rb +0 -62
- data/spec/models/create_submission_data_request_event_response_spec.rb +0 -58
- data/spec/models/create_submission_data_request_response_spec.rb +0 -58
- data/spec/models/create_submission_data_request_token_response_spec.rb +0 -58
- data/spec/models/create_webhook_data_spec.rb +0 -36
- data/spec/models/error_or_multiple_errors_response_spec.rb +0 -52
- data/spec/models/forbidden_error_response_spec.rb +0 -56
- data/spec/models/move_folder_data_spec.rb +0 -36
- data/spec/models/multiple_errors_response_spec.rb +0 -46
- data/spec/models/restore_version_data_spec.rb +0 -36
- data/spec/models/submission422_response_spec.rb +0 -58
- data/spec/models/success_error_response_spec.rb +0 -46
- data/spec/models/success_multiple_errors_response_spec.rb +0 -46
- data/spec/models/template_add_fields_response_spec.rb +0 -52
- data/spec/models/template_delete_response_spec.rb +0 -58
- data/spec/models/template_publish_version_response_spec.rb +0 -52
- data/spec/models/update_html_template_spec.rb +0 -36
- data/spec/models/update_pdf_template_spec.rb +0 -36
- data/spec/models/update_submission_data_request_data_spec.rb +0 -116
- data/spec/models/update_webhook_data_spec.rb +0 -36
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'json'
|
|
4
|
+
|
|
5
|
+
module DocSpring
|
|
6
|
+
# Raised before a request is sent when the API would reject it with a 422. `details` are the API's error details:
|
|
7
|
+
# hashes with 'code', 'message' and a 'pointer' into the body (or a 'parameter' for a query parameter).
|
|
8
|
+
class ValidationError < ArgumentError
|
|
9
|
+
attr_reader :details
|
|
10
|
+
|
|
11
|
+
def initialize(details)
|
|
12
|
+
@details = details
|
|
13
|
+
shown = details.first(3).map do |detail|
|
|
14
|
+
subject = detail['pointer'] == '' ? 'the request body' : (detail['pointer'] || detail['parameter'])
|
|
15
|
+
"#{subject} #{detail['message']}"
|
|
16
|
+
end
|
|
17
|
+
message = "Invalid request: #{shown.join('; ')}"
|
|
18
|
+
message += " (and #{details.size - 3} more)" if details.size > 3
|
|
19
|
+
super(message)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Checks a request against API v2's request schemas (request_schemas.json, the schemas the API validates requests
|
|
24
|
+
# with) before it's sent, and says what the API would say about it. api_clients/validator_conformance checks that it
|
|
25
|
+
# agrees with the API.
|
|
26
|
+
module RequestValidator
|
|
27
|
+
TYPE_NAMES = {
|
|
28
|
+
'string' => 'a string',
|
|
29
|
+
'integer' => 'an integer',
|
|
30
|
+
'number' => 'a number',
|
|
31
|
+
'boolean' => 'true or false',
|
|
32
|
+
'object' => 'an object',
|
|
33
|
+
'array' => 'an array',
|
|
34
|
+
'null' => 'null',
|
|
35
|
+
}.freeze
|
|
36
|
+
# What a multipart body's file field holds when the API checks it
|
|
37
|
+
FILE_PLACEHOLDER = '(file)'
|
|
38
|
+
# A date and time as the API reads it (Ruby's DateTime.rfc3339, then json_schemer's checks)
|
|
39
|
+
DATE_TIME = /\A\s*(-?\d{4})-(\d{2})-(\d{2})[Tt\s](\d{2}):(\d{2}):(\d{2})(?:\.\d+)?(?:[Zz]|([+-])(\d{2}):(\d{2}))\z/
|
|
40
|
+
# An absolute URI as the API reads it (RFC 3986, as Ruby's URI parser has it), a little looser for IP addresses
|
|
41
|
+
# Lookaheads check the escapes, so only character classes repeat: Java and PHP recurse on each repetition of a group
|
|
42
|
+
URI_SEGMENT = '[%!$&-.0-9:;=@A-Z_a-z~/]'
|
|
43
|
+
URI_PATTERN = Regexp.new(
|
|
44
|
+
'\A(?![^?#]*%(?![0-9A-Fa-f]{2}))[A-Za-z][+\-.0-9A-Za-z]*:' \
|
|
45
|
+
'(?://(?:[%!$&-.0-9:;=A-Z_a-z~]*@)?' \
|
|
46
|
+
'(?:\[(?:[0-9A-Fa-f:.]+|[vV][0-9A-Fa-f]+\.[!$&-.0-9:;=A-Z_a-z~]+)\]|[%!$&-.0-9;=A-Z_a-z~]*)' \
|
|
47
|
+
"(?::[0-9]*)?(?:/#{URI_SEGMENT}*)?" \
|
|
48
|
+
"|/(?:(?!/)#{URI_SEGMENT}+)?" \
|
|
49
|
+
"|(?!/)#{URI_SEGMENT}+" \
|
|
50
|
+
'|)' \
|
|
51
|
+
'(?:\?[^#]*)?' \
|
|
52
|
+
'(?:#(?![^#]*%(?![0-9A-Fa-f]{2}))[%!$&-.0-9:;=@A-Z_a-z~/?]*)?\z'
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
class << self
|
|
56
|
+
def schemas
|
|
57
|
+
@schemas ||= JSON.parse(File.read(File.expand_path('request_schemas.json', __dir__)))
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Raises a ValidationError when the API would reject the request. `operation` is the SDK method's name
|
|
61
|
+
# (:"Client.create_submission"); `body` is the JSON the SDK sends, or a multipart body's params.
|
|
62
|
+
def validate!(operation, query: {}, body: nil)
|
|
63
|
+
operation_id = operation_ids[operation.to_s.split('.').last]
|
|
64
|
+
return unless operation_id
|
|
65
|
+
|
|
66
|
+
details = errors(operation_id, query: query, body: body)
|
|
67
|
+
raise ValidationError, details if details.any?
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# The details for a request to an operation (`createSubmission`)
|
|
71
|
+
def errors(operation_id, query: {}, body: nil)
|
|
72
|
+
entry = schemas['operations'].fetch(operation_id)
|
|
73
|
+
|
|
74
|
+
details = []
|
|
75
|
+
if entry['query'] && query && !query.empty?
|
|
76
|
+
params = entry['query']
|
|
77
|
+
schema = {
|
|
78
|
+
'type' => 'object',
|
|
79
|
+
'properties' => params.transform_values { |param| param['schema'] },
|
|
80
|
+
'required' => params.select { |_name, param| param['required'] }.keys,
|
|
81
|
+
'additionalProperties' => false,
|
|
82
|
+
}
|
|
83
|
+
details.concat(validate_params(schema, stringify_keys(query), 'query'))
|
|
84
|
+
end
|
|
85
|
+
if entry['body'] && !body.nil?
|
|
86
|
+
details.concat(
|
|
87
|
+
if entry['body']['mediaType'] == 'multipart/form-data'
|
|
88
|
+
validate_params(entry['body']['schema'], multipart_values(body), 'body')
|
|
89
|
+
else
|
|
90
|
+
validate(entry['body']['schema'], body.is_a?(String) ? JSON.parse(body) : body, 'body')
|
|
91
|
+
end
|
|
92
|
+
)
|
|
93
|
+
end
|
|
94
|
+
details
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# The details for `data` checked against `schema` at `location` ('body' or 'query')
|
|
98
|
+
def validate(schema, data, location)
|
|
99
|
+
details = []
|
|
100
|
+
check(schema, data, '', location, details)
|
|
101
|
+
details
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
private
|
|
105
|
+
|
|
106
|
+
def operation_ids
|
|
107
|
+
@operation_ids ||= schemas['operations'].keys.to_h do |operation_id|
|
|
108
|
+
[operation_id.gsub(/([A-Z])/) { "_#{Regexp.last_match(1).downcase}" }, operation_id]
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def stringify_keys(hash)
|
|
113
|
+
hash.to_h { |key, value| [key.to_s, value] }
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def multipart_values(body)
|
|
117
|
+
stringify_keys(body).transform_values do |value|
|
|
118
|
+
value.respond_to?(:read) || value.respond_to?(:path) ? FILE_PLACEHOLDER : value
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# Query and multipart params arrive as strings, which the API converts where the schema types them
|
|
123
|
+
def validate_params(schema, data, location)
|
|
124
|
+
properties = schema['properties'] || {}
|
|
125
|
+
converted = data.to_h { |key, value| [key, convert_param(value, properties[key])] }
|
|
126
|
+
validate(schema, converted, location)
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def convert_param(value, schema)
|
|
130
|
+
return value unless schema.is_a?(Hash)
|
|
131
|
+
|
|
132
|
+
types = Array(schema['type'])
|
|
133
|
+
return value.map { |item| convert_param(item, schema['items']) } if value.is_a?(Array) && types.include?('array')
|
|
134
|
+
return value unless value.is_a?(String)
|
|
135
|
+
|
|
136
|
+
if types.include?('integer') && value.match?(/\A-?\d+\z/)
|
|
137
|
+
Integer(value, 10)
|
|
138
|
+
elsif types.include?('number') && value.match?(/\A-?\d+(?:\.\d+)?\z/)
|
|
139
|
+
value.include?('.') ? Float(value) : Integer(value, 10)
|
|
140
|
+
elsif types.include?('boolean') && %w[true false].include?(value)
|
|
141
|
+
value == 'true'
|
|
142
|
+
else
|
|
143
|
+
value
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def resolve(schema)
|
|
148
|
+
while schema.is_a?(Hash) && schema['$ref']
|
|
149
|
+
name = schema['$ref'].delete_prefix('#/components/schemas/')
|
|
150
|
+
schema = schemas['components']['schemas'].fetch(name)
|
|
151
|
+
end
|
|
152
|
+
schema
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def check(schema, data, pointer, location, details)
|
|
156
|
+
schema = resolve(schema)
|
|
157
|
+
return unless schema.is_a?(Hash)
|
|
158
|
+
return check_union(schema, data, pointer, location, details) if schema['discriminator']
|
|
159
|
+
|
|
160
|
+
if schema.key?('type') && Array(schema['type']).none? { |type| type?(data, type) }
|
|
161
|
+
message = pointer.empty? && location == 'body' ? 'must be a JSON object' : type_message(Array(schema['type']))
|
|
162
|
+
details << detail(location, pointer, 'type', message)
|
|
163
|
+
end
|
|
164
|
+
if schema.key?('enum') && schema['enum'].none? { |value| json_equal?(value, data) }
|
|
165
|
+
details << detail(location, pointer, 'enum', "must be one of: #{schema['enum'].map { |value| to_json(value) }.join(', ')}")
|
|
166
|
+
end
|
|
167
|
+
if schema.key?('const') && !json_equal?(schema['const'], data)
|
|
168
|
+
details << detail(location, pointer, 'const', "must be #{to_json(schema['const'])}")
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
case data
|
|
172
|
+
when String then check_string(schema, data, pointer, location, details)
|
|
173
|
+
when Numeric then check_number(schema, data, pointer, location, details)
|
|
174
|
+
when Array then check_array(schema, data, pointer, location, details)
|
|
175
|
+
when Hash then check_object(schema, data, pointer, location, details)
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
# A union (oneOf with a discriminator): the discriminator property's value picks the variant, and only that one is
|
|
180
|
+
# checked, as the API does
|
|
181
|
+
def check_union(schema, data, pointer, location, details)
|
|
182
|
+
return details << detail(location, pointer, 'type', "must be #{TYPE_NAMES['object']}") unless data.is_a?(Hash)
|
|
183
|
+
|
|
184
|
+
name = schema['discriminator']['propertyName']
|
|
185
|
+
child = "#{pointer}/#{escape(name)}"
|
|
186
|
+
return details << detail(location, child, 'required', 'is required') unless data.key?(name)
|
|
187
|
+
|
|
188
|
+
# [value, $ref] pairs, in the order the API lists them
|
|
189
|
+
mapping = schema['discriminator']['mapping']
|
|
190
|
+
variant = mapping.find { |value, _ref| value == data[name] } if data[name].is_a?(String)
|
|
191
|
+
return check({ '$ref' => variant[1] }, data, pointer, location, details) if variant
|
|
192
|
+
|
|
193
|
+
details << detail(location, child, 'enum', "must be one of: #{mapping.map { |value, _ref| to_json(value) }.join(', ')}")
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
def check_string(schema, data, pointer, location, details)
|
|
197
|
+
length = data.length
|
|
198
|
+
if schema['minLength'] && length < schema['minLength']
|
|
199
|
+
details << detail(
|
|
200
|
+
location,
|
|
201
|
+
pointer,
|
|
202
|
+
'minLength',
|
|
203
|
+
at_least(schema['minLength'], "must be at least #{count(schema['minLength'], 'character')}")
|
|
204
|
+
)
|
|
205
|
+
end
|
|
206
|
+
if schema['maxLength'] && length > schema['maxLength']
|
|
207
|
+
details << detail(location, pointer, 'maxLength', "must be at most #{count(schema['maxLength'], 'character')}")
|
|
208
|
+
end
|
|
209
|
+
if schema['pattern'] && !pattern(schema['pattern']).match?(data)
|
|
210
|
+
details << detail(location, pointer, 'pattern', schema['x-pattern-message'] || "must match the pattern #{schema['pattern']}")
|
|
211
|
+
end
|
|
212
|
+
return unless schema['format'] && !format?(schema['format'], data)
|
|
213
|
+
|
|
214
|
+
message = schemas['formatMessages'][schema['format']] || "must be a valid #{schema['format']}"
|
|
215
|
+
details << detail(location, pointer, 'format', message)
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
def check_number(schema, data, pointer, location, details)
|
|
219
|
+
details << detail(location, pointer, 'minimum', "must be at least #{schema['minimum']}") if schema['minimum'] && data < schema['minimum']
|
|
220
|
+
details << detail(location, pointer, 'maximum', "must be at most #{schema['maximum']}") if schema['maximum'] && data > schema['maximum']
|
|
221
|
+
if schema['exclusiveMinimum'] && data <= schema['exclusiveMinimum']
|
|
222
|
+
details << detail(location, pointer, 'exclusiveMinimum', "must be greater than #{schema['exclusiveMinimum']}")
|
|
223
|
+
end
|
|
224
|
+
return unless schema['exclusiveMaximum'] && data >= schema['exclusiveMaximum']
|
|
225
|
+
|
|
226
|
+
details << detail(location, pointer, 'exclusiveMaximum', "must be less than #{schema['exclusiveMaximum']}")
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
def check_array(schema, data, pointer, location, details)
|
|
230
|
+
if schema['minItems'] && data.size < schema['minItems']
|
|
231
|
+
details << detail(location, pointer, 'minItems', at_least(schema['minItems'], "must have at least #{count(schema['minItems'], 'item')}"))
|
|
232
|
+
end
|
|
233
|
+
if schema['maxItems'] && data.size > schema['maxItems']
|
|
234
|
+
details << detail(location, pointer, 'maxItems', "must have at most #{count(schema['maxItems'], 'item')}")
|
|
235
|
+
end
|
|
236
|
+
if schema['uniqueItems'] && !unique?(data)
|
|
237
|
+
duplicate = data.tally.find { |_value, times| times > 1 }
|
|
238
|
+
message = duplicate ? "has #{to_json(duplicate.first)} more than once" : "can't contain the same item twice"
|
|
239
|
+
details << detail(location, pointer, 'uniqueItems', message)
|
|
240
|
+
end
|
|
241
|
+
return unless schema['items']
|
|
242
|
+
|
|
243
|
+
data.each_with_index { |item, index| check(schema['items'], item, "#{pointer}/#{index}", location, details) }
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
def check_object(schema, data, pointer, location, details)
|
|
247
|
+
missing = Array(schema['required']).reject { |name| data.key?(name) }
|
|
248
|
+
missing.each { |name| details << detail(location, "#{pointer}/#{escape(name)}", 'required', 'is required') }
|
|
249
|
+
|
|
250
|
+
properties = schema['properties'] || {}
|
|
251
|
+
data.each do |name, value|
|
|
252
|
+
child = "#{pointer}/#{escape(name)}"
|
|
253
|
+
if properties.key?(name)
|
|
254
|
+
check(properties[name], value, child, location, details)
|
|
255
|
+
elsif schema['additionalProperties'] == false
|
|
256
|
+
details << unknown_property(schema, name, child, location)
|
|
257
|
+
elsif schema['additionalProperties'].is_a?(Hash)
|
|
258
|
+
check(schema['additionalProperties'], value, child, location, details)
|
|
259
|
+
end
|
|
260
|
+
end
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
def unknown_property(schema, name, pointer, location)
|
|
264
|
+
not_allowed = (schema['x-not-allowed-properties'] || {})[name]
|
|
265
|
+
return detail(location, pointer, 'not_allowed', not_allowed) if not_allowed
|
|
266
|
+
|
|
267
|
+
noun = location == 'query' ? 'query parameter' : 'property'
|
|
268
|
+
message = schema['x-unknown-property-message'] || "isn't a documented #{noun}"
|
|
269
|
+
snake = underscore(name)
|
|
270
|
+
if snake != name && (schema['properties'] || {}).key?(snake)
|
|
271
|
+
message += ". API v2 names #{noun == 'property' ? 'properties' : 'query parameters'} in snake_case: '#{snake}'"
|
|
272
|
+
message = "#{schema['x-unknown-property-message']}. API v2 names settings in snake_case: '#{snake}'" if schema['x-unknown-property-message']
|
|
273
|
+
end
|
|
274
|
+
detail(location, pointer, 'unknown_property', message)
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
def detail(location, pointer, code, message)
|
|
278
|
+
return { 'code' => code, 'message' => message, 'pointer' => pointer } unless location == 'query'
|
|
279
|
+
|
|
280
|
+
parameter = pointer.delete_prefix('/').split('/').first.to_s.gsub('~1', '/').gsub('~0', '~')
|
|
281
|
+
{ 'code' => code, 'message' => message, 'parameter' => parameter }
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
def type?(data, type)
|
|
285
|
+
case type
|
|
286
|
+
when 'string' then data.is_a?(String)
|
|
287
|
+
when 'integer' then data.is_a?(Integer) || (data.is_a?(Float) && data.finite? && data == data.floor)
|
|
288
|
+
when 'number' then data.is_a?(Numeric)
|
|
289
|
+
when 'boolean' then [true, false].include?(data)
|
|
290
|
+
when 'object' then data.is_a?(Hash)
|
|
291
|
+
when 'array' then data.is_a?(Array)
|
|
292
|
+
when 'null' then data.nil?
|
|
293
|
+
else false
|
|
294
|
+
end
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
# Patterns are ECMA-262 regexps, as OpenAPI says: ^ and $ are the start and end of the value, not of a line. The
|
|
298
|
+
# API's patterns only use ^ as the first character and $ as the last (api_clients/scripts/extract_request_schemas).
|
|
299
|
+
def pattern(source)
|
|
300
|
+
(@patterns ||= {})[source] ||= begin
|
|
301
|
+
anchored = source.sub(/\A\^/) { '\A' }
|
|
302
|
+
# A $ after an even number of backslashes is the anchor
|
|
303
|
+
anchored = "#{anchored[0...-1]}\\z" if anchored.end_with?('$') && anchored[/\\*\$\z/].size.odd?
|
|
304
|
+
Regexp.new(anchored)
|
|
305
|
+
end
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
def format?(format, data)
|
|
309
|
+
case format
|
|
310
|
+
when 'uri' then uri?(data)
|
|
311
|
+
when 'date-time' then date_time?(data)
|
|
312
|
+
else true
|
|
313
|
+
end
|
|
314
|
+
end
|
|
315
|
+
|
|
316
|
+
# ASCII only, with no whitespace in the query
|
|
317
|
+
def uri?(data)
|
|
318
|
+
data.ascii_only? && !data.match?(/[ \t\n\v\f\r]/) && URI_PATTERN.match?(data)
|
|
319
|
+
end
|
|
320
|
+
|
|
321
|
+
def date_time?(data)
|
|
322
|
+
match = DATE_TIME.match(data)
|
|
323
|
+
return false unless match
|
|
324
|
+
|
|
325
|
+
year, month, day, hour, minute, second = match.captures.first(6).map { |value| Integer(value, 10) }
|
|
326
|
+
return false unless month.between?(1, 12) && day >= 1 && day <= days_in_month(year, month)
|
|
327
|
+
return false unless hour <= 23 && minute <= 59 && second <= 60
|
|
328
|
+
|
|
329
|
+
offset = 0
|
|
330
|
+
if match[7]
|
|
331
|
+
offset_hours = Integer(match[8], 10)
|
|
332
|
+
offset_minutes = Integer(match[9], 10)
|
|
333
|
+
return false unless offset_hours <= 23 && offset_minutes <= 59
|
|
334
|
+
|
|
335
|
+
offset = (match[7] == '-' ? -1 : 1) * ((offset_hours * 60) + offset_minutes)
|
|
336
|
+
end
|
|
337
|
+
# A leap second is only at the end of a UTC day
|
|
338
|
+
second < 60 || ((hour * 60) + minute - offset) % 1440 == 1439
|
|
339
|
+
end
|
|
340
|
+
|
|
341
|
+
# Before the Gregorian calendar (1582), the API's dates are Julian: every fourth year is a leap year
|
|
342
|
+
def days_in_month(year, month)
|
|
343
|
+
leap = (year % 4) == 0 && (year < 1583 || (year % 100).nonzero? || (year % 400) == 0)
|
|
344
|
+
return 29 if month == 2 && leap
|
|
345
|
+
|
|
346
|
+
[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month - 1]
|
|
347
|
+
end
|
|
348
|
+
|
|
349
|
+
def unique?(data)
|
|
350
|
+
data.each_with_index.none? { |item, index| data[(index + 1)..].any? { |other| json_equal?(item, other) } }
|
|
351
|
+
end
|
|
352
|
+
|
|
353
|
+
# JSON equality: numbers by value, objects regardless of key order
|
|
354
|
+
def json_equal?(left, right)
|
|
355
|
+
if left.is_a?(Numeric) && right.is_a?(Numeric)
|
|
356
|
+
left == right
|
|
357
|
+
elsif left.is_a?(Hash) && right.is_a?(Hash)
|
|
358
|
+
left.size == right.size && left.all? { |key, value| right.key?(key) && json_equal?(value, right[key]) }
|
|
359
|
+
elsif left.is_a?(Array) && right.is_a?(Array)
|
|
360
|
+
left.size == right.size && left.zip(right).all? { |a, b| json_equal?(a, b) }
|
|
361
|
+
else
|
|
362
|
+
left == right && left.instance_of?(right.class)
|
|
363
|
+
end
|
|
364
|
+
end
|
|
365
|
+
|
|
366
|
+
def type_message(types)
|
|
367
|
+
names = types.map { |type| TYPE_NAMES.fetch(type, type) }
|
|
368
|
+
connector = names.size > 1 && names.any? { |name| name.include?(' or ') } ? ', or ' : ' or '
|
|
369
|
+
return "must be #{names.first}" if names.size == 1
|
|
370
|
+
return "must be #{names.join(connector)}" if names.size == 2
|
|
371
|
+
|
|
372
|
+
"must be #{names[0..-2].join(', ')}#{connector}#{names.last}"
|
|
373
|
+
end
|
|
374
|
+
|
|
375
|
+
def at_least(limit, message)
|
|
376
|
+
limit == 1 ? "can't be empty" : message
|
|
377
|
+
end
|
|
378
|
+
|
|
379
|
+
def count(number, noun)
|
|
380
|
+
"#{number} #{number == 1 ? noun : "#{noun}s"}"
|
|
381
|
+
end
|
|
382
|
+
|
|
383
|
+
def to_json(value)
|
|
384
|
+
JSON.generate(value, quirks_mode: true)
|
|
385
|
+
end
|
|
386
|
+
|
|
387
|
+
def escape(token)
|
|
388
|
+
token.to_s.gsub('~', '~0').gsub('/', '~1')
|
|
389
|
+
end
|
|
390
|
+
|
|
391
|
+
def underscore(name)
|
|
392
|
+
name.gsub(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2').gsub(/([a-z\d])([A-Z])/, '\1_\2').tr('-', '_').downcase
|
|
393
|
+
end
|
|
394
|
+
end
|
|
395
|
+
end
|
|
396
|
+
end
|
data/lib/docspring/version.rb
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
=begin
|
|
2
2
|
#DocSpring API
|
|
3
3
|
|
|
4
|
-
#Use DocSpring's API to programmatically fill out PDF forms, convert HTML to PDFs, merge PDFs, or request legally binding e-signatures.
|
|
4
|
+
#Use DocSpring's API to programmatically fill out PDF forms, convert HTML to PDFs, merge PDFs, or request legally binding e-signatures.
|
|
5
5
|
|
|
6
|
-
The version of the OpenAPI document:
|
|
6
|
+
The version of the OpenAPI document: v2
|
|
7
7
|
|
|
8
8
|
Generated by: https://openapi-generator.tech
|
|
9
|
-
Generator version: 7.
|
|
9
|
+
Generator version: 7.26.0-DOCSPRING
|
|
10
10
|
|
|
11
11
|
=end
|
|
12
12
|
|
|
13
13
|
module DocSpring
|
|
14
|
-
VERSION = '
|
|
14
|
+
VERSION = '4.0.0'
|
|
15
15
|
end
|
data/lib/docspring.rb
CHANGED
|
@@ -1,80 +1,152 @@
|
|
|
1
1
|
=begin
|
|
2
2
|
#DocSpring API
|
|
3
3
|
|
|
4
|
-
#Use DocSpring's API to programmatically fill out PDF forms, convert HTML to PDFs, merge PDFs, or request legally binding e-signatures.
|
|
4
|
+
#Use DocSpring's API to programmatically fill out PDF forms, convert HTML to PDFs, merge PDFs, or request legally binding e-signatures.
|
|
5
5
|
|
|
6
|
-
The version of the OpenAPI document:
|
|
6
|
+
The version of the OpenAPI document: v2
|
|
7
7
|
|
|
8
8
|
Generated by: https://openapi-generator.tech
|
|
9
|
-
Generator version: 7.
|
|
9
|
+
Generator version: 7.26.0-DOCSPRING
|
|
10
10
|
|
|
11
11
|
=end
|
|
12
12
|
|
|
13
13
|
# Common files
|
|
14
14
|
require 'docspring/api_client'
|
|
15
15
|
require 'docspring/api_error'
|
|
16
|
+
require 'docspring/request_validator'
|
|
17
|
+
require 'docspring/api_model_base'
|
|
16
18
|
require 'docspring/version'
|
|
17
19
|
require 'docspring/configuration'
|
|
18
20
|
|
|
19
21
|
# Models
|
|
20
|
-
require 'docspring/models/
|
|
21
|
-
require 'docspring/models/
|
|
22
|
-
require 'docspring/models/
|
|
23
|
-
require 'docspring/models/
|
|
24
|
-
require 'docspring/models/
|
|
25
|
-
require 'docspring/models/
|
|
26
|
-
require 'docspring/models/
|
|
27
|
-
require 'docspring/models/
|
|
28
|
-
require 'docspring/models/
|
|
29
|
-
require 'docspring/models/
|
|
30
|
-
require 'docspring/models/
|
|
31
|
-
require 'docspring/models/
|
|
32
|
-
require 'docspring/models/
|
|
33
|
-
require 'docspring/models/
|
|
34
|
-
require 'docspring/models/
|
|
35
|
-
require 'docspring/models/
|
|
36
|
-
require 'docspring/models/
|
|
37
|
-
require 'docspring/models/
|
|
38
|
-
require 'docspring/models/
|
|
39
|
-
require 'docspring/models/
|
|
22
|
+
require 'docspring/models/ai_field_naming_language'
|
|
23
|
+
require 'docspring/models/authentication_check'
|
|
24
|
+
require 'docspring/models/barcode_symbology'
|
|
25
|
+
require 'docspring/models/check_character'
|
|
26
|
+
require 'docspring/models/combined_field_type'
|
|
27
|
+
require 'docspring/models/combined_pdf'
|
|
28
|
+
require 'docspring/models/combined_pdf_files'
|
|
29
|
+
require 'docspring/models/combined_pdf_list'
|
|
30
|
+
require 'docspring/models/combined_pdf_source'
|
|
31
|
+
require 'docspring/models/combined_pdf_source_input'
|
|
32
|
+
require 'docspring/models/combined_pdf_source_pdf'
|
|
33
|
+
require 'docspring/models/combined_pdf_source_type'
|
|
34
|
+
require 'docspring/models/combined_pdf_state'
|
|
35
|
+
require 'docspring/models/copy_template_request'
|
|
36
|
+
require 'docspring/models/create_combined_pdf_request'
|
|
37
|
+
require 'docspring/models/create_custom_file_from_upload_request'
|
|
38
|
+
require 'docspring/models/create_folder_request'
|
|
39
|
+
require 'docspring/models/create_signature_request_event_request'
|
|
40
|
+
require 'docspring/models/create_signature_request_token_request'
|
|
41
|
+
require 'docspring/models/create_submission_batch_request'
|
|
42
|
+
require 'docspring/models/create_submission_request'
|
|
43
|
+
require 'docspring/models/create_template_request'
|
|
44
|
+
require 'docspring/models/create_webhook_request'
|
|
40
45
|
require 'docspring/models/custom_file'
|
|
41
|
-
require 'docspring/models/
|
|
46
|
+
require 'docspring/models/custom_file_list'
|
|
47
|
+
require 'docspring/models/custom_file_source_pdf'
|
|
48
|
+
require 'docspring/models/error_code'
|
|
49
|
+
require 'docspring/models/error_detail'
|
|
50
|
+
require 'docspring/models/error_info'
|
|
42
51
|
require 'docspring/models/error_response'
|
|
52
|
+
require 'docspring/models/expiration_interval'
|
|
53
|
+
require 'docspring/models/field_comparison_condition'
|
|
54
|
+
require 'docspring/models/field_comparison_operator'
|
|
55
|
+
require 'docspring/models/field_display_type'
|
|
56
|
+
require 'docspring/models/field_equals_condition'
|
|
57
|
+
require 'docspring/models/field_equals_operator'
|
|
58
|
+
require 'docspring/models/field_in_condition'
|
|
59
|
+
require 'docspring/models/field_override'
|
|
60
|
+
require 'docspring/models/field_presence_condition'
|
|
61
|
+
require 'docspring/models/field_presence_operator'
|
|
62
|
+
require 'docspring/models/field_range_condition'
|
|
63
|
+
require 'docspring/models/field_reimport_state'
|
|
64
|
+
require 'docspring/models/field_setup_logic'
|
|
65
|
+
require 'docspring/models/field_setup_naming'
|
|
66
|
+
require 'docspring/models/field_setup_source'
|
|
43
67
|
require 'docspring/models/folder'
|
|
44
|
-
require 'docspring/models/
|
|
45
|
-
require 'docspring/models/
|
|
46
|
-
require 'docspring/models/
|
|
47
|
-
require 'docspring/models/
|
|
48
|
-
require 'docspring/models/
|
|
49
|
-
require 'docspring/models/
|
|
50
|
-
require 'docspring/models/
|
|
51
|
-
require 'docspring/models/
|
|
52
|
-
require 'docspring/models/
|
|
68
|
+
require 'docspring/models/folder_list'
|
|
69
|
+
require 'docspring/models/generated_file'
|
|
70
|
+
require 'docspring/models/generated_file_state'
|
|
71
|
+
require 'docspring/models/html_engine_options'
|
|
72
|
+
require 'docspring/models/html_engine_options_input'
|
|
73
|
+
require 'docspring/models/image_gravity'
|
|
74
|
+
require 'docspring/models/image_scale_type'
|
|
75
|
+
require 'docspring/models/model_code_language'
|
|
76
|
+
require 'docspring/models/move_folder_request'
|
|
77
|
+
require 'docspring/models/move_template_request'
|
|
78
|
+
require 'docspring/models/number_condition_type'
|
|
79
|
+
require 'docspring/models/page_format'
|
|
80
|
+
require 'docspring/models/publish_template_version_request'
|
|
81
|
+
require 'docspring/models/rename_folder_request'
|
|
82
|
+
require 'docspring/models/restore_template_version_request'
|
|
83
|
+
require 'docspring/models/shape_type'
|
|
84
|
+
require 'docspring/models/signature_request'
|
|
85
|
+
require 'docspring/models/signature_request_auth_second_factor_type'
|
|
86
|
+
require 'docspring/models/signature_request_auth_type'
|
|
87
|
+
require 'docspring/models/signature_request_event'
|
|
88
|
+
require 'docspring/models/signature_request_event_type'
|
|
89
|
+
require 'docspring/models/signature_request_input'
|
|
90
|
+
require 'docspring/models/signature_request_message_type'
|
|
91
|
+
require 'docspring/models/signature_request_state'
|
|
92
|
+
require 'docspring/models/signature_request_token'
|
|
93
|
+
require 'docspring/models/signature_request_token_type'
|
|
94
|
+
require 'docspring/models/string_condition_type'
|
|
53
95
|
require 'docspring/models/submission'
|
|
54
|
-
require 'docspring/models/submission422_response'
|
|
55
96
|
require 'docspring/models/submission_action'
|
|
97
|
+
require 'docspring/models/submission_action_state'
|
|
98
|
+
require 'docspring/models/submission_action_type'
|
|
56
99
|
require 'docspring/models/submission_batch'
|
|
57
|
-
require 'docspring/models/
|
|
58
|
-
require 'docspring/models/
|
|
59
|
-
require 'docspring/models/
|
|
60
|
-
require 'docspring/models/
|
|
61
|
-
require 'docspring/models/
|
|
62
|
-
require 'docspring/models/
|
|
63
|
-
require 'docspring/models/
|
|
64
|
-
require 'docspring/models/success_error_response'
|
|
65
|
-
require 'docspring/models/success_multiple_errors_response'
|
|
100
|
+
require 'docspring/models/submission_batch_state'
|
|
101
|
+
require 'docspring/models/submission_files'
|
|
102
|
+
require 'docspring/models/submission_input'
|
|
103
|
+
require 'docspring/models/submission_list'
|
|
104
|
+
require 'docspring/models/submission_source'
|
|
105
|
+
require 'docspring/models/submission_source_pdf'
|
|
106
|
+
require 'docspring/models/submission_state'
|
|
66
107
|
require 'docspring/models/template'
|
|
67
|
-
require 'docspring/models/
|
|
68
|
-
require 'docspring/models/
|
|
69
|
-
require 'docspring/models/
|
|
70
|
-
require 'docspring/models/
|
|
71
|
-
require 'docspring/models/
|
|
72
|
-
require 'docspring/models/
|
|
73
|
-
require 'docspring/models/
|
|
74
|
-
require 'docspring/models/
|
|
75
|
-
require 'docspring/models/
|
|
76
|
-
require 'docspring/models/
|
|
108
|
+
require 'docspring/models/template_actor'
|
|
109
|
+
require 'docspring/models/template_actor_type'
|
|
110
|
+
require 'docspring/models/template_defaults'
|
|
111
|
+
require 'docspring/models/template_defaults_input'
|
|
112
|
+
require 'docspring/models/template_document'
|
|
113
|
+
require 'docspring/models/template_document_state'
|
|
114
|
+
require 'docspring/models/template_field_dependency'
|
|
115
|
+
require 'docspring/models/template_field_dependency_action'
|
|
116
|
+
require 'docspring/models/template_field_dependency_condition'
|
|
117
|
+
require 'docspring/models/template_field_dependency_condition_input'
|
|
118
|
+
require 'docspring/models/template_field_dependency_input'
|
|
119
|
+
require 'docspring/models/template_field_dependency_match'
|
|
120
|
+
require 'docspring/models/template_field_dependency_operator'
|
|
121
|
+
require 'docspring/models/template_field_logic_status'
|
|
122
|
+
require 'docspring/models/template_form_mode'
|
|
123
|
+
require 'docspring/models/template_model_code'
|
|
124
|
+
require 'docspring/models/template_page_ai_error'
|
|
125
|
+
require 'docspring/models/template_page_ai_naming_status'
|
|
126
|
+
require 'docspring/models/template_page_fields_status'
|
|
127
|
+
require 'docspring/models/template_page_image_status'
|
|
128
|
+
require 'docspring/models/template_page_processing_status'
|
|
129
|
+
require 'docspring/models/template_source_pdf'
|
|
130
|
+
require 'docspring/models/template_summary'
|
|
131
|
+
require 'docspring/models/template_summary_list'
|
|
132
|
+
require 'docspring/models/template_type'
|
|
133
|
+
require 'docspring/models/template_version'
|
|
134
|
+
require 'docspring/models/template_version_type'
|
|
135
|
+
require 'docspring/models/text_alignment'
|
|
136
|
+
require 'docspring/models/text_overflow'
|
|
137
|
+
require 'docspring/models/text_vertical_alignment'
|
|
138
|
+
require 'docspring/models/typeface'
|
|
139
|
+
require 'docspring/models/update_signature_request_request'
|
|
140
|
+
require 'docspring/models/update_template_document_request'
|
|
141
|
+
require 'docspring/models/update_template_request'
|
|
142
|
+
require 'docspring/models/update_webhook_request'
|
|
143
|
+
require 'docspring/models/upload_method'
|
|
144
|
+
require 'docspring/models/upload_presign'
|
|
145
|
+
require 'docspring/models/url_source_pdf'
|
|
77
146
|
require 'docspring/models/webhook'
|
|
147
|
+
require 'docspring/models/webhook_event_type'
|
|
148
|
+
require 'docspring/models/webhook_list'
|
|
149
|
+
require 'docspring/models/webhook_mode'
|
|
78
150
|
|
|
79
151
|
# APIs
|
|
80
152
|
require 'docspring/api/client'
|