onfido 2.9.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +11 -4
  3. data/Gemfile +5 -4
  4. data/LICENSE +5 -7
  5. data/README.md +69 -51
  6. data/Rakefile +10 -0
  7. data/lib/onfido/api/default_api.rb +4233 -0
  8. data/lib/onfido/api_client.rb +431 -0
  9. data/lib/onfido/api_error.rb +58 -0
  10. data/lib/onfido/configuration.rb +420 -0
  11. data/lib/onfido/models/address.rb +422 -0
  12. data/lib/onfido/models/address_builder.rb +422 -0
  13. data/lib/onfido/models/address_shared.rb +415 -0
  14. data/lib/onfido/models/addresses_list.rb +216 -0
  15. data/lib/onfido/models/applicant.rb +390 -0
  16. data/lib/onfido/models/applicant_builder.rb +358 -0
  17. data/lib/onfido/models/applicant_create.rb +281 -0
  18. data/lib/onfido/models/applicant_request.rb +232 -0
  19. data/lib/onfido/models/applicant_response.rb +341 -0
  20. data/lib/onfido/models/applicant_shared.rb +246 -0
  21. data/lib/onfido/models/applicant_update.rb +267 -0
  22. data/lib/onfido/models/applicant_updater.rb +344 -0
  23. data/lib/onfido/models/applicants_list.rb +223 -0
  24. data/lib/onfido/models/check.rb +419 -0
  25. data/lib/onfido/models/check_builder.rb +360 -0
  26. data/lib/onfido/models/check_request.rb +301 -0
  27. data/lib/onfido/models/check_response.rb +350 -0
  28. data/lib/onfido/models/check_shared.rb +266 -0
  29. data/lib/onfido/models/checks_list.rb +223 -0
  30. data/lib/onfido/models/complete_task_builder.rb +221 -0
  31. data/lib/onfido/models/complete_task_data_builder.rb +106 -0
  32. data/lib/onfido/models/consent_item.rb +272 -0
  33. data/lib/onfido/models/consents_builder.rb +205 -0
  34. data/lib/onfido/models/country_codes.rb +289 -0
  35. data/lib/onfido/models/device_intelligence_breakdown.rb +223 -0
  36. data/lib/onfido/models/device_intelligence_breakdown_breakdown.rb +214 -0
  37. data/lib/onfido/models/device_intelligence_breakdown_breakdown_device.rb +215 -0
  38. data/lib/onfido/models/device_intelligence_breakdown_breakdown_device_breakdown.rb +232 -0
  39. data/lib/onfido/models/device_intelligence_breakdown_properties.rb +232 -0
  40. data/lib/onfido/models/device_intelligence_breakdown_properties_device.rb +468 -0
  41. data/lib/onfido/models/device_intelligence_breakdown_properties_geolocation.rb +257 -0
  42. data/lib/onfido/models/device_intelligence_breakdown_properties_ip.rb +245 -0
  43. data/lib/onfido/models/device_intelligence_report.rb +345 -0
  44. data/lib/onfido/models/document.rb +376 -0
  45. data/lib/onfido/models/document_breakdown.rb +286 -0
  46. data/lib/onfido/models/document_breakdown_age_validation.rb +224 -0
  47. data/lib/onfido/models/document_breakdown_age_validation_breakdown.rb +214 -0
  48. data/lib/onfido/models/document_breakdown_compromised_document.rb +224 -0
  49. data/lib/onfido/models/document_breakdown_compromised_document_breakdown.rb +223 -0
  50. data/lib/onfido/models/document_breakdown_data_comparison.rb +224 -0
  51. data/lib/onfido/models/document_breakdown_data_comparison_breakdown.rb +277 -0
  52. data/lib/onfido/models/document_breakdown_data_comparison_breakdown_issuing_country.rb +223 -0
  53. data/lib/onfido/models/document_breakdown_data_consistency.rb +224 -0
  54. data/lib/onfido/models/document_breakdown_data_consistency_breakdown.rb +295 -0
  55. data/lib/onfido/models/document_breakdown_data_validation.rb +224 -0
  56. data/lib/onfido/models/document_breakdown_data_validation_breakdown.rb +268 -0
  57. data/lib/onfido/models/document_breakdown_data_validation_breakdown_document_expiration.rb +224 -0
  58. data/lib/onfido/models/document_breakdown_data_validation_breakdown_expiry_date.rb +224 -0
  59. data/lib/onfido/models/document_breakdown_image_integrity.rb +224 -0
  60. data/lib/onfido/models/document_breakdown_image_integrity_breakdown.rb +241 -0
  61. data/lib/onfido/models/document_breakdown_image_integrity_breakdown_colour_picture.rb +224 -0
  62. data/lib/onfido/models/document_breakdown_image_integrity_breakdown_conclusive_document_quality.rb +224 -0
  63. data/lib/onfido/models/document_breakdown_image_integrity_breakdown_image_quality.rb +224 -0
  64. data/lib/onfido/models/document_breakdown_image_integrity_breakdown_supported_document.rb +224 -0
  65. data/lib/onfido/models/document_breakdown_issuing_authority.rb +224 -0
  66. data/lib/onfido/models/document_breakdown_issuing_authority_breakdown.rb +223 -0
  67. data/lib/onfido/models/document_breakdown_issuing_authority_breakdown_nfc_active_authentication.rb +224 -0
  68. data/lib/onfido/models/document_breakdown_issuing_authority_breakdown_nfc_passive_authentication.rb +224 -0
  69. data/lib/onfido/models/document_breakdown_police_record.rb +215 -0
  70. data/lib/onfido/models/document_breakdown_visual_authenticity.rb +224 -0
  71. data/lib/onfido/models/document_breakdown_visual_authenticity_breakdown.rb +277 -0
  72. data/lib/onfido/models/document_breakdown_visual_authenticity_breakdown_digital_tampering.rb +224 -0
  73. data/lib/onfido/models/document_breakdown_visual_authenticity_breakdown_face_detection.rb +224 -0
  74. data/lib/onfido/models/document_breakdown_visual_authenticity_breakdown_fonts.rb +224 -0
  75. data/lib/onfido/models/document_breakdown_visual_authenticity_breakdown_original_document_present.rb +224 -0
  76. data/lib/onfido/models/document_breakdown_visual_authenticity_breakdown_other.rb +224 -0
  77. data/lib/onfido/models/document_breakdown_visual_authenticity_breakdown_picture_face_integrity.rb +224 -0
  78. data/lib/onfido/models/document_breakdown_visual_authenticity_breakdown_security_features.rb +224 -0
  79. data/lib/onfido/models/document_breakdown_visual_authenticity_breakdown_template.rb +224 -0
  80. data/lib/onfido/models/document_cdq_reasons.rb +285 -0
  81. data/lib/onfido/models/document_iq_reasons.rb +305 -0
  82. data/lib/onfido/models/document_odp_reasons.rb +245 -0
  83. data/lib/onfido/models/document_properties.rb +461 -0
  84. data/lib/onfido/models/document_properties_address_lines.rb +259 -0
  85. data/lib/onfido/models/document_properties_barcode_inner.rb +367 -0
  86. data/lib/onfido/models/document_properties_document_classification.rb +232 -0
  87. data/lib/onfido/models/document_properties_document_numbers_inner.rb +223 -0
  88. data/lib/onfido/models/document_properties_driving_licence_information.rb +241 -0
  89. data/lib/onfido/models/document_properties_extracted_data.rb +394 -0
  90. data/lib/onfido/models/document_properties_nfc.rb +322 -0
  91. data/lib/onfido/models/document_report.rb +354 -0
  92. data/lib/onfido/models/document_response.rb +272 -0
  93. data/lib/onfido/models/document_shared.rb +301 -0
  94. data/lib/onfido/models/document_types.rb +64 -0
  95. data/lib/onfido/models/document_video_report.rb +354 -0
  96. data/lib/onfido/models/document_video_with_address_information_report.rb +354 -0
  97. data/lib/onfido/models/document_with_address_information_report.rb +354 -0
  98. data/lib/onfido/models/document_with_driver_verification_report.rb +354 -0
  99. data/lib/onfido/models/document_with_driver_verification_report_all_of_properties.rb +529 -0
  100. data/lib/onfido/models/document_with_driver_verification_report_all_of_properties_all_of_passenger_vehicle.rb +236 -0
  101. data/lib/onfido/models/document_with_driver_verification_report_all_of_properties_all_of_vehicle_class_details_inner.rb +245 -0
  102. data/lib/onfido/models/document_with_driving_licence_information_report.rb +354 -0
  103. data/lib/onfido/models/documents_list.rb +223 -0
  104. data/lib/onfido/models/error.rb +214 -0
  105. data/lib/onfido/models/error1.rb +224 -0
  106. data/lib/onfido/models/error_properties.rb +234 -0
  107. data/lib/onfido/models/error_properties1.rb +223 -0
  108. data/lib/onfido/models/extract_request.rb +222 -0
  109. data/lib/onfido/models/extraction.rb +233 -0
  110. data/lib/onfido/models/extraction_document_classification.rb +289 -0
  111. data/lib/onfido/models/extraction_extracted_data.rb +530 -0
  112. data/lib/onfido/models/facial_similarity_motion_breakdown.rb +232 -0
  113. data/lib/onfido/models/facial_similarity_motion_breakdown_face_comparison.rb +224 -0
  114. data/lib/onfido/models/facial_similarity_motion_breakdown_image_integrity.rb +224 -0
  115. data/lib/onfido/models/facial_similarity_motion_breakdown_image_integrity_breakdown.rb +223 -0
  116. data/lib/onfido/models/facial_similarity_motion_breakdown_image_integrity_breakdown_face_detected.rb +224 -0
  117. data/lib/onfido/models/facial_similarity_motion_breakdown_image_integrity_breakdown_source_integrity.rb +224 -0
  118. data/lib/onfido/models/facial_similarity_motion_breakdown_visual_authenticity.rb +224 -0
  119. data/lib/onfido/models/facial_similarity_motion_breakdown_visual_authenticity_breakdown.rb +223 -0
  120. data/lib/onfido/models/facial_similarity_motion_breakdown_visual_authenticity_breakdown_spoofing_detection.rb +224 -0
  121. data/lib/onfido/models/facial_similarity_motion_properties.rb +215 -0
  122. data/lib/onfido/models/facial_similarity_motion_report.rb +354 -0
  123. data/lib/onfido/models/facial_similarity_photo_breakdown.rb +232 -0
  124. data/lib/onfido/models/facial_similarity_photo_breakdown_face_comparison.rb +224 -0
  125. data/lib/onfido/models/facial_similarity_photo_breakdown_face_comparison_breakdown.rb +214 -0
  126. data/lib/onfido/models/facial_similarity_photo_breakdown_face_comparison_breakdown_face_match.rb +224 -0
  127. data/lib/onfido/models/facial_similarity_photo_breakdown_face_comparison_breakdown_face_match_properties.rb +225 -0
  128. data/lib/onfido/models/facial_similarity_photo_breakdown_image_integrity.rb +224 -0
  129. data/lib/onfido/models/facial_similarity_photo_breakdown_image_integrity_breakdown.rb +223 -0
  130. data/lib/onfido/models/facial_similarity_photo_breakdown_image_integrity_breakdown_face_detected.rb +224 -0
  131. data/lib/onfido/models/facial_similarity_photo_breakdown_image_integrity_breakdown_source_integrity.rb +224 -0
  132. data/lib/onfido/models/facial_similarity_photo_breakdown_visual_authenticity.rb +224 -0
  133. data/lib/onfido/models/facial_similarity_photo_breakdown_visual_authenticity_breakdown.rb +214 -0
  134. data/lib/onfido/models/facial_similarity_photo_breakdown_visual_authenticity_breakdown_spoofing_detection.rb +224 -0
  135. data/lib/onfido/models/facial_similarity_photo_breakdown_visual_authenticity_breakdown_spoofing_detection_properties.rb +215 -0
  136. data/lib/onfido/models/facial_similarity_photo_fully_auto_breakdown.rb +232 -0
  137. data/lib/onfido/models/facial_similarity_photo_fully_auto_breakdown_image_integrity.rb +224 -0
  138. data/lib/onfido/models/facial_similarity_photo_fully_auto_breakdown_image_integrity_breakdown.rb +223 -0
  139. data/lib/onfido/models/facial_similarity_photo_fully_auto_breakdown_image_integrity_breakdown_source_integrity.rb +224 -0
  140. data/lib/onfido/models/facial_similarity_photo_fully_auto_properties.rb +215 -0
  141. data/lib/onfido/models/facial_similarity_photo_fully_auto_report.rb +354 -0
  142. data/lib/onfido/models/facial_similarity_photo_properties.rb +215 -0
  143. data/lib/onfido/models/facial_similarity_photo_report.rb +354 -0
  144. data/lib/onfido/models/facial_similarity_video_breakdown.rb +232 -0
  145. data/lib/onfido/models/facial_similarity_video_breakdown_face_comparison.rb +224 -0
  146. data/lib/onfido/models/facial_similarity_video_breakdown_image_integrity.rb +224 -0
  147. data/lib/onfido/models/facial_similarity_video_breakdown_image_integrity_breakdown.rb +223 -0
  148. data/lib/onfido/models/facial_similarity_video_breakdown_image_integrity_breakdown_face_detected.rb +224 -0
  149. data/lib/onfido/models/facial_similarity_video_breakdown_image_integrity_breakdown_source_integrity.rb +224 -0
  150. data/lib/onfido/models/facial_similarity_video_breakdown_visual_authenticity.rb +224 -0
  151. data/lib/onfido/models/facial_similarity_video_breakdown_visual_authenticity_breakdown.rb +223 -0
  152. data/lib/onfido/models/facial_similarity_video_breakdown_visual_authenticity_breakdown_liveness_detected.rb +224 -0
  153. data/lib/onfido/models/facial_similarity_video_breakdown_visual_authenticity_breakdown_spoofing_detection.rb +224 -0
  154. data/lib/onfido/models/facial_similarity_video_properties.rb +215 -0
  155. data/lib/onfido/models/facial_similarity_video_report.rb +354 -0
  156. data/lib/onfido/models/id_number.rb +269 -0
  157. data/lib/onfido/models/id_photo.rb +289 -0
  158. data/lib/onfido/models/id_photo_response.rb +282 -0
  159. data/lib/onfido/models/id_photos_list.rb +223 -0
  160. data/lib/onfido/models/identity_enhanced_breakdown.rb +241 -0
  161. data/lib/onfido/models/identity_enhanced_breakdown_address.rb +224 -0
  162. data/lib/onfido/models/identity_enhanced_breakdown_address_breakdown.rb +232 -0
  163. data/lib/onfido/models/identity_enhanced_breakdown_address_breakdown_credit_agencies.rb +224 -0
  164. data/lib/onfido/models/identity_enhanced_breakdown_address_breakdown_credit_agencies_properties.rb +214 -0
  165. data/lib/onfido/models/identity_enhanced_breakdown_address_breakdown_telephone_database.rb +224 -0
  166. data/lib/onfido/models/identity_enhanced_breakdown_address_breakdown_voting_register.rb +224 -0
  167. data/lib/onfido/models/identity_enhanced_breakdown_date_of_birth.rb +224 -0
  168. data/lib/onfido/models/identity_enhanced_breakdown_date_of_birth_breakdown.rb +223 -0
  169. data/lib/onfido/models/identity_enhanced_breakdown_date_of_birth_breakdown_credit_agencies.rb +224 -0
  170. data/lib/onfido/models/identity_enhanced_breakdown_date_of_birth_breakdown_voting_register.rb +224 -0
  171. data/lib/onfido/models/identity_enhanced_breakdown_mortality.rb +215 -0
  172. data/lib/onfido/models/identity_enhanced_breakdown_sources.rb +224 -0
  173. data/lib/onfido/models/identity_enhanced_breakdown_sources_breakdown.rb +214 -0
  174. data/lib/onfido/models/identity_enhanced_breakdown_sources_breakdown_total_sources.rb +224 -0
  175. data/lib/onfido/models/identity_enhanced_breakdown_sources_breakdown_total_sources_properties.rb +214 -0
  176. data/lib/onfido/models/identity_enhanced_properties.rb +227 -0
  177. data/lib/onfido/models/identity_enhanced_properties_matched_addresses_inner.rb +227 -0
  178. data/lib/onfido/models/identity_enhanced_report.rb +354 -0
  179. data/lib/onfido/models/india_pan_report.rb +354 -0
  180. data/lib/onfido/models/india_pan_report_all_of_breakdown.rb +214 -0
  181. data/lib/onfido/models/india_pan_report_all_of_breakdown_device.rb +214 -0
  182. data/lib/onfido/models/india_pan_report_all_of_breakdown_device_breakdown.rb +223 -0
  183. data/lib/onfido/models/india_pan_report_all_of_breakdown_device_breakdown_pan_valid.rb +214 -0
  184. data/lib/onfido/models/india_pan_report_all_of_properties.rb +214 -0
  185. data/lib/onfido/models/india_pan_report_all_of_properties_device.rb +225 -0
  186. data/lib/onfido/models/known_faces_breakdown.rb +223 -0
  187. data/lib/onfido/models/known_faces_breakdown_image_integrity.rb +215 -0
  188. data/lib/onfido/models/known_faces_breakdown_previously_seen_faces.rb +215 -0
  189. data/lib/onfido/models/known_faces_properties.rb +217 -0
  190. data/lib/onfido/models/known_faces_properties_matches_inner.rb +255 -0
  191. data/lib/onfido/models/known_faces_report.rb +354 -0
  192. data/lib/onfido/models/live_photo.rb +289 -0
  193. data/lib/onfido/models/live_photo_response.rb +282 -0
  194. data/lib/onfido/models/live_photos_list.rb +223 -0
  195. data/lib/onfido/models/live_video.rb +287 -0
  196. data/lib/onfido/models/live_videos_list.rb +223 -0
  197. data/lib/onfido/models/location.rb +254 -0
  198. data/lib/onfido/models/location_builder.rb +254 -0
  199. data/lib/onfido/models/location_shared.rb +247 -0
  200. data/lib/onfido/models/motion_capture.rb +275 -0
  201. data/lib/onfido/models/motion_captures_list.rb +223 -0
  202. data/lib/onfido/models/photo_auto_reasons.rb +255 -0
  203. data/lib/onfido/models/photo_reasons.rb +255 -0
  204. data/lib/onfido/models/proof_of_address_breakdown.rb +232 -0
  205. data/lib/onfido/models/proof_of_address_breakdown_data_comparison.rb +224 -0
  206. data/lib/onfido/models/proof_of_address_breakdown_data_comparison_breakdown.rb +232 -0
  207. data/lib/onfido/models/proof_of_address_breakdown_document_classification.rb +224 -0
  208. data/lib/onfido/models/proof_of_address_breakdown_document_classification_breakdown.rb +214 -0
  209. data/lib/onfido/models/proof_of_address_breakdown_image_integrity.rb +224 -0
  210. data/lib/onfido/models/proof_of_address_breakdown_image_integrity_breakdown.rb +214 -0
  211. data/lib/onfido/models/proof_of_address_properties.rb +319 -0
  212. data/lib/onfido/models/proof_of_address_report.rb +354 -0
  213. data/lib/onfido/models/repeat_attempts_list.rb +292 -0
  214. data/lib/onfido/models/repeat_attempts_list_repeat_attempts_inner.rb +333 -0
  215. data/lib/onfido/models/report.rb +93 -0
  216. data/lib/onfido/models/report_document.rb +222 -0
  217. data/lib/onfido/models/report_name.rb +60 -0
  218. data/lib/onfido/models/report_result.rb +42 -0
  219. data/lib/onfido/models/report_shared.rb +329 -0
  220. data/lib/onfido/models/report_status.rb +44 -0
  221. data/lib/onfido/models/report_sub_result.rb +43 -0
  222. data/lib/onfido/models/reports_list.rb +223 -0
  223. data/lib/onfido/models/results_feedback.rb +279 -0
  224. data/lib/onfido/models/sdk_token.rb +229 -0
  225. data/lib/onfido/models/sdk_token_builder.rb +259 -0
  226. data/lib/onfido/models/sdk_token_request.rb +252 -0
  227. data/lib/onfido/models/sdk_token_response.rb +222 -0
  228. data/lib/onfido/models/task.rb +329 -0
  229. data/lib/onfido/models/task_item.rb +287 -0
  230. data/lib/onfido/models/timeline_file_reference.rb +239 -0
  231. data/lib/onfido/models/us_driving_licence_breakdown.rb +232 -0
  232. data/lib/onfido/models/us_driving_licence_breakdown_address.rb +224 -0
  233. data/lib/onfido/models/us_driving_licence_breakdown_address_breakdown.rb +259 -0
  234. data/lib/onfido/models/us_driving_licence_breakdown_document.rb +224 -0
  235. data/lib/onfido/models/us_driving_licence_breakdown_document_breakdown.rb +241 -0
  236. data/lib/onfido/models/us_driving_licence_breakdown_personal.rb +224 -0
  237. data/lib/onfido/models/us_driving_licence_breakdown_personal_breakdown.rb +322 -0
  238. data/lib/onfido/models/us_driving_licence_builder.rb +505 -0
  239. data/lib/onfido/models/us_driving_licence_report.rb +354 -0
  240. data/lib/onfido/models/us_driving_licence_shared.rb +499 -0
  241. data/lib/onfido/models/video_reasons.rb +245 -0
  242. data/lib/onfido/models/watchlist_aml_breakdown.rb +241 -0
  243. data/lib/onfido/models/watchlist_aml_breakdown_adverse_media.rb +215 -0
  244. data/lib/onfido/models/watchlist_aml_breakdown_legal_and_regulatory_warnings.rb +215 -0
  245. data/lib/onfido/models/watchlist_aml_breakdown_politically_exposed_person.rb +215 -0
  246. data/lib/onfido/models/watchlist_aml_breakdown_sanction.rb +215 -0
  247. data/lib/onfido/models/watchlist_aml_properties.rb +217 -0
  248. data/lib/onfido/models/watchlist_aml_report.rb +354 -0
  249. data/lib/onfido/models/watchlist_enhanced_breakdown.rb +241 -0
  250. data/lib/onfido/models/watchlist_enhanced_properties.rb +217 -0
  251. data/lib/onfido/models/watchlist_enhanced_report.rb +354 -0
  252. data/lib/onfido/models/watchlist_monitor.rb +342 -0
  253. data/lib/onfido/models/watchlist_monitor_builder.rb +292 -0
  254. data/lib/onfido/models/watchlist_monitor_match.rb +225 -0
  255. data/lib/onfido/models/watchlist_monitor_matches_list.rb +223 -0
  256. data/lib/onfido/models/watchlist_monitor_matches_updater.rb +227 -0
  257. data/lib/onfido/models/watchlist_monitor_response.rb +254 -0
  258. data/lib/onfido/models/watchlist_monitor_shared.rb +285 -0
  259. data/lib/onfido/models/watchlist_monitors_list.rb +223 -0
  260. data/lib/onfido/models/watchlist_peps_only_report.rb +354 -0
  261. data/lib/onfido/models/watchlist_sanctions_only_report.rb +354 -0
  262. data/lib/onfido/models/watchlist_standard_breakdown.rb +232 -0
  263. data/lib/onfido/models/watchlist_standard_properties.rb +217 -0
  264. data/lib/onfido/models/watchlist_standard_report.rb +354 -0
  265. data/lib/onfido/models/webhook.rb +304 -0
  266. data/lib/onfido/models/webhook_builder.rb +274 -0
  267. data/lib/onfido/models/webhook_create.rb +222 -0
  268. data/lib/onfido/models/webhook_event.rb +214 -0
  269. data/lib/onfido/models/webhook_event_payload.rb +273 -0
  270. data/lib/onfido/models/webhook_event_payload_object.rb +260 -0
  271. data/lib/onfido/models/webhook_event_type.rb +56 -0
  272. data/lib/onfido/models/webhook_resend.rb +216 -0
  273. data/lib/onfido/models/webhook_response.rb +252 -0
  274. data/lib/onfido/models/webhook_shared.rb +249 -0
  275. data/lib/onfido/models/webhook_update.rb +215 -0
  276. data/lib/onfido/models/webhook_updater.rb +267 -0
  277. data/lib/onfido/models/webhooks_list.rb +223 -0
  278. data/lib/onfido/models/webhooks_resend_item.rb +261 -0
  279. data/lib/onfido/models/workflow_run.rb +416 -0
  280. data/lib/onfido/models/workflow_run_builder.rb +316 -0
  281. data/lib/onfido/models/workflow_run_request.rb +217 -0
  282. data/lib/onfido/models/workflow_run_response.rb +317 -0
  283. data/lib/onfido/models/workflow_run_response_error.rb +226 -0
  284. data/lib/onfido/models/workflow_run_shared.rb +296 -0
  285. data/lib/onfido/models/workflow_run_shared_link.rb +290 -0
  286. data/lib/onfido/version.rb +12 -2
  287. data/lib/onfido/webhook_event_verifier.rb +20 -0
  288. data/lib/onfido.rb +309 -25
  289. data/onfido.gemspec +42 -33
  290. data/spec/integrations/address_picker_spec.rb +16 -0
  291. data/spec/integrations/applicant_spec.rb +73 -95
  292. data/spec/integrations/check_spec.rb +60 -41
  293. data/spec/integrations/document_spec.rb +28 -57
  294. data/spec/integrations/extraction_spec.rb +27 -12
  295. data/spec/integrations/id_photo_spec.rb +55 -0
  296. data/spec/integrations/live_photo_spec.rb +28 -45
  297. data/spec/integrations/live_video_spec.rb +33 -19
  298. data/spec/integrations/media/sample_driving_licence.png +0 -0
  299. data/spec/integrations/media/sample_photo.png +0 -0
  300. data/spec/integrations/motion_capture_spec.rb +30 -24
  301. data/spec/integrations/report_schema_spec.rb +45 -0
  302. data/spec/integrations/report_spec.rb +34 -25
  303. data/spec/integrations/sdk_token_spec.rb +12 -10
  304. data/spec/integrations/tasks_spec.rb +45 -0
  305. data/spec/integrations/watchlist_monitor_spec.rb +73 -0
  306. data/spec/integrations/webhook_spec.rb +40 -88
  307. data/spec/integrations/workflow_run_output_spec.rb +117 -0
  308. data/spec/integrations/workflow_run_spec.rb +64 -34
  309. data/spec/shared_contexts/with_applicant.rb +24 -0
  310. data/spec/shared_contexts/with_check.rb +18 -0
  311. data/spec/shared_contexts/with_document.rb +13 -0
  312. data/spec/shared_contexts/with_live_photo.rb +18 -0
  313. data/spec/shared_contexts/with_onfido.rb +14 -0
  314. data/spec/shared_contexts/with_workflow_run.rb +19 -0
  315. data/spec/spec_helper.rb +73 -11
  316. data/spec/webhook_event_verifier_spec.rb +29 -0
  317. metadata +367 -157
  318. data/.github/workflows/gem-push.yml +0 -31
  319. data/.github/workflows/ruby.yml +0 -25
  320. data/.gitignore +0 -19
  321. data/.rspec +0 -2
  322. data/.rubocop.yml +0 -13
  323. data/lib/onfido/api.rb +0 -65
  324. data/lib/onfido/errors/connection_error.rb +0 -6
  325. data/lib/onfido/errors/onfido_error.rb +0 -30
  326. data/lib/onfido/errors/request_error.rb +0 -6
  327. data/lib/onfido/errors/server_error.rb +0 -6
  328. data/lib/onfido/options.rb +0 -38
  329. data/lib/onfido/resource.rb +0 -153
  330. data/lib/onfido/resources/address.rb +0 -9
  331. data/lib/onfido/resources/applicant.rb +0 -29
  332. data/lib/onfido/resources/check.rb +0 -28
  333. data/lib/onfido/resources/document.rb +0 -28
  334. data/lib/onfido/resources/extraction.rb +0 -11
  335. data/lib/onfido/resources/live_photo.rb +0 -27
  336. data/lib/onfido/resources/live_video.rb +0 -17
  337. data/lib/onfido/resources/monitor.rb +0 -32
  338. data/lib/onfido/resources/motion_capture.rb +0 -21
  339. data/lib/onfido/resources/report.rb +0 -21
  340. data/lib/onfido/resources/sdk_token.rb +0 -10
  341. data/lib/onfido/resources/webhook.rb +0 -40
  342. data/lib/onfido/resources/workflow_run.rb +0 -21
  343. data/spec/integrations/address_spec.rb +0 -13
  344. data/spec/integrations/monitor_spec.rb +0 -100
  345. data/spec/integrations/resource_spec.rb +0 -106
  346. data/spec/onfido/api_spec.rb +0 -22
  347. data/spec/onfido/connection_error_spec.rb +0 -20
  348. data/spec/onfido/options_spec.rb +0 -39
  349. data/spec/onfido/request_error_spec.rb +0 -36
  350. data/spec/support/fake_onfido_api.rb +0 -295
  351. data/spec/support/fixtures/4xx_response.json +0 -14
  352. data/spec/support/fixtures/addresses.json +0 -24
  353. data/spec/support/fixtures/applicant.json +0 -28
  354. data/spec/support/fixtures/applicants.json +0 -12
  355. data/spec/support/fixtures/check.json +0 -12
  356. data/spec/support/fixtures/checks.json +0 -16
  357. data/spec/support/fixtures/document.json +0 -10
  358. data/spec/support/fixtures/documents.json +0 -23
  359. data/spec/support/fixtures/extraction.json +0 -23
  360. data/spec/support/fixtures/live_photo.json +0 -9
  361. data/spec/support/fixtures/live_photos.json +0 -22
  362. data/spec/support/fixtures/live_video.json +0 -23
  363. data/spec/support/fixtures/live_videos.json +0 -27
  364. data/spec/support/fixtures/monitor.json +0 -8
  365. data/spec/support/fixtures/monitor_matches.json +0 -12
  366. data/spec/support/fixtures/monitors.json +0 -12
  367. data/spec/support/fixtures/motion_capture.json +0 -9
  368. data/spec/support/fixtures/motion_captures.json +0 -13
  369. data/spec/support/fixtures/not_scheduled_for_deletion_error.json +0 -7
  370. data/spec/support/fixtures/report.json +0 -10
  371. data/spec/support/fixtures/reports.json +0 -24
  372. data/spec/support/fixtures/sdk_token.json +0 -3
  373. data/spec/support/fixtures/signed_workflow_run.pdf +0 -0
  374. data/spec/support/fixtures/unexpected_error_format.json +0 -3
  375. data/spec/support/fixtures/webhook.json +0 -14
  376. data/spec/support/fixtures/webhooks.json +0 -31
  377. data/spec/support/fixtures/workflow_run.json +0 -20
  378. data/spec/support/fixtures/workflow_runs.json +0 -42
@@ -0,0 +1,505 @@
1
+ =begin
2
+ #Onfido API v3.6
3
+
4
+ #The Onfido API (v3.6)
5
+
6
+ The version of the OpenAPI document: v3.6
7
+
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.6.0
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ module Onfido
17
+ class UsDrivingLicenceBuilder
18
+ # Driving licence ID number
19
+ attr_accessor :id_number
20
+
21
+ # Two letter code of issuing state (state-issued driving licenses only)
22
+ attr_accessor :issue_state
23
+
24
+ # Line 1 of the address
25
+ attr_accessor :address_line_1
26
+
27
+ # Line 2 of the address
28
+ attr_accessor :address_line_2
29
+
30
+ # The city of the owner's address
31
+ attr_accessor :city
32
+
33
+ # Date of birth in yyyy-mm-dd format
34
+ attr_accessor :date_of_birth
35
+
36
+ # Document category.
37
+ attr_accessor :document_category
38
+
39
+ # Expiration date of the driving licence in yyyy-mm-dd format
40
+ attr_accessor :expiration_date
41
+
42
+ # Eye color code.
43
+ attr_accessor :eye_color_code
44
+
45
+ # The owner's first name
46
+ attr_accessor :first_name
47
+
48
+ attr_accessor :gender
49
+
50
+ # Issue date in yyyy-mm-dd format
51
+ attr_accessor :issue_date
52
+
53
+ # The owner's surname
54
+ attr_accessor :last_name
55
+
56
+ # The owner's middle name
57
+ attr_accessor :middle_name
58
+
59
+ # The owner's name suffix
60
+ attr_accessor :name_suffix
61
+
62
+ # The postcode or ZIP of the owner's address
63
+ attr_accessor :postal_code
64
+
65
+ # 2-characters state code
66
+ attr_accessor :state
67
+
68
+ # Weight in pounds
69
+ attr_accessor :weight_measure
70
+
71
+ class EnumAttributeValidator
72
+ attr_reader :datatype
73
+ attr_reader :allowable_values
74
+
75
+ def initialize(datatype, allowable_values)
76
+ @allowable_values = allowable_values.map do |value|
77
+ case datatype.to_s
78
+ when /Integer/i
79
+ value.to_i
80
+ when /Float/i
81
+ value.to_f
82
+ else
83
+ value
84
+ end
85
+ end
86
+ end
87
+
88
+ def valid?(value)
89
+ !value || allowable_values.include?(value)
90
+ end
91
+ end
92
+
93
+ # Attribute mapping from ruby-style variable name to JSON key.
94
+ def self.attribute_map
95
+ {
96
+ :'id_number' => :'id_number',
97
+ :'issue_state' => :'issue_state',
98
+ :'address_line_1' => :'address_line_1',
99
+ :'address_line_2' => :'address_line_2',
100
+ :'city' => :'city',
101
+ :'date_of_birth' => :'date_of_birth',
102
+ :'document_category' => :'document_category',
103
+ :'expiration_date' => :'expiration_date',
104
+ :'eye_color_code' => :'eye_color_code',
105
+ :'first_name' => :'first_name',
106
+ :'gender' => :'gender',
107
+ :'issue_date' => :'issue_date',
108
+ :'last_name' => :'last_name',
109
+ :'middle_name' => :'middle_name',
110
+ :'name_suffix' => :'name_suffix',
111
+ :'postal_code' => :'postal_code',
112
+ :'state' => :'state',
113
+ :'weight_measure' => :'weight_measure'
114
+ }
115
+ end
116
+
117
+ # Returns all the JSON keys this model knows about
118
+ def self.acceptable_attributes
119
+ attribute_map.values
120
+ end
121
+
122
+ # Attribute type mapping.
123
+ def self.openapi_types
124
+ {
125
+ :'id_number' => :'String',
126
+ :'issue_state' => :'String',
127
+ :'address_line_1' => :'String',
128
+ :'address_line_2' => :'String',
129
+ :'city' => :'String',
130
+ :'date_of_birth' => :'Date',
131
+ :'document_category' => :'String',
132
+ :'expiration_date' => :'Date',
133
+ :'eye_color_code' => :'String',
134
+ :'first_name' => :'String',
135
+ :'gender' => :'String',
136
+ :'issue_date' => :'Date',
137
+ :'last_name' => :'String',
138
+ :'middle_name' => :'String',
139
+ :'name_suffix' => :'String',
140
+ :'postal_code' => :'String',
141
+ :'state' => :'String',
142
+ :'weight_measure' => :'Integer'
143
+ }
144
+ end
145
+
146
+ # List of attributes with nullable: true
147
+ def self.openapi_nullable
148
+ Set.new([
149
+ ])
150
+ end
151
+
152
+ # List of class defined in allOf (OpenAPI v3)
153
+ def self.openapi_all_of
154
+ [
155
+ :'UsDrivingLicenceShared'
156
+ ]
157
+ end
158
+
159
+ # Initializes the object
160
+ # @param [Hash] attributes Model attributes in the form of hash
161
+ def initialize(attributes = {})
162
+ if (!attributes.is_a?(Hash))
163
+ fail ArgumentError, "The input argument (attributes) must be a hash in `Onfido::UsDrivingLicenceBuilder` initialize method"
164
+ end
165
+
166
+ # check to see if the attribute exists and convert string to symbol for hash key
167
+ attributes = attributes.each_with_object({}) { |(k, v), h|
168
+ if (!self.class.attribute_map.key?(k.to_sym))
169
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Onfido::UsDrivingLicenceBuilder`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
170
+ end
171
+ h[k.to_sym] = v
172
+ }
173
+
174
+ if attributes.key?(:'id_number')
175
+ self.id_number = attributes[:'id_number']
176
+ else
177
+ self.id_number = nil
178
+ end
179
+
180
+ if attributes.key?(:'issue_state')
181
+ self.issue_state = attributes[:'issue_state']
182
+ else
183
+ self.issue_state = nil
184
+ end
185
+
186
+ if attributes.key?(:'address_line_1')
187
+ self.address_line_1 = attributes[:'address_line_1']
188
+ end
189
+
190
+ if attributes.key?(:'address_line_2')
191
+ self.address_line_2 = attributes[:'address_line_2']
192
+ end
193
+
194
+ if attributes.key?(:'city')
195
+ self.city = attributes[:'city']
196
+ end
197
+
198
+ if attributes.key?(:'date_of_birth')
199
+ self.date_of_birth = attributes[:'date_of_birth']
200
+ end
201
+
202
+ if attributes.key?(:'document_category')
203
+ self.document_category = attributes[:'document_category']
204
+ end
205
+
206
+ if attributes.key?(:'expiration_date')
207
+ self.expiration_date = attributes[:'expiration_date']
208
+ end
209
+
210
+ if attributes.key?(:'eye_color_code')
211
+ self.eye_color_code = attributes[:'eye_color_code']
212
+ end
213
+
214
+ if attributes.key?(:'first_name')
215
+ self.first_name = attributes[:'first_name']
216
+ end
217
+
218
+ if attributes.key?(:'gender')
219
+ self.gender = attributes[:'gender']
220
+ end
221
+
222
+ if attributes.key?(:'issue_date')
223
+ self.issue_date = attributes[:'issue_date']
224
+ end
225
+
226
+ if attributes.key?(:'last_name')
227
+ self.last_name = attributes[:'last_name']
228
+ end
229
+
230
+ if attributes.key?(:'middle_name')
231
+ self.middle_name = attributes[:'middle_name']
232
+ end
233
+
234
+ if attributes.key?(:'name_suffix')
235
+ self.name_suffix = attributes[:'name_suffix']
236
+ end
237
+
238
+ if attributes.key?(:'postal_code')
239
+ self.postal_code = attributes[:'postal_code']
240
+ end
241
+
242
+ if attributes.key?(:'state')
243
+ self.state = attributes[:'state']
244
+ end
245
+
246
+ if attributes.key?(:'weight_measure')
247
+ self.weight_measure = attributes[:'weight_measure']
248
+ end
249
+ end
250
+
251
+ # Show invalid properties with the reasons. Usually used together with valid?
252
+ # @return Array for valid properties with the reasons
253
+ def list_invalid_properties
254
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
255
+ invalid_properties = Array.new
256
+ if @id_number.nil?
257
+ invalid_properties.push('invalid value for "id_number", id_number cannot be nil.')
258
+ end
259
+
260
+ if @issue_state.nil?
261
+ invalid_properties.push('invalid value for "issue_state", issue_state cannot be nil.')
262
+ end
263
+
264
+ pattern = Regexp.new(/^[A-Z]{2}$/)
265
+ if @issue_state !~ pattern
266
+ invalid_properties.push("invalid value for \"issue_state\", must conform to the pattern #{pattern}.")
267
+ end
268
+
269
+ pattern = Regexp.new(/^[A-Z]{2}$/)
270
+ if !@state.nil? && @state !~ pattern
271
+ invalid_properties.push("invalid value for \"state\", must conform to the pattern #{pattern}.")
272
+ end
273
+
274
+ invalid_properties
275
+ end
276
+
277
+ # Check to see if the all the properties in the model are valid
278
+ # @return true if the model is valid
279
+ def valid?
280
+ warn '[DEPRECATED] the `valid?` method is obsolete'
281
+ return false if @id_number.nil?
282
+ return false if @issue_state.nil?
283
+ return false if @issue_state !~ Regexp.new(/^[A-Z]{2}$/)
284
+ document_category_validator = EnumAttributeValidator.new('String', ["driver license", "driver permit", "id card", "unknown_default_open_api"])
285
+ return false unless document_category_validator.valid?(@document_category)
286
+ eye_color_code_validator = EnumAttributeValidator.new('String', ["BLK", "BLU", "BRO", "DIC", "GRY", "GRN", "HAZ", "MAR", "PNK", "unknown_default_open_api"])
287
+ return false unless eye_color_code_validator.valid?(@eye_color_code)
288
+ gender_validator = EnumAttributeValidator.new('String', ["Male", "Female", "unknown_default_open_api"])
289
+ return false unless gender_validator.valid?(@gender)
290
+ return false if !@state.nil? && @state !~ Regexp.new(/^[A-Z]{2}$/)
291
+ true
292
+ end
293
+
294
+ # Custom attribute writer method with validation
295
+ # @param [Object] issue_state Value to be assigned
296
+ def issue_state=(issue_state)
297
+ if issue_state.nil?
298
+ fail ArgumentError, 'issue_state cannot be nil'
299
+ end
300
+
301
+ pattern = Regexp.new(/^[A-Z]{2}$/)
302
+ if issue_state !~ pattern
303
+ fail ArgumentError, "invalid value for \"issue_state\", must conform to the pattern #{pattern}."
304
+ end
305
+
306
+ @issue_state = issue_state
307
+ end
308
+
309
+ # Custom attribute writer method checking allowed values (enum).
310
+ # @param [Object] document_category Object to be assigned
311
+ def document_category=(document_category)
312
+ validator = EnumAttributeValidator.new('String', ["driver license", "driver permit", "id card", "unknown_default_open_api"])
313
+ unless validator.valid?(document_category)
314
+ fail ArgumentError, "invalid value for \"document_category\", must be one of #{validator.allowable_values}."
315
+ end
316
+ @document_category = document_category
317
+ end
318
+
319
+ # Custom attribute writer method checking allowed values (enum).
320
+ # @param [Object] eye_color_code Object to be assigned
321
+ def eye_color_code=(eye_color_code)
322
+ validator = EnumAttributeValidator.new('String', ["BLK", "BLU", "BRO", "DIC", "GRY", "GRN", "HAZ", "MAR", "PNK", "unknown_default_open_api"])
323
+ unless validator.valid?(eye_color_code)
324
+ fail ArgumentError, "invalid value for \"eye_color_code\", must be one of #{validator.allowable_values}."
325
+ end
326
+ @eye_color_code = eye_color_code
327
+ end
328
+
329
+ # Custom attribute writer method checking allowed values (enum).
330
+ # @param [Object] gender Object to be assigned
331
+ def gender=(gender)
332
+ validator = EnumAttributeValidator.new('String', ["Male", "Female", "unknown_default_open_api"])
333
+ unless validator.valid?(gender)
334
+ fail ArgumentError, "invalid value for \"gender\", must be one of #{validator.allowable_values}."
335
+ end
336
+ @gender = gender
337
+ end
338
+
339
+ # Custom attribute writer method with validation
340
+ # @param [Object] state Value to be assigned
341
+ def state=(state)
342
+ if state.nil?
343
+ fail ArgumentError, 'state cannot be nil'
344
+ end
345
+
346
+ pattern = Regexp.new(/^[A-Z]{2}$/)
347
+ if state !~ pattern
348
+ fail ArgumentError, "invalid value for \"state\", must conform to the pattern #{pattern}."
349
+ end
350
+
351
+ @state = state
352
+ end
353
+
354
+ # Checks equality by comparing each attribute.
355
+ # @param [Object] Object to be compared
356
+ def ==(o)
357
+ return true if self.equal?(o)
358
+ self.class == o.class &&
359
+ id_number == o.id_number &&
360
+ issue_state == o.issue_state &&
361
+ address_line_1 == o.address_line_1 &&
362
+ address_line_2 == o.address_line_2 &&
363
+ city == o.city &&
364
+ date_of_birth == o.date_of_birth &&
365
+ document_category == o.document_category &&
366
+ expiration_date == o.expiration_date &&
367
+ eye_color_code == o.eye_color_code &&
368
+ first_name == o.first_name &&
369
+ gender == o.gender &&
370
+ issue_date == o.issue_date &&
371
+ last_name == o.last_name &&
372
+ middle_name == o.middle_name &&
373
+ name_suffix == o.name_suffix &&
374
+ postal_code == o.postal_code &&
375
+ state == o.state &&
376
+ weight_measure == o.weight_measure
377
+ end
378
+
379
+ # @see the `==` method
380
+ # @param [Object] Object to be compared
381
+ def eql?(o)
382
+ self == o
383
+ end
384
+
385
+ # Calculates hash code according to all attributes.
386
+ # @return [Integer] Hash code
387
+ def hash
388
+ [id_number, issue_state, address_line_1, address_line_2, city, date_of_birth, document_category, expiration_date, eye_color_code, first_name, gender, issue_date, last_name, middle_name, name_suffix, postal_code, state, weight_measure].hash
389
+ end
390
+
391
+ # Builds the object from hash
392
+ # @param [Hash] attributes Model attributes in the form of hash
393
+ # @return [Object] Returns the model itself
394
+ def self.build_from_hash(attributes)
395
+ return nil unless attributes.is_a?(Hash)
396
+ attributes = attributes.transform_keys(&:to_sym)
397
+ transformed_hash = {}
398
+ openapi_types.each_pair do |key, type|
399
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
400
+ transformed_hash["#{key}"] = nil
401
+ elsif type =~ /\AArray<(.*)>/i
402
+ # check to ensure the input is an array given that the attribute
403
+ # is documented as an array but the input is not
404
+ if attributes[attribute_map[key]].is_a?(Array)
405
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
406
+ end
407
+ elsif !attributes[attribute_map[key]].nil?
408
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
409
+ end
410
+ end
411
+ new(transformed_hash)
412
+ end
413
+
414
+ # Deserializes the data based on type
415
+ # @param string type Data type
416
+ # @param string value Value to be deserialized
417
+ # @return [Object] Deserialized data
418
+ def self._deserialize(type, value)
419
+ case type.to_sym
420
+ when :Time
421
+ Time.parse(value)
422
+ when :Date
423
+ Date.parse(value)
424
+ when :String
425
+ value.to_s
426
+ when :Integer
427
+ value.to_i
428
+ when :Float
429
+ value.to_f
430
+ when :Boolean
431
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
432
+ true
433
+ else
434
+ false
435
+ end
436
+ when :Object
437
+ # generic object (usually a Hash), return directly
438
+ value
439
+ when /\AArray<(?<inner_type>.+)>\z/
440
+ inner_type = Regexp.last_match[:inner_type]
441
+ value.map { |v| _deserialize(inner_type, v) }
442
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
443
+ k_type = Regexp.last_match[:k_type]
444
+ v_type = Regexp.last_match[:v_type]
445
+ {}.tap do |hash|
446
+ value.each do |k, v|
447
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
448
+ end
449
+ end
450
+ else # model
451
+ # models (e.g. Pet) or oneOf
452
+ klass = Onfido.const_get(type)
453
+ klass.respond_to?(:openapi_any_of) || klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value)
454
+ end
455
+ end
456
+
457
+ # Returns the string representation of the object
458
+ # @return [String] String presentation of the object
459
+ def to_s
460
+ to_hash.to_s
461
+ end
462
+
463
+ # to_body is an alias to to_hash (backward compatibility)
464
+ # @return [Hash] Returns the object in the form of hash
465
+ def to_body
466
+ to_hash
467
+ end
468
+
469
+ # Returns the object in the form of hash
470
+ # @return [Hash] Returns the object in the form of hash
471
+ def to_hash
472
+ hash = {}
473
+ self.class.attribute_map.each_pair do |attr, param|
474
+ value = self.send(attr)
475
+ if value.nil?
476
+ is_nullable = self.class.openapi_nullable.include?(attr)
477
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
478
+ end
479
+
480
+ hash[param] = _to_hash(value)
481
+ end
482
+ hash
483
+ end
484
+
485
+ # Outputs non-array value in the form of hash
486
+ # For object, use to_hash. Otherwise, just return the value
487
+ # @param [Object] value Any valid value
488
+ # @return [Hash] Returns the value in the form of hash
489
+ def _to_hash(value)
490
+ if value.is_a?(Array)
491
+ value.compact.map { |v| _to_hash(v) }
492
+ elsif value.is_a?(Hash)
493
+ {}.tap do |hash|
494
+ value.each { |k, v| hash[k] = _to_hash(v) }
495
+ end
496
+ elsif value.respond_to? :to_hash
497
+ value.to_hash
498
+ else
499
+ value
500
+ end
501
+ end
502
+
503
+ end
504
+
505
+ end