norbelys 0.1.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 (624) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +9 -0
  3. data/README.md +429 -0
  4. data/Rakefile +10 -0
  5. data/docs/AddProgramSenderParams.md +18 -0
  6. data/docs/AiEmailVariantContent.md +28 -0
  7. data/docs/AnalyticsApi.md +81 -0
  8. data/docs/AnalyticsQuery.md +20 -0
  9. data/docs/AnalyticsQueryName.md +15 -0
  10. data/docs/AnalyticsQueryParams.md +50 -0
  11. data/docs/AnalyticsQueryResult.md +20 -0
  12. data/docs/ApiError.md +18 -0
  13. data/docs/ApiErrorDetail.md +26 -0
  14. data/docs/AudienceActivityAction.md +15 -0
  15. data/docs/AudienceActivityCondition.md +20 -0
  16. data/docs/AudienceActivityLinkFilter.md +20 -0
  17. data/docs/AudienceActivityLinkMatchOp.md +15 -0
  18. data/docs/AudienceActivityParams.md +32 -0
  19. data/docs/AudienceAttributeCondition.md +22 -0
  20. data/docs/AudienceConditionOp.md +15 -0
  21. data/docs/AudienceConditionValue.md +15 -0
  22. data/docs/AudienceFilter.md +20 -0
  23. data/docs/AudienceMatch.md +15 -0
  24. data/docs/AudienceRule.md +26 -0
  25. data/docs/AudienceSource.md +26 -0
  26. data/docs/AudienceStatusBreakdown.md +20 -0
  27. data/docs/AudienceSummary.md +26 -0
  28. data/docs/AudienceWeekPoint.md +20 -0
  29. data/docs/BulkUpdateSenderPatch.md +34 -0
  30. data/docs/BulkUpdateSendersInput.md +20 -0
  31. data/docs/BulkUpdateSendersResult.md +24 -0
  32. data/docs/CampaignReportShare.md +22 -0
  33. data/docs/CollectionAddress.md +28 -0
  34. data/docs/ConnectionSettings.md +22 -0
  35. data/docs/CreateSenderInput.md +42 -0
  36. data/docs/DetachResult.md +18 -0
  37. data/docs/DmarcRecordToPublish.md +22 -0
  38. data/docs/Domain.md +38 -0
  39. data/docs/DomainAge.md +30 -0
  40. data/docs/DomainCapacity.md +28 -0
  41. data/docs/DomainCreateParams.md +24 -0
  42. data/docs/DomainDetail.md +42 -0
  43. data/docs/DomainHealth.md +24 -0
  44. data/docs/DomainList.md +26 -0
  45. data/docs/DomainMonitoring.md +30 -0
  46. data/docs/DomainMonitoringParams.md +20 -0
  47. data/docs/DomainSending.md +26 -0
  48. data/docs/DomainSendingPolicy.md +36 -0
  49. data/docs/DomainSendingPolicyParams.md +32 -0
  50. data/docs/DomainSendingUpdateParams.md +20 -0
  51. data/docs/DomainTracking.md +50 -0
  52. data/docs/DomainTrackingParams.md +22 -0
  53. data/docs/DomainTrackingUpdateParams.md +24 -0
  54. data/docs/DomainUpdateParams.md +22 -0
  55. data/docs/DomainsApi.md +525 -0
  56. data/docs/EmailVariantContent.md +28 -0
  57. data/docs/EnrollProgramParams.md +28 -0
  58. data/docs/EnrollProgramResult.md +28 -0
  59. data/docs/Enrollment.md +42 -0
  60. data/docs/EnrollmentCounts.md +44 -0
  61. data/docs/EnrollmentList.md +28 -0
  62. data/docs/EnrollmentPersonRef.md +22 -0
  63. data/docs/EnrollmentProgramRef.md +20 -0
  64. data/docs/Features.md +18 -0
  65. data/docs/Field.md +38 -0
  66. data/docs/FieldCreateParams.md +26 -0
  67. data/docs/FieldList.md +20 -0
  68. data/docs/FieldType.md +15 -0
  69. data/docs/FieldUpdateParams.md +24 -0
  70. data/docs/FieldsApi.md +297 -0
  71. data/docs/FileObject.md +28 -0
  72. data/docs/FileUpload.md +22 -0
  73. data/docs/FilesApi.md +81 -0
  74. data/docs/Group.md +34 -0
  75. data/docs/GroupAddMembersParams.md +20 -0
  76. data/docs/GroupAddMembersResult.md +22 -0
  77. data/docs/GroupCreateParams.md +22 -0
  78. data/docs/GroupList.md +26 -0
  79. data/docs/GroupUpdateParams.md +22 -0
  80. data/docs/GroupsApi.md +521 -0
  81. data/docs/ImapConnectionUpdate.md +22 -0
  82. data/docs/InboundMessage.md +48 -0
  83. data/docs/Integration.md +34 -0
  84. data/docs/IntegrationConfig.md +26 -0
  85. data/docs/IntegrationConnectParams.md +18 -0
  86. data/docs/IntegrationConnectResult.md +18 -0
  87. data/docs/IntegrationList.md +26 -0
  88. data/docs/IntegrationNotifyConfig.md +24 -0
  89. data/docs/IntegrationOptions.md +18 -0
  90. data/docs/IntegrationProvider.md +15 -0
  91. data/docs/IntegrationStatus.md +15 -0
  92. data/docs/IntegrationSyncResult.md +18 -0
  93. data/docs/IntegrationUpdateParams.md +18 -0
  94. data/docs/IntegrationsApi.md +513 -0
  95. data/docs/LaunchProgramParams.md +18 -0
  96. data/docs/LaunchProgramResult.md +22 -0
  97. data/docs/Message.md +58 -0
  98. data/docs/MessageAddress.md +20 -0
  99. data/docs/MessageAttachment.md +28 -0
  100. data/docs/MessageAttachmentDownload.md +32 -0
  101. data/docs/MessageAttachmentInput.md +22 -0
  102. data/docs/MessageAttachmentList.md +22 -0
  103. data/docs/MessageCreateParams.md +44 -0
  104. data/docs/MessageEnrollParams.md +26 -0
  105. data/docs/MessageList.md +26 -0
  106. data/docs/MessageReplyParams.md +40 -0
  107. data/docs/MessageSource.md +36 -0
  108. data/docs/MessageSourceAttachment.md +22 -0
  109. data/docs/MessageTestParams.md +40 -0
  110. data/docs/MessageUpdateParams.md +22 -0
  111. data/docs/MessagesApi.md +543 -0
  112. data/docs/MonthlyEmailUsageMeter.md +24 -0
  113. data/docs/Organization.md +30 -0
  114. data/docs/OrganizationAlerts.md +18 -0
  115. data/docs/OrganizationAlertsParams.md +18 -0
  116. data/docs/OrganizationApi.md +350 -0
  117. data/docs/OrganizationBouncePolicy.md +20 -0
  118. data/docs/OrganizationBouncePolicyParams.md +20 -0
  119. data/docs/OrganizationOnboarding.md +20 -0
  120. data/docs/OrganizationProfile.md +22 -0
  121. data/docs/OrganizationProfileParams.md +22 -0
  122. data/docs/OrganizationPulse.md +28 -0
  123. data/docs/OrganizationUpdateParams.md +24 -0
  124. data/docs/OrganizationUsage.md +26 -0
  125. data/docs/OutboundMessage.md +46 -0
  126. data/docs/PeopleApi.md +681 -0
  127. data/docs/PeopleBulkCreateParams.md +28 -0
  128. data/docs/PeopleBulkCreateResult.md +34 -0
  129. data/docs/Person.md +52 -0
  130. data/docs/PersonCreateParams.md +30 -0
  131. data/docs/PersonDetail.md +60 -0
  132. data/docs/PersonErased.md +20 -0
  133. data/docs/PersonGroupRef.md +22 -0
  134. data/docs/PersonImportItem.md +30 -0
  135. data/docs/PersonImportReason.md +22 -0
  136. data/docs/PersonImportStats.md +36 -0
  137. data/docs/PersonList.md +26 -0
  138. data/docs/PersonListItem.md +50 -0
  139. data/docs/PersonSegmentRef.md +22 -0
  140. data/docs/PersonUpdateParams.md +30 -0
  141. data/docs/Program.md +78 -0
  142. data/docs/ProgramCreateParams.md +62 -0
  143. data/docs/ProgramDetail.md +84 -0
  144. data/docs/ProgramList.md +26 -0
  145. data/docs/ProgramListItem.md +80 -0
  146. data/docs/ProgramPauseMeta.md +20 -0
  147. data/docs/ProgramSenderRef.md +26 -0
  148. data/docs/ProgramStats.md +22 -0
  149. data/docs/ProgramStepInput.md +38 -0
  150. data/docs/ProgramUpdateParams.md +62 -0
  151. data/docs/ProgramVariantInput.md +26 -0
  152. data/docs/ProgramsApi.md +1283 -0
  153. data/docs/ProgramsAudienceList.md +26 -0
  154. data/docs/ProgramsSendersList.md +26 -0
  155. data/docs/ProviderApiSenderInput.md +38 -0
  156. data/docs/PulseDeliverability.md +30 -0
  157. data/docs/PulseProgram.md +42 -0
  158. data/docs/PulseSenderFleet.md +30 -0
  159. data/docs/PulseValue.md +26 -0
  160. data/docs/ReportShare.md +22 -0
  161. data/docs/Segment.md +32 -0
  162. data/docs/SegmentCreateParams.md +22 -0
  163. data/docs/SegmentList.md +26 -0
  164. data/docs/SegmentUpdateParams.md +22 -0
  165. data/docs/SegmentsApi.md +373 -0
  166. data/docs/SelfHostedSenderInput.md +36 -0
  167. data/docs/Sender.md +66 -0
  168. data/docs/SenderBulkError.md +20 -0
  169. data/docs/SenderDetail.md +70 -0
  170. data/docs/SenderList.md +26 -0
  171. data/docs/SenderRemoveResult.md +20 -0
  172. data/docs/SenderUsage.md +24 -0
  173. data/docs/SenderWarmupStatus.md +20 -0
  174. data/docs/SendersApi.md +531 -0
  175. data/docs/SlackChannel.md +20 -0
  176. data/docs/SmtpConnectionSettings.md +26 -0
  177. data/docs/SmtpConnectionUpdate.md +26 -0
  178. data/docs/SmtpSenderInput.md +40 -0
  179. data/docs/StaticEmailVariantContent.md +28 -0
  180. data/docs/StepWithVariants.md +46 -0
  181. data/docs/Suppression.md +32 -0
  182. data/docs/SuppressionBulkParams.md +20 -0
  183. data/docs/SuppressionBulkResult.md +18 -0
  184. data/docs/SuppressionCreateParams.md +24 -0
  185. data/docs/SuppressionList.md +26 -0
  186. data/docs/SuppressionScope.md +15 -0
  187. data/docs/SuppressionsApi.md +369 -0
  188. data/docs/SyncModel.md +15 -0
  189. data/docs/TeamSize.md +15 -0
  190. data/docs/TrackingDnsRecord.md +22 -0
  191. data/docs/UpdateSenderInput.md +48 -0
  192. data/docs/UsageMeter.md +22 -0
  193. data/docs/UsagePlan.md +22 -0
  194. data/docs/Variant.md +34 -0
  195. data/docs/VariantAi.md +22 -0
  196. data/docs/VerifyApi.md +81 -0
  197. data/docs/VerifyEmailInput.md +18 -0
  198. data/docs/VerifyMx.md +22 -0
  199. data/docs/VerifyReachability.md +15 -0
  200. data/docs/VerifyReasonCode.md +15 -0
  201. data/docs/VerifyResult.md +38 -0
  202. data/docs/VerifySignals.md +28 -0
  203. data/docs/VerifySyntax.md +22 -0
  204. data/docs/VoiceSenderInput.md +38 -0
  205. data/docs/WarmupRuntimeStatus.md +32 -0
  206. data/docs/WarmupSettings.md +44 -0
  207. data/docs/WarmupTemplate.md +20 -0
  208. data/docs/WarmupTodayTally.md +22 -0
  209. data/lib/norbelys/api/analytics_api.rb +97 -0
  210. data/lib/norbelys/api/domains_api.rb +528 -0
  211. data/lib/norbelys/api/fields_api.rb +290 -0
  212. data/lib/norbelys/api/files_api.rb +97 -0
  213. data/lib/norbelys/api/groups_api.rb +516 -0
  214. data/lib/norbelys/api/integrations_api.rb +509 -0
  215. data/lib/norbelys/api/messages_api.rb +572 -0
  216. data/lib/norbelys/api/organization_api.rb +329 -0
  217. data/lib/norbelys/api/people_api.rb +689 -0
  218. data/lib/norbelys/api/programs_api.rb +1299 -0
  219. data/lib/norbelys/api/segments_api.rb +370 -0
  220. data/lib/norbelys/api/senders_api.rb +539 -0
  221. data/lib/norbelys/api/suppressions_api.rb +370 -0
  222. data/lib/norbelys/api/verify_api.rb +97 -0
  223. data/lib/norbelys/api_client.rb +394 -0
  224. data/lib/norbelys/api_error.rb +58 -0
  225. data/lib/norbelys/configuration.rb +308 -0
  226. data/lib/norbelys/models/add_program_sender_params.rb +222 -0
  227. data/lib/norbelys/models/ai_email_variant_content.rb +318 -0
  228. data/lib/norbelys/models/analytics_query.rb +252 -0
  229. data/lib/norbelys/models/analytics_query_name.rb +63 -0
  230. data/lib/norbelys/models/analytics_query_params.rb +485 -0
  231. data/lib/norbelys/models/analytics_query_result.rb +260 -0
  232. data/lib/norbelys/models/api_error.rb +221 -0
  233. data/lib/norbelys/models/api_error_detail.rb +310 -0
  234. data/lib/norbelys/models/audience_activity_action.rb +45 -0
  235. data/lib/norbelys/models/audience_activity_condition.rb +233 -0
  236. data/lib/norbelys/models/audience_activity_link_filter.rb +289 -0
  237. data/lib/norbelys/models/audience_activity_link_match_op.rb +40 -0
  238. data/lib/norbelys/models/audience_activity_params.rb +395 -0
  239. data/lib/norbelys/models/audience_attribute_condition.rb +289 -0
  240. data/lib/norbelys/models/audience_condition_op.rb +59 -0
  241. data/lib/norbelys/models/audience_condition_value.rb +107 -0
  242. data/lib/norbelys/models/audience_filter.rb +270 -0
  243. data/lib/norbelys/models/audience_match.rb +40 -0
  244. data/lib/norbelys/models/audience_rule.rb +104 -0
  245. data/lib/norbelys/models/audience_source.rb +343 -0
  246. data/lib/norbelys/models/audience_status_breakdown.rb +292 -0
  247. data/lib/norbelys/models/audience_summary.rb +351 -0
  248. data/lib/norbelys/models/audience_week_point.rb +258 -0
  249. data/lib/norbelys/models/bulk_update_sender_patch.rb +368 -0
  250. data/lib/norbelys/models/bulk_update_senders_input.rb +268 -0
  251. data/lib/norbelys/models/bulk_update_senders_result.rb +291 -0
  252. data/lib/norbelys/models/campaign_report_share.rb +244 -0
  253. data/lib/norbelys/models/collection_address.rb +321 -0
  254. data/lib/norbelys/models/connection_settings.rb +331 -0
  255. data/lib/norbelys/models/create_sender_input.rb +106 -0
  256. data/lib/norbelys/models/detach_result.rb +223 -0
  257. data/lib/norbelys/models/dmarc_record_to_publish.rb +252 -0
  258. data/lib/norbelys/models/domain.rb +421 -0
  259. data/lib/norbelys/models/domain_age.rb +351 -0
  260. data/lib/norbelys/models/domain_capacity.rb +397 -0
  261. data/lib/norbelys/models/domain_create_params.rb +307 -0
  262. data/lib/norbelys/models/domain_detail.rb +445 -0
  263. data/lib/norbelys/models/domain_health.rb +310 -0
  264. data/lib/norbelys/models/domain_list.rb +292 -0
  265. data/lib/norbelys/models/domain_monitoring.rb +380 -0
  266. data/lib/norbelys/models/domain_monitoring_params.rb +262 -0
  267. data/lib/norbelys/models/domain_sending.rb +302 -0
  268. data/lib/norbelys/models/domain_sending_policy.rb +479 -0
  269. data/lib/norbelys/models/domain_sending_policy_params.rb +389 -0
  270. data/lib/norbelys/models/domain_sending_update_params.rb +225 -0
  271. data/lib/norbelys/models/domain_tracking.rb +570 -0
  272. data/lib/norbelys/models/domain_tracking_params.rb +268 -0
  273. data/lib/norbelys/models/domain_tracking_update_params.rb +306 -0
  274. data/lib/norbelys/models/domain_update_params.rb +259 -0
  275. data/lib/norbelys/models/email_variant_content.rb +104 -0
  276. data/lib/norbelys/models/enroll_program_params.rb +308 -0
  277. data/lib/norbelys/models/enroll_program_result.rb +366 -0
  278. data/lib/norbelys/models/enrollment.rb +405 -0
  279. data/lib/norbelys/models/enrollment_counts.rb +660 -0
  280. data/lib/norbelys/models/enrollment_list.rb +308 -0
  281. data/lib/norbelys/models/enrollment_person_ref.rb +246 -0
  282. data/lib/norbelys/models/enrollment_program_ref.rb +239 -0
  283. data/lib/norbelys/models/features.rb +223 -0
  284. data/lib/norbelys/models/field.rb +401 -0
  285. data/lib/norbelys/models/field_create_params.rb +386 -0
  286. data/lib/norbelys/models/field_list.rb +234 -0
  287. data/lib/norbelys/models/field_type.rb +45 -0
  288. data/lib/norbelys/models/field_update_params.rb +324 -0
  289. data/lib/norbelys/models/file_object.rb +321 -0
  290. data/lib/norbelys/models/file_upload.rb +324 -0
  291. data/lib/norbelys/models/group.rb +339 -0
  292. data/lib/norbelys/models/group_add_members_params.rb +227 -0
  293. data/lib/norbelys/models/group_add_members_result.rb +313 -0
  294. data/lib/norbelys/models/group_create_params.rb +308 -0
  295. data/lib/norbelys/models/group_list.rb +299 -0
  296. data/lib/norbelys/models/group_update_params.rb +293 -0
  297. data/lib/norbelys/models/imap_connection_update.rb +317 -0
  298. data/lib/norbelys/models/inbound_message.rb +442 -0
  299. data/lib/norbelys/models/integration.rb +340 -0
  300. data/lib/norbelys/models/integration_config.rb +254 -0
  301. data/lib/norbelys/models/integration_connect_params.rb +244 -0
  302. data/lib/norbelys/models/integration_connect_result.rb +222 -0
  303. data/lib/norbelys/models/integration_list.rb +292 -0
  304. data/lib/norbelys/models/integration_notify_config.rb +246 -0
  305. data/lib/norbelys/models/integration_options.rb +224 -0
  306. data/lib/norbelys/models/integration_provider.rb +52 -0
  307. data/lib/norbelys/models/integration_status.rb +41 -0
  308. data/lib/norbelys/models/integration_sync_result.rb +224 -0
  309. data/lib/norbelys/models/integration_update_params.rb +222 -0
  310. data/lib/norbelys/models/launch_program_params.rb +230 -0
  311. data/lib/norbelys/models/launch_program_result.rb +292 -0
  312. data/lib/norbelys/models/message.rb +104 -0
  313. data/lib/norbelys/models/message_address.rb +232 -0
  314. data/lib/norbelys/models/message_attachment.rb +312 -0
  315. data/lib/norbelys/models/message_attachment_download.rb +341 -0
  316. data/lib/norbelys/models/message_attachment_input.rb +296 -0
  317. data/lib/norbelys/models/message_attachment_list.rb +253 -0
  318. data/lib/norbelys/models/message_create_params.rb +105 -0
  319. data/lib/norbelys/models/message_enroll_params.rb +278 -0
  320. data/lib/norbelys/models/message_list.rb +299 -0
  321. data/lib/norbelys/models/message_reply_params.rb +369 -0
  322. data/lib/norbelys/models/message_source.rb +348 -0
  323. data/lib/norbelys/models/message_source_attachment.rb +242 -0
  324. data/lib/norbelys/models/message_test_params.rb +364 -0
  325. data/lib/norbelys/models/message_update_params.rb +269 -0
  326. data/lib/norbelys/models/monthly_email_usage_meter.rb +303 -0
  327. data/lib/norbelys/models/organization.rb +321 -0
  328. data/lib/norbelys/models/organization_alerts.rb +223 -0
  329. data/lib/norbelys/models/organization_alerts_params.rb +216 -0
  330. data/lib/norbelys/models/organization_bounce_policy.rb +240 -0
  331. data/lib/norbelys/models/organization_bounce_policy_params.rb +226 -0
  332. data/lib/norbelys/models/organization_onboarding.rb +250 -0
  333. data/lib/norbelys/models/organization_profile.rb +264 -0
  334. data/lib/norbelys/models/organization_profile_params.rb +270 -0
  335. data/lib/norbelys/models/organization_pulse.rb +301 -0
  336. data/lib/norbelys/models/organization_update_params.rb +242 -0
  337. data/lib/norbelys/models/organization_usage.rb +282 -0
  338. data/lib/norbelys/models/outbound_message.rb +447 -0
  339. data/lib/norbelys/models/people_bulk_create_params.rb +401 -0
  340. data/lib/norbelys/models/people_bulk_create_result.rb +493 -0
  341. data/lib/norbelys/models/person.rb +500 -0
  342. data/lib/norbelys/models/person_create_params.rb +320 -0
  343. data/lib/norbelys/models/person_detail.rb +548 -0
  344. data/lib/norbelys/models/person_erased.rb +234 -0
  345. data/lib/norbelys/models/person_group_ref.rb +251 -0
  346. data/lib/norbelys/models/person_import_item.rb +339 -0
  347. data/lib/norbelys/models/person_import_reason.rb +309 -0
  348. data/lib/norbelys/models/person_import_stats.rb +518 -0
  349. data/lib/norbelys/models/person_list.rb +299 -0
  350. data/lib/norbelys/models/person_list_item.rb +488 -0
  351. data/lib/norbelys/models/person_segment_ref.rb +251 -0
  352. data/lib/norbelys/models/person_update_params.rb +313 -0
  353. data/lib/norbelys/models/program.rb +871 -0
  354. data/lib/norbelys/models/program_create_params.rb +704 -0
  355. data/lib/norbelys/models/program_detail.rb +911 -0
  356. data/lib/norbelys/models/program_list.rb +292 -0
  357. data/lib/norbelys/models/program_list_item.rb +887 -0
  358. data/lib/norbelys/models/program_pause_meta.rb +295 -0
  359. data/lib/norbelys/models/program_sender_ref.rb +295 -0
  360. data/lib/norbelys/models/program_stats.rb +297 -0
  361. data/lib/norbelys/models/program_step_input.rb +469 -0
  362. data/lib/norbelys/models/program_update_params.rb +697 -0
  363. data/lib/norbelys/models/program_variant_input.rb +274 -0
  364. data/lib/norbelys/models/programs_audience_list.rb +293 -0
  365. data/lib/norbelys/models/programs_senders_list.rb +293 -0
  366. data/lib/norbelys/models/provider_api_sender_input.rb +395 -0
  367. data/lib/norbelys/models/pulse_deliverability.rb +325 -0
  368. data/lib/norbelys/models/pulse_program.rb +453 -0
  369. data/lib/norbelys/models/pulse_sender_fleet.rb +325 -0
  370. data/lib/norbelys/models/pulse_value.rb +291 -0
  371. data/lib/norbelys/models/report_share.rb +244 -0
  372. data/lib/norbelys/models/segment.rb +307 -0
  373. data/lib/norbelys/models/segment_create_params.rb +296 -0
  374. data/lib/norbelys/models/segment_list.rb +299 -0
  375. data/lib/norbelys/models/segment_update_params.rb +278 -0
  376. data/lib/norbelys/models/self_hosted_sender_input.rb +378 -0
  377. data/lib/norbelys/models/sender.rb +708 -0
  378. data/lib/norbelys/models/sender_bulk_error.rb +239 -0
  379. data/lib/norbelys/models/sender_detail.rb +726 -0
  380. data/lib/norbelys/models/sender_list.rb +299 -0
  381. data/lib/norbelys/models/sender_remove_result.rb +268 -0
  382. data/lib/norbelys/models/sender_usage.rb +331 -0
  383. data/lib/norbelys/models/sender_warmup_status.rb +230 -0
  384. data/lib/norbelys/models/slack_channel.rb +239 -0
  385. data/lib/norbelys/models/smtp_connection_settings.rb +351 -0
  386. data/lib/norbelys/models/smtp_connection_update.rb +337 -0
  387. data/lib/norbelys/models/smtp_sender_input.rb +403 -0
  388. data/lib/norbelys/models/static_email_variant_content.rb +312 -0
  389. data/lib/norbelys/models/step_with_variants.rb +591 -0
  390. data/lib/norbelys/models/suppression.rb +331 -0
  391. data/lib/norbelys/models/suppression_bulk_params.rb +262 -0
  392. data/lib/norbelys/models/suppression_bulk_result.rb +241 -0
  393. data/lib/norbelys/models/suppression_create_params.rb +305 -0
  394. data/lib/norbelys/models/suppression_list.rb +293 -0
  395. data/lib/norbelys/models/suppression_scope.rb +40 -0
  396. data/lib/norbelys/models/sync_model.rb +41 -0
  397. data/lib/norbelys/models/team_size.rb +43 -0
  398. data/lib/norbelys/models/tracking_dns_record.rb +252 -0
  399. data/lib/norbelys/models/update_sender_input.rb +481 -0
  400. data/lib/norbelys/models/usage_meter.rb +286 -0
  401. data/lib/norbelys/models/usage_plan.rb +257 -0
  402. data/lib/norbelys/models/variant.rb +385 -0
  403. data/lib/norbelys/models/variant_ai.rb +314 -0
  404. data/lib/norbelys/models/verify_email_input.rb +251 -0
  405. data/lib/norbelys/models/verify_mx.rb +254 -0
  406. data/lib/norbelys/models/verify_reachability.rb +42 -0
  407. data/lib/norbelys/models/verify_reason_code.rb +52 -0
  408. data/lib/norbelys/models/verify_result.rb +426 -0
  409. data/lib/norbelys/models/verify_signals.rb +308 -0
  410. data/lib/norbelys/models/verify_syntax.rb +257 -0
  411. data/lib/norbelys/models/voice_sender_input.rb +388 -0
  412. data/lib/norbelys/models/warmup_runtime_status.rb +440 -0
  413. data/lib/norbelys/models/warmup_settings.rb +562 -0
  414. data/lib/norbelys/models/warmup_template.rb +295 -0
  415. data/lib/norbelys/models/warmup_today_tally.rb +314 -0
  416. data/lib/norbelys/version.rb +15 -0
  417. data/lib/norbelys.rb +243 -0
  418. data/norbelys.gemspec +39 -0
  419. data/spec/api/analytics_api_spec.rb +48 -0
  420. data/spec/api/domains_api_spec.rb +128 -0
  421. data/spec/api/fields_api_spec.rb +85 -0
  422. data/spec/api/files_api_spec.rb +48 -0
  423. data/spec/api/groups_api_spec.rb +127 -0
  424. data/spec/api/integrations_api_spec.rb +124 -0
  425. data/spec/api/messages_api_spec.rb +139 -0
  426. data/spec/api/organization_api_spec.rb +92 -0
  427. data/spec/api/people_api_spec.rb +158 -0
  428. data/spec/api/programs_api_spec.rb +270 -0
  429. data/spec/api/segments_api_spec.rb +100 -0
  430. data/spec/api/senders_api_spec.rb +130 -0
  431. data/spec/api/suppressions_api_spec.rb +98 -0
  432. data/spec/api/verify_api_spec.rb +48 -0
  433. data/spec/models/add_program_sender_params_spec.rb +36 -0
  434. data/spec/models/ai_email_variant_content_spec.rb +66 -0
  435. data/spec/models/analytics_query_name_spec.rb +30 -0
  436. data/spec/models/analytics_query_params_spec.rb +136 -0
  437. data/spec/models/analytics_query_result_spec.rb +42 -0
  438. data/spec/models/analytics_query_spec.rb +42 -0
  439. data/spec/models/api_error_detail_spec.rb +64 -0
  440. data/spec/models/api_error_spec.rb +36 -0
  441. data/spec/models/audience_activity_action_spec.rb +30 -0
  442. data/spec/models/audience_activity_condition_spec.rb +42 -0
  443. data/spec/models/audience_activity_link_filter_spec.rb +42 -0
  444. data/spec/models/audience_activity_link_match_op_spec.rb +30 -0
  445. data/spec/models/audience_activity_params_spec.rb +78 -0
  446. data/spec/models/audience_attribute_condition_spec.rb +48 -0
  447. data/spec/models/audience_condition_op_spec.rb +30 -0
  448. data/spec/models/audience_condition_value_spec.rb +21 -0
  449. data/spec/models/audience_filter_spec.rb +42 -0
  450. data/spec/models/audience_match_spec.rb +30 -0
  451. data/spec/models/audience_rule_spec.rb +21 -0
  452. data/spec/models/audience_source_spec.rb +64 -0
  453. data/spec/models/audience_status_breakdown_spec.rb +46 -0
  454. data/spec/models/audience_summary_spec.rb +60 -0
  455. data/spec/models/audience_week_point_spec.rb +42 -0
  456. data/spec/models/bulk_update_sender_patch_spec.rb +88 -0
  457. data/spec/models/bulk_update_senders_input_spec.rb +42 -0
  458. data/spec/models/bulk_update_senders_result_spec.rb +54 -0
  459. data/spec/models/campaign_report_share_spec.rb +48 -0
  460. data/spec/models/collection_address_spec.rb +70 -0
  461. data/spec/models/connection_settings_spec.rb +52 -0
  462. data/spec/models/create_sender_input_spec.rb +21 -0
  463. data/spec/models/detach_result_spec.rb +36 -0
  464. data/spec/models/dmarc_record_to_publish_spec.rb +48 -0
  465. data/spec/models/domain_age_spec.rb +76 -0
  466. data/spec/models/domain_capacity_spec.rb +70 -0
  467. data/spec/models/domain_create_params_spec.rb +58 -0
  468. data/spec/models/domain_detail_spec.rb +112 -0
  469. data/spec/models/domain_health_spec.rb +62 -0
  470. data/spec/models/domain_list_spec.rb +60 -0
  471. data/spec/models/domain_monitoring_params_spec.rb +46 -0
  472. data/spec/models/domain_monitoring_spec.rb +84 -0
  473. data/spec/models/domain_sending_policy_params_spec.rb +82 -0
  474. data/spec/models/domain_sending_policy_spec.rb +94 -0
  475. data/spec/models/domain_sending_spec.rb +60 -0
  476. data/spec/models/domain_sending_update_params_spec.rb +42 -0
  477. data/spec/models/domain_spec.rb +100 -0
  478. data/spec/models/domain_tracking_params_spec.rb +48 -0
  479. data/spec/models/domain_tracking_spec.rb +160 -0
  480. data/spec/models/domain_tracking_update_params_spec.rb +58 -0
  481. data/spec/models/domain_update_params_spec.rb +48 -0
  482. data/spec/models/email_variant_content_spec.rb +21 -0
  483. data/spec/models/enroll_program_params_spec.rb +70 -0
  484. data/spec/models/enroll_program_result_spec.rb +66 -0
  485. data/spec/models/enrollment_counts_spec.rb +114 -0
  486. data/spec/models/enrollment_list_spec.rb +66 -0
  487. data/spec/models/enrollment_person_ref_spec.rb +48 -0
  488. data/spec/models/enrollment_program_ref_spec.rb +42 -0
  489. data/spec/models/enrollment_spec.rb +112 -0
  490. data/spec/models/features_spec.rb +36 -0
  491. data/spec/models/field_create_params_spec.rb +64 -0
  492. data/spec/models/field_list_spec.rb +42 -0
  493. data/spec/models/field_spec.rb +96 -0
  494. data/spec/models/field_type_spec.rb +30 -0
  495. data/spec/models/field_update_params_spec.rb +58 -0
  496. data/spec/models/file_object_spec.rb +66 -0
  497. data/spec/models/file_upload_spec.rb +48 -0
  498. data/spec/models/group_add_members_params_spec.rb +42 -0
  499. data/spec/models/group_add_members_result_spec.rb +48 -0
  500. data/spec/models/group_create_params_spec.rb +48 -0
  501. data/spec/models/group_list_spec.rb +60 -0
  502. data/spec/models/group_spec.rb +84 -0
  503. data/spec/models/group_update_params_spec.rb +48 -0
  504. data/spec/models/imap_connection_update_spec.rb +52 -0
  505. data/spec/models/inbound_message_spec.rb +130 -0
  506. data/spec/models/integration_config_spec.rb +60 -0
  507. data/spec/models/integration_connect_params_spec.rb +36 -0
  508. data/spec/models/integration_connect_result_spec.rb +36 -0
  509. data/spec/models/integration_list_spec.rb +60 -0
  510. data/spec/models/integration_notify_config_spec.rb +54 -0
  511. data/spec/models/integration_options_spec.rb +36 -0
  512. data/spec/models/integration_provider_spec.rb +30 -0
  513. data/spec/models/integration_spec.rb +84 -0
  514. data/spec/models/integration_status_spec.rb +30 -0
  515. data/spec/models/integration_sync_result_spec.rb +36 -0
  516. data/spec/models/integration_update_params_spec.rb +36 -0
  517. data/spec/models/launch_program_params_spec.rb +36 -0
  518. data/spec/models/launch_program_result_spec.rb +52 -0
  519. data/spec/models/message_address_spec.rb +42 -0
  520. data/spec/models/message_attachment_download_spec.rb +78 -0
  521. data/spec/models/message_attachment_input_spec.rb +48 -0
  522. data/spec/models/message_attachment_list_spec.rb +48 -0
  523. data/spec/models/message_attachment_spec.rb +66 -0
  524. data/spec/models/message_create_params_spec.rb +21 -0
  525. data/spec/models/message_enroll_params_spec.rb +60 -0
  526. data/spec/models/message_list_spec.rb +60 -0
  527. data/spec/models/message_reply_params_spec.rb +102 -0
  528. data/spec/models/message_source_attachment_spec.rb +48 -0
  529. data/spec/models/message_source_spec.rb +90 -0
  530. data/spec/models/message_spec.rb +21 -0
  531. data/spec/models/message_test_params_spec.rb +102 -0
  532. data/spec/models/message_update_params_spec.rb +52 -0
  533. data/spec/models/monthly_email_usage_meter_spec.rb +58 -0
  534. data/spec/models/organization_alerts_params_spec.rb +36 -0
  535. data/spec/models/organization_alerts_spec.rb +36 -0
  536. data/spec/models/organization_bounce_policy_params_spec.rb +42 -0
  537. data/spec/models/organization_bounce_policy_spec.rb +42 -0
  538. data/spec/models/organization_onboarding_spec.rb +42 -0
  539. data/spec/models/organization_profile_params_spec.rb +52 -0
  540. data/spec/models/organization_profile_spec.rb +48 -0
  541. data/spec/models/organization_pulse_spec.rb +66 -0
  542. data/spec/models/organization_spec.rb +72 -0
  543. data/spec/models/organization_update_params_spec.rb +54 -0
  544. data/spec/models/organization_usage_spec.rb +60 -0
  545. data/spec/models/outbound_message_spec.rb +128 -0
  546. data/spec/models/people_bulk_create_params_spec.rb +70 -0
  547. data/spec/models/people_bulk_create_result_spec.rb +84 -0
  548. data/spec/models/person_create_params_spec.rb +76 -0
  549. data/spec/models/person_detail_spec.rb +170 -0
  550. data/spec/models/person_erased_spec.rb +42 -0
  551. data/spec/models/person_group_ref_spec.rb +48 -0
  552. data/spec/models/person_import_item_spec.rb +76 -0
  553. data/spec/models/person_import_reason_spec.rb +52 -0
  554. data/spec/models/person_import_stats_spec.rb +94 -0
  555. data/spec/models/person_list_item_spec.rb +140 -0
  556. data/spec/models/person_list_spec.rb +60 -0
  557. data/spec/models/person_segment_ref_spec.rb +48 -0
  558. data/spec/models/person_spec.rb +146 -0
  559. data/spec/models/person_update_params_spec.rb +76 -0
  560. data/spec/models/program_create_params_spec.rb +180 -0
  561. data/spec/models/program_detail_spec.rb +254 -0
  562. data/spec/models/program_list_item_spec.rb +242 -0
  563. data/spec/models/program_list_spec.rb +60 -0
  564. data/spec/models/program_pause_meta_spec.rb +42 -0
  565. data/spec/models/program_sender_ref_spec.rb +60 -0
  566. data/spec/models/program_spec.rb +236 -0
  567. data/spec/models/program_stats_spec.rb +48 -0
  568. data/spec/models/program_step_input_spec.rb +108 -0
  569. data/spec/models/program_update_params_spec.rb +180 -0
  570. data/spec/models/program_variant_input_spec.rb +60 -0
  571. data/spec/models/programs_audience_list_spec.rb +60 -0
  572. data/spec/models/programs_senders_list_spec.rb +60 -0
  573. data/spec/models/provider_api_sender_input_spec.rb +96 -0
  574. data/spec/models/pulse_deliverability_spec.rb +72 -0
  575. data/spec/models/pulse_program_spec.rb +112 -0
  576. data/spec/models/pulse_sender_fleet_spec.rb +72 -0
  577. data/spec/models/pulse_value_spec.rb +60 -0
  578. data/spec/models/report_share_spec.rb +48 -0
  579. data/spec/models/segment_create_params_spec.rb +48 -0
  580. data/spec/models/segment_list_spec.rb +60 -0
  581. data/spec/models/segment_spec.rb +78 -0
  582. data/spec/models/segment_update_params_spec.rb +48 -0
  583. data/spec/models/self_hosted_sender_input_spec.rb +90 -0
  584. data/spec/models/sender_bulk_error_spec.rb +42 -0
  585. data/spec/models/sender_detail_spec.rb +212 -0
  586. data/spec/models/sender_list_spec.rb +60 -0
  587. data/spec/models/sender_remove_result_spec.rb +46 -0
  588. data/spec/models/sender_spec.rb +200 -0
  589. data/spec/models/sender_usage_spec.rb +54 -0
  590. data/spec/models/sender_warmup_status_spec.rb +42 -0
  591. data/spec/models/slack_channel_spec.rb +42 -0
  592. data/spec/models/smtp_connection_settings_spec.rb +64 -0
  593. data/spec/models/smtp_connection_update_spec.rb +64 -0
  594. data/spec/models/smtp_sender_input_spec.rb +102 -0
  595. data/spec/models/static_email_variant_content_spec.rb +66 -0
  596. data/spec/models/step_with_variants_spec.rb +136 -0
  597. data/spec/models/suppression_bulk_params_spec.rb +42 -0
  598. data/spec/models/suppression_bulk_result_spec.rb +36 -0
  599. data/spec/models/suppression_create_params_spec.rb +58 -0
  600. data/spec/models/suppression_list_spec.rb +60 -0
  601. data/spec/models/suppression_scope_spec.rb +30 -0
  602. data/spec/models/suppression_spec.rb +78 -0
  603. data/spec/models/sync_model_spec.rb +30 -0
  604. data/spec/models/team_size_spec.rb +30 -0
  605. data/spec/models/tracking_dns_record_spec.rb +48 -0
  606. data/spec/models/update_sender_input_spec.rb +134 -0
  607. data/spec/models/usage_meter_spec.rb +52 -0
  608. data/spec/models/usage_plan_spec.rb +48 -0
  609. data/spec/models/variant_ai_spec.rb +52 -0
  610. data/spec/models/variant_spec.rb +88 -0
  611. data/spec/models/verify_email_input_spec.rb +36 -0
  612. data/spec/models/verify_mx_spec.rb +48 -0
  613. data/spec/models/verify_reachability_spec.rb +30 -0
  614. data/spec/models/verify_reason_code_spec.rb +30 -0
  615. data/spec/models/verify_result_spec.rb +96 -0
  616. data/spec/models/verify_signals_spec.rb +66 -0
  617. data/spec/models/verify_syntax_spec.rb +48 -0
  618. data/spec/models/voice_sender_input_spec.rb +96 -0
  619. data/spec/models/warmup_runtime_status_spec.rb +86 -0
  620. data/spec/models/warmup_settings_spec.rb +118 -0
  621. data/spec/models/warmup_template_spec.rb +42 -0
  622. data/spec/models/warmup_today_tally_spec.rb +48 -0
  623. data/spec/spec_helper.rb +111 -0
  624. metadata +935 -0
@@ -0,0 +1,911 @@
1
+ =begin
2
+ #Norbelys API
3
+
4
+ #The **Norbelys API** is a single, predictable REST surface for cold email and outreach — people, senders, programs, and sending all live behind the five patterns below. Developer-first and AI-first: every name is either already invented (Schema.org) or obvious. ## Authentication Every request authenticates with an **org-scoped API key**. Create one in **Settings → API keys** and send it as a bearer token: ```http GET https://api.norbelys.com/v1/people Authorization: Bearer ak_live_… ``` Interactive agents may instead use OAuth 2.1 (see `/auth.md` and the `/.well-known/oauth-protected-resource` metadata). ## Conventions - **Base URL** — `https://api.norbelys.com/v1`. - **JSON in, JSON out.** Timestamps are ISO-8601 in UTC. - **Cursor pagination.** List endpoints take `limit` + `cursor` and return `{ data, hasMore, nextCursor }` (offset-paged tables add `page` + `total`). - **Expansions.** Detail GETs take an `expand[]` query param to inline related data (e.g. `GET /people/{id}?expand[]=timeline`) instead of extra calls. - **Soft deletes.** Anything that has been used is archived, never hard-deleted — `DELETE` archives the resource and returns it. ## Errors Failures return the same envelope on every 4xx/5xx, with the matching HTTP status: ```json { \"error\": { \"type\": \"invalid_request\", \"code\": \"invalid_param\", \"message\": \"…\", \"hint\": \"…\", \"doc_url\": \"…\" } } ``` `type` is a broad, machine-routable category derived from the status; `code` is the stable machine contract you branch on (never the human `message`). See the `ApiError` schema. ## Idempotency Every `POST` accepts an optional **`Idempotency-Key`** header. Reuse the same key to replay the original result for 24h instead of re-executing — so a retried create can never double-charge or duplicate a record. ## Rate limits & versioning Abuse control is enforced at the edge; responses advertise the policy via the `RateLimit-Policy` header, and a `429` carries `Retry-After`. The API is versioned in the URL path (`/v1`). Breaking changes ship under a new version; a retiring surface is announced with `Deprecation` + `Sunset` response headers at least 90 days ahead.
5
+
6
+ The version of the OpenAPI document: 0.0.1
7
+
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.10.0
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ module Norbelys
17
+ class ProgramDetail
18
+ attr_accessor :active_days
19
+
20
+ # Attach RFC 8058 one-click unsubscribe headers + footer.
21
+ attr_accessor :add_unsubscribe
22
+
23
+ attr_accessor :archived_at
24
+
25
+ # Pause every lead at a company once one of them replies.
26
+ attr_accessor :auto_pause_on_company_reply
27
+
28
+ # Auto-pause when the bounce rate reaches this percent; 0 disables.
29
+ attr_accessor :bounce_pause_threshold
30
+
31
+ attr_accessor :created_at
32
+
33
+ # The program id.
34
+ attr_accessor :id
35
+
36
+ # Random extra wait per send, upper bound (seconds).
37
+ attr_accessor :jitter_max_seconds
38
+
39
+ # Random extra wait per send, lower bound (seconds).
40
+ attr_accessor :jitter_min_seconds
41
+
42
+ # Kind of sending; `cold_sequence` is the only kind today.
43
+ attr_accessor :kind
44
+
45
+ # Display name.
46
+ attr_accessor :name
47
+
48
+ # New leads started per day for the WHOLE campaign, shared across all its mailboxes (follow-ups are not counted). 0 = no daily cap — new leads flow at mailbox capacity. Real throughput is always bounded by the mailboxes' own daily limits.
49
+ attr_accessor :new_per_day
50
+
51
+ attr_accessor :object
52
+
53
+ attr_accessor :paused_at
54
+
55
+ attr_accessor :paused_meta
56
+
57
+ attr_accessor :paused_reason
58
+
59
+ # Send the body as plain text only: no HTML part, open pixel, or link tracking.
60
+ attr_accessor :plain_text_mode
61
+
62
+ # Minutes between sends from one mailbox.
63
+ attr_accessor :send_interval_minutes
64
+
65
+ # Auto-pause when the spam-complaint rate reaches this percent; 0 disables.
66
+ attr_accessor :spam_pause_threshold
67
+
68
+ attr_accessor :start_date
69
+
70
+ # Lifecycle status: `draft`, `active`, `paused`, `done`.
71
+ attr_accessor :status
72
+
73
+ # Engagement that pulls a lead out of the cadence: `reply`, `click`, `open`, `none`.
74
+ attr_accessor :stop_condition
75
+
76
+ # IANA timezone the window applies in.
77
+ attr_accessor :timezone
78
+
79
+ # Rewrite links to track clicks.
80
+ attr_accessor :track_clicks
81
+
82
+ attr_accessor :tracking_domain_id
83
+
84
+ # Insert the open pixel.
85
+ attr_accessor :track_opens
86
+
87
+ attr_accessor :unsubscribe_text
88
+
89
+ attr_accessor :updated_at
90
+
91
+ # How A/B arms are spread across leads with no decided winner: `pattern` (deterministic per-lead hash) or `random` (independent roll per lead).
92
+ attr_accessor :variant_distribution
93
+
94
+ attr_accessor :window_from
95
+
96
+ attr_accessor :window_to
97
+
98
+ attr_accessor :stats
99
+
100
+ # The attached mailboxes — present when expand[]=senders.
101
+ attr_accessor :senders
102
+
103
+ # The cadence with arms — present when expand[]=steps (always returned by create/update).
104
+ attr_accessor :steps
105
+
106
+ class EnumAttributeValidator
107
+ attr_reader :datatype
108
+ attr_reader :allowable_values
109
+
110
+ def initialize(datatype, allowable_values)
111
+ @allowable_values = allowable_values.map do |value|
112
+ case datatype.to_s
113
+ when /Integer/i
114
+ value.to_i
115
+ when /Float/i
116
+ value.to_f
117
+ else
118
+ value
119
+ end
120
+ end
121
+ end
122
+
123
+ def valid?(value)
124
+ !value || allowable_values.include?(value)
125
+ end
126
+ end
127
+
128
+ # Attribute mapping from ruby-style variable name to JSON key.
129
+ def self.attribute_map
130
+ {
131
+ :'active_days' => :'activeDays',
132
+ :'add_unsubscribe' => :'addUnsubscribe',
133
+ :'archived_at' => :'archivedAt',
134
+ :'auto_pause_on_company_reply' => :'autoPauseOnCompanyReply',
135
+ :'bounce_pause_threshold' => :'bouncePauseThreshold',
136
+ :'created_at' => :'createdAt',
137
+ :'id' => :'id',
138
+ :'jitter_max_seconds' => :'jitterMaxSeconds',
139
+ :'jitter_min_seconds' => :'jitterMinSeconds',
140
+ :'kind' => :'kind',
141
+ :'name' => :'name',
142
+ :'new_per_day' => :'newPerDay',
143
+ :'object' => :'object',
144
+ :'paused_at' => :'pausedAt',
145
+ :'paused_meta' => :'pausedMeta',
146
+ :'paused_reason' => :'pausedReason',
147
+ :'plain_text_mode' => :'plainTextMode',
148
+ :'send_interval_minutes' => :'sendIntervalMinutes',
149
+ :'spam_pause_threshold' => :'spamPauseThreshold',
150
+ :'start_date' => :'startDate',
151
+ :'status' => :'status',
152
+ :'stop_condition' => :'stopCondition',
153
+ :'timezone' => :'timezone',
154
+ :'track_clicks' => :'trackClicks',
155
+ :'tracking_domain_id' => :'trackingDomainId',
156
+ :'track_opens' => :'trackOpens',
157
+ :'unsubscribe_text' => :'unsubscribeText',
158
+ :'updated_at' => :'updatedAt',
159
+ :'variant_distribution' => :'variantDistribution',
160
+ :'window_from' => :'windowFrom',
161
+ :'window_to' => :'windowTo',
162
+ :'stats' => :'stats',
163
+ :'senders' => :'senders',
164
+ :'steps' => :'steps'
165
+ }
166
+ end
167
+
168
+ # Returns all the JSON keys this model knows about
169
+ def self.acceptable_attributes
170
+ attribute_map.values
171
+ end
172
+
173
+ # Attribute type mapping.
174
+ def self.openapi_types
175
+ {
176
+ :'active_days' => :'Array<Integer>',
177
+ :'add_unsubscribe' => :'Boolean',
178
+ :'archived_at' => :'Object',
179
+ :'auto_pause_on_company_reply' => :'Boolean',
180
+ :'bounce_pause_threshold' => :'Float',
181
+ :'created_at' => :'Object',
182
+ :'id' => :'String',
183
+ :'jitter_max_seconds' => :'Integer',
184
+ :'jitter_min_seconds' => :'Integer',
185
+ :'kind' => :'String',
186
+ :'name' => :'String',
187
+ :'new_per_day' => :'Integer',
188
+ :'object' => :'Object',
189
+ :'paused_at' => :'Object',
190
+ :'paused_meta' => :'ProgramPauseMeta',
191
+ :'paused_reason' => :'String',
192
+ :'plain_text_mode' => :'Boolean',
193
+ :'send_interval_minutes' => :'Integer',
194
+ :'spam_pause_threshold' => :'Float',
195
+ :'start_date' => :'Object',
196
+ :'status' => :'String',
197
+ :'stop_condition' => :'String',
198
+ :'timezone' => :'String',
199
+ :'track_clicks' => :'Boolean',
200
+ :'tracking_domain_id' => :'String',
201
+ :'track_opens' => :'Boolean',
202
+ :'unsubscribe_text' => :'String',
203
+ :'updated_at' => :'Object',
204
+ :'variant_distribution' => :'String',
205
+ :'window_from' => :'String',
206
+ :'window_to' => :'String',
207
+ :'stats' => :'ProgramStats',
208
+ :'senders' => :'Array<ProgramSenderRef>',
209
+ :'steps' => :'Array<StepWithVariants>'
210
+ }
211
+ end
212
+
213
+ # List of attributes with nullable: true
214
+ def self.openapi_nullable
215
+ Set.new([
216
+ :'active_days',
217
+ :'archived_at',
218
+ :'created_at',
219
+ :'object',
220
+ :'paused_at',
221
+ :'paused_meta',
222
+ :'paused_reason',
223
+ :'start_date',
224
+ :'tracking_domain_id',
225
+ :'unsubscribe_text',
226
+ :'updated_at',
227
+ :'window_from',
228
+ :'window_to',
229
+ ])
230
+ end
231
+
232
+ # Initializes the object
233
+ # @param [Hash] attributes Model attributes in the form of hash
234
+ def initialize(attributes = {})
235
+ if (!attributes.is_a?(Hash))
236
+ fail ArgumentError, "The input argument (attributes) must be a hash in `Norbelys::ProgramDetail` initialize method"
237
+ end
238
+
239
+ # check to see if the attribute exists and convert string to symbol for hash key
240
+ attributes = attributes.each_with_object({}) { |(k, v), h|
241
+ if (!self.class.attribute_map.key?(k.to_sym))
242
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Norbelys::ProgramDetail`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
243
+ end
244
+ h[k.to_sym] = v
245
+ }
246
+
247
+ if attributes.key?(:'active_days')
248
+ if (value = attributes[:'active_days']).is_a?(Array)
249
+ self.active_days = value
250
+ end
251
+ else
252
+ self.active_days = nil
253
+ end
254
+
255
+ if attributes.key?(:'add_unsubscribe')
256
+ self.add_unsubscribe = attributes[:'add_unsubscribe']
257
+ else
258
+ self.add_unsubscribe = nil
259
+ end
260
+
261
+ if attributes.key?(:'archived_at')
262
+ self.archived_at = attributes[:'archived_at']
263
+ end
264
+
265
+ if attributes.key?(:'auto_pause_on_company_reply')
266
+ self.auto_pause_on_company_reply = attributes[:'auto_pause_on_company_reply']
267
+ else
268
+ self.auto_pause_on_company_reply = nil
269
+ end
270
+
271
+ if attributes.key?(:'bounce_pause_threshold')
272
+ self.bounce_pause_threshold = attributes[:'bounce_pause_threshold']
273
+ else
274
+ self.bounce_pause_threshold = nil
275
+ end
276
+
277
+ if attributes.key?(:'created_at')
278
+ self.created_at = attributes[:'created_at']
279
+ end
280
+
281
+ if attributes.key?(:'id')
282
+ self.id = attributes[:'id']
283
+ else
284
+ self.id = nil
285
+ end
286
+
287
+ if attributes.key?(:'jitter_max_seconds')
288
+ self.jitter_max_seconds = attributes[:'jitter_max_seconds']
289
+ else
290
+ self.jitter_max_seconds = nil
291
+ end
292
+
293
+ if attributes.key?(:'jitter_min_seconds')
294
+ self.jitter_min_seconds = attributes[:'jitter_min_seconds']
295
+ else
296
+ self.jitter_min_seconds = nil
297
+ end
298
+
299
+ if attributes.key?(:'kind')
300
+ self.kind = attributes[:'kind']
301
+ else
302
+ self.kind = nil
303
+ end
304
+
305
+ if attributes.key?(:'name')
306
+ self.name = attributes[:'name']
307
+ else
308
+ self.name = nil
309
+ end
310
+
311
+ if attributes.key?(:'new_per_day')
312
+ self.new_per_day = attributes[:'new_per_day']
313
+ else
314
+ self.new_per_day = nil
315
+ end
316
+
317
+ if attributes.key?(:'object')
318
+ self.object = attributes[:'object']
319
+ end
320
+
321
+ if attributes.key?(:'paused_at')
322
+ self.paused_at = attributes[:'paused_at']
323
+ end
324
+
325
+ if attributes.key?(:'paused_meta')
326
+ self.paused_meta = attributes[:'paused_meta']
327
+ else
328
+ self.paused_meta = nil
329
+ end
330
+
331
+ if attributes.key?(:'paused_reason')
332
+ self.paused_reason = attributes[:'paused_reason']
333
+ else
334
+ self.paused_reason = nil
335
+ end
336
+
337
+ if attributes.key?(:'plain_text_mode')
338
+ self.plain_text_mode = attributes[:'plain_text_mode']
339
+ else
340
+ self.plain_text_mode = nil
341
+ end
342
+
343
+ if attributes.key?(:'send_interval_minutes')
344
+ self.send_interval_minutes = attributes[:'send_interval_minutes']
345
+ else
346
+ self.send_interval_minutes = nil
347
+ end
348
+
349
+ if attributes.key?(:'spam_pause_threshold')
350
+ self.spam_pause_threshold = attributes[:'spam_pause_threshold']
351
+ else
352
+ self.spam_pause_threshold = nil
353
+ end
354
+
355
+ if attributes.key?(:'start_date')
356
+ self.start_date = attributes[:'start_date']
357
+ end
358
+
359
+ if attributes.key?(:'status')
360
+ self.status = attributes[:'status']
361
+ else
362
+ self.status = nil
363
+ end
364
+
365
+ if attributes.key?(:'stop_condition')
366
+ self.stop_condition = attributes[:'stop_condition']
367
+ else
368
+ self.stop_condition = nil
369
+ end
370
+
371
+ if attributes.key?(:'timezone')
372
+ self.timezone = attributes[:'timezone']
373
+ else
374
+ self.timezone = nil
375
+ end
376
+
377
+ if attributes.key?(:'track_clicks')
378
+ self.track_clicks = attributes[:'track_clicks']
379
+ else
380
+ self.track_clicks = nil
381
+ end
382
+
383
+ if attributes.key?(:'tracking_domain_id')
384
+ self.tracking_domain_id = attributes[:'tracking_domain_id']
385
+ else
386
+ self.tracking_domain_id = nil
387
+ end
388
+
389
+ if attributes.key?(:'track_opens')
390
+ self.track_opens = attributes[:'track_opens']
391
+ else
392
+ self.track_opens = nil
393
+ end
394
+
395
+ if attributes.key?(:'unsubscribe_text')
396
+ self.unsubscribe_text = attributes[:'unsubscribe_text']
397
+ else
398
+ self.unsubscribe_text = nil
399
+ end
400
+
401
+ if attributes.key?(:'updated_at')
402
+ self.updated_at = attributes[:'updated_at']
403
+ end
404
+
405
+ if attributes.key?(:'variant_distribution')
406
+ self.variant_distribution = attributes[:'variant_distribution']
407
+ else
408
+ self.variant_distribution = nil
409
+ end
410
+
411
+ if attributes.key?(:'window_from')
412
+ self.window_from = attributes[:'window_from']
413
+ else
414
+ self.window_from = nil
415
+ end
416
+
417
+ if attributes.key?(:'window_to')
418
+ self.window_to = attributes[:'window_to']
419
+ else
420
+ self.window_to = nil
421
+ end
422
+
423
+ if attributes.key?(:'stats')
424
+ self.stats = attributes[:'stats']
425
+ else
426
+ self.stats = nil
427
+ end
428
+
429
+ if attributes.key?(:'senders')
430
+ if (value = attributes[:'senders']).is_a?(Array)
431
+ self.senders = value
432
+ end
433
+ end
434
+
435
+ if attributes.key?(:'steps')
436
+ if (value = attributes[:'steps']).is_a?(Array)
437
+ self.steps = value
438
+ end
439
+ end
440
+ end
441
+
442
+ # Show invalid properties with the reasons. Usually used together with valid?
443
+ # @return Array for valid properties with the reasons
444
+ def list_invalid_properties
445
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
446
+ invalid_properties = Array.new
447
+ if @add_unsubscribe.nil?
448
+ invalid_properties.push('invalid value for "add_unsubscribe", add_unsubscribe cannot be nil.')
449
+ end
450
+
451
+ if @auto_pause_on_company_reply.nil?
452
+ invalid_properties.push('invalid value for "auto_pause_on_company_reply", auto_pause_on_company_reply cannot be nil.')
453
+ end
454
+
455
+ if @bounce_pause_threshold.nil?
456
+ invalid_properties.push('invalid value for "bounce_pause_threshold", bounce_pause_threshold cannot be nil.')
457
+ end
458
+
459
+ if @bounce_pause_threshold > 100
460
+ invalid_properties.push('invalid value for "bounce_pause_threshold", must be smaller than or equal to 100.')
461
+ end
462
+
463
+ if @bounce_pause_threshold < 0
464
+ invalid_properties.push('invalid value for "bounce_pause_threshold", must be greater than or equal to 0.')
465
+ end
466
+
467
+ if @id.nil?
468
+ invalid_properties.push('invalid value for "id", id cannot be nil.')
469
+ end
470
+
471
+ if @jitter_max_seconds.nil?
472
+ invalid_properties.push('invalid value for "jitter_max_seconds", jitter_max_seconds cannot be nil.')
473
+ end
474
+
475
+ if @jitter_max_seconds < 0
476
+ invalid_properties.push('invalid value for "jitter_max_seconds", must be greater than or equal to 0.')
477
+ end
478
+
479
+ if @jitter_min_seconds.nil?
480
+ invalid_properties.push('invalid value for "jitter_min_seconds", jitter_min_seconds cannot be nil.')
481
+ end
482
+
483
+ if @jitter_min_seconds < 0
484
+ invalid_properties.push('invalid value for "jitter_min_seconds", must be greater than or equal to 0.')
485
+ end
486
+
487
+ if @kind.nil?
488
+ invalid_properties.push('invalid value for "kind", kind cannot be nil.')
489
+ end
490
+
491
+ if @name.nil?
492
+ invalid_properties.push('invalid value for "name", name cannot be nil.')
493
+ end
494
+
495
+ if @new_per_day.nil?
496
+ invalid_properties.push('invalid value for "new_per_day", new_per_day cannot be nil.')
497
+ end
498
+
499
+ if @new_per_day < 0
500
+ invalid_properties.push('invalid value for "new_per_day", must be greater than or equal to 0.')
501
+ end
502
+
503
+ if @plain_text_mode.nil?
504
+ invalid_properties.push('invalid value for "plain_text_mode", plain_text_mode cannot be nil.')
505
+ end
506
+
507
+ if @send_interval_minutes.nil?
508
+ invalid_properties.push('invalid value for "send_interval_minutes", send_interval_minutes cannot be nil.')
509
+ end
510
+
511
+ if @send_interval_minutes < 0
512
+ invalid_properties.push('invalid value for "send_interval_minutes", must be greater than or equal to 0.')
513
+ end
514
+
515
+ if @spam_pause_threshold.nil?
516
+ invalid_properties.push('invalid value for "spam_pause_threshold", spam_pause_threshold cannot be nil.')
517
+ end
518
+
519
+ if @spam_pause_threshold > 100
520
+ invalid_properties.push('invalid value for "spam_pause_threshold", must be smaller than or equal to 100.')
521
+ end
522
+
523
+ if @spam_pause_threshold < 0
524
+ invalid_properties.push('invalid value for "spam_pause_threshold", must be greater than or equal to 0.')
525
+ end
526
+
527
+ if @status.nil?
528
+ invalid_properties.push('invalid value for "status", status cannot be nil.')
529
+ end
530
+
531
+ if @stop_condition.nil?
532
+ invalid_properties.push('invalid value for "stop_condition", stop_condition cannot be nil.')
533
+ end
534
+
535
+ if @timezone.nil?
536
+ invalid_properties.push('invalid value for "timezone", timezone cannot be nil.')
537
+ end
538
+
539
+ if @track_clicks.nil?
540
+ invalid_properties.push('invalid value for "track_clicks", track_clicks cannot be nil.')
541
+ end
542
+
543
+ if @track_opens.nil?
544
+ invalid_properties.push('invalid value for "track_opens", track_opens cannot be nil.')
545
+ end
546
+
547
+ if @variant_distribution.nil?
548
+ invalid_properties.push('invalid value for "variant_distribution", variant_distribution cannot be nil.')
549
+ end
550
+
551
+ if @stats.nil?
552
+ invalid_properties.push('invalid value for "stats", stats cannot be nil.')
553
+ end
554
+
555
+ invalid_properties
556
+ end
557
+
558
+ # Check to see if the all the properties in the model are valid
559
+ # @return true if the model is valid
560
+ def valid?
561
+ warn '[DEPRECATED] the `valid?` method is obsolete'
562
+ return false if @add_unsubscribe.nil?
563
+ return false if @auto_pause_on_company_reply.nil?
564
+ return false if @bounce_pause_threshold.nil?
565
+ return false if @bounce_pause_threshold > 100
566
+ return false if @bounce_pause_threshold < 0
567
+ return false if @id.nil?
568
+ return false if @jitter_max_seconds.nil?
569
+ return false if @jitter_max_seconds < 0
570
+ return false if @jitter_min_seconds.nil?
571
+ return false if @jitter_min_seconds < 0
572
+ return false if @kind.nil?
573
+ kind_validator = EnumAttributeValidator.new('String', ["cold_sequence"])
574
+ return false unless kind_validator.valid?(@kind)
575
+ return false if @name.nil?
576
+ return false if @new_per_day.nil?
577
+ return false if @new_per_day < 0
578
+ paused_reason_validator = EnumAttributeValidator.new('String', ["manual", "bounce_rate", "spam_rate", "orphaned_sender"])
579
+ return false unless paused_reason_validator.valid?(@paused_reason)
580
+ return false if @plain_text_mode.nil?
581
+ return false if @send_interval_minutes.nil?
582
+ return false if @send_interval_minutes < 0
583
+ return false if @spam_pause_threshold.nil?
584
+ return false if @spam_pause_threshold > 100
585
+ return false if @spam_pause_threshold < 0
586
+ return false if @status.nil?
587
+ status_validator = EnumAttributeValidator.new('String', ["draft", "active", "paused", "done"])
588
+ return false unless status_validator.valid?(@status)
589
+ return false if @stop_condition.nil?
590
+ stop_condition_validator = EnumAttributeValidator.new('String', ["reply", "click", "open", "none"])
591
+ return false unless stop_condition_validator.valid?(@stop_condition)
592
+ return false if @timezone.nil?
593
+ return false if @track_clicks.nil?
594
+ return false if @track_opens.nil?
595
+ return false if @variant_distribution.nil?
596
+ variant_distribution_validator = EnumAttributeValidator.new('String', ["pattern", "random"])
597
+ return false unless variant_distribution_validator.valid?(@variant_distribution)
598
+ return false if @stats.nil?
599
+ true
600
+ end
601
+
602
+ # Custom attribute writer method with validation
603
+ # @param [Object] bounce_pause_threshold Value to be assigned
604
+ def bounce_pause_threshold=(bounce_pause_threshold)
605
+ if bounce_pause_threshold.nil?
606
+ fail ArgumentError, 'bounce_pause_threshold cannot be nil'
607
+ end
608
+
609
+ if bounce_pause_threshold > 100
610
+ fail ArgumentError, 'invalid value for "bounce_pause_threshold", must be smaller than or equal to 100.'
611
+ end
612
+
613
+ if bounce_pause_threshold < 0
614
+ fail ArgumentError, 'invalid value for "bounce_pause_threshold", must be greater than or equal to 0.'
615
+ end
616
+
617
+ @bounce_pause_threshold = bounce_pause_threshold
618
+ end
619
+
620
+ # Custom attribute writer method with validation
621
+ # @param [Object] jitter_max_seconds Value to be assigned
622
+ def jitter_max_seconds=(jitter_max_seconds)
623
+ if jitter_max_seconds.nil?
624
+ fail ArgumentError, 'jitter_max_seconds cannot be nil'
625
+ end
626
+
627
+ if jitter_max_seconds < 0
628
+ fail ArgumentError, 'invalid value for "jitter_max_seconds", must be greater than or equal to 0.'
629
+ end
630
+
631
+ @jitter_max_seconds = jitter_max_seconds
632
+ end
633
+
634
+ # Custom attribute writer method with validation
635
+ # @param [Object] jitter_min_seconds Value to be assigned
636
+ def jitter_min_seconds=(jitter_min_seconds)
637
+ if jitter_min_seconds.nil?
638
+ fail ArgumentError, 'jitter_min_seconds cannot be nil'
639
+ end
640
+
641
+ if jitter_min_seconds < 0
642
+ fail ArgumentError, 'invalid value for "jitter_min_seconds", must be greater than or equal to 0.'
643
+ end
644
+
645
+ @jitter_min_seconds = jitter_min_seconds
646
+ end
647
+
648
+ # Custom attribute writer method checking allowed values (enum).
649
+ # @param [Object] kind Object to be assigned
650
+ def kind=(kind)
651
+ validator = EnumAttributeValidator.new('String', ["cold_sequence"])
652
+ unless validator.valid?(kind)
653
+ fail ArgumentError, "invalid value for \"kind\", must be one of #{validator.allowable_values}."
654
+ end
655
+ @kind = kind
656
+ end
657
+
658
+ # Custom attribute writer method with validation
659
+ # @param [Object] new_per_day Value to be assigned
660
+ def new_per_day=(new_per_day)
661
+ if new_per_day.nil?
662
+ fail ArgumentError, 'new_per_day cannot be nil'
663
+ end
664
+
665
+ if new_per_day < 0
666
+ fail ArgumentError, 'invalid value for "new_per_day", must be greater than or equal to 0.'
667
+ end
668
+
669
+ @new_per_day = new_per_day
670
+ end
671
+
672
+ # Custom attribute writer method checking allowed values (enum).
673
+ # @param [Object] paused_reason Object to be assigned
674
+ def paused_reason=(paused_reason)
675
+ validator = EnumAttributeValidator.new('String', ["manual", "bounce_rate", "spam_rate", "orphaned_sender"])
676
+ unless validator.valid?(paused_reason)
677
+ fail ArgumentError, "invalid value for \"paused_reason\", must be one of #{validator.allowable_values}."
678
+ end
679
+ @paused_reason = paused_reason
680
+ end
681
+
682
+ # Custom attribute writer method with validation
683
+ # @param [Object] send_interval_minutes Value to be assigned
684
+ def send_interval_minutes=(send_interval_minutes)
685
+ if send_interval_minutes.nil?
686
+ fail ArgumentError, 'send_interval_minutes cannot be nil'
687
+ end
688
+
689
+ if send_interval_minutes < 0
690
+ fail ArgumentError, 'invalid value for "send_interval_minutes", must be greater than or equal to 0.'
691
+ end
692
+
693
+ @send_interval_minutes = send_interval_minutes
694
+ end
695
+
696
+ # Custom attribute writer method with validation
697
+ # @param [Object] spam_pause_threshold Value to be assigned
698
+ def spam_pause_threshold=(spam_pause_threshold)
699
+ if spam_pause_threshold.nil?
700
+ fail ArgumentError, 'spam_pause_threshold cannot be nil'
701
+ end
702
+
703
+ if spam_pause_threshold > 100
704
+ fail ArgumentError, 'invalid value for "spam_pause_threshold", must be smaller than or equal to 100.'
705
+ end
706
+
707
+ if spam_pause_threshold < 0
708
+ fail ArgumentError, 'invalid value for "spam_pause_threshold", must be greater than or equal to 0.'
709
+ end
710
+
711
+ @spam_pause_threshold = spam_pause_threshold
712
+ end
713
+
714
+ # Custom attribute writer method checking allowed values (enum).
715
+ # @param [Object] status Object to be assigned
716
+ def status=(status)
717
+ validator = EnumAttributeValidator.new('String', ["draft", "active", "paused", "done"])
718
+ unless validator.valid?(status)
719
+ fail ArgumentError, "invalid value for \"status\", must be one of #{validator.allowable_values}."
720
+ end
721
+ @status = status
722
+ end
723
+
724
+ # Custom attribute writer method checking allowed values (enum).
725
+ # @param [Object] stop_condition Object to be assigned
726
+ def stop_condition=(stop_condition)
727
+ validator = EnumAttributeValidator.new('String', ["reply", "click", "open", "none"])
728
+ unless validator.valid?(stop_condition)
729
+ fail ArgumentError, "invalid value for \"stop_condition\", must be one of #{validator.allowable_values}."
730
+ end
731
+ @stop_condition = stop_condition
732
+ end
733
+
734
+ # Custom attribute writer method checking allowed values (enum).
735
+ # @param [Object] variant_distribution Object to be assigned
736
+ def variant_distribution=(variant_distribution)
737
+ validator = EnumAttributeValidator.new('String', ["pattern", "random"])
738
+ unless validator.valid?(variant_distribution)
739
+ fail ArgumentError, "invalid value for \"variant_distribution\", must be one of #{validator.allowable_values}."
740
+ end
741
+ @variant_distribution = variant_distribution
742
+ end
743
+
744
+ # Checks equality by comparing each attribute.
745
+ # @param [Object] Object to be compared
746
+ def ==(o)
747
+ return true if self.equal?(o)
748
+ self.class == o.class &&
749
+ active_days == o.active_days &&
750
+ add_unsubscribe == o.add_unsubscribe &&
751
+ archived_at == o.archived_at &&
752
+ auto_pause_on_company_reply == o.auto_pause_on_company_reply &&
753
+ bounce_pause_threshold == o.bounce_pause_threshold &&
754
+ created_at == o.created_at &&
755
+ id == o.id &&
756
+ jitter_max_seconds == o.jitter_max_seconds &&
757
+ jitter_min_seconds == o.jitter_min_seconds &&
758
+ kind == o.kind &&
759
+ name == o.name &&
760
+ new_per_day == o.new_per_day &&
761
+ object == o.object &&
762
+ paused_at == o.paused_at &&
763
+ paused_meta == o.paused_meta &&
764
+ paused_reason == o.paused_reason &&
765
+ plain_text_mode == o.plain_text_mode &&
766
+ send_interval_minutes == o.send_interval_minutes &&
767
+ spam_pause_threshold == o.spam_pause_threshold &&
768
+ start_date == o.start_date &&
769
+ status == o.status &&
770
+ stop_condition == o.stop_condition &&
771
+ timezone == o.timezone &&
772
+ track_clicks == o.track_clicks &&
773
+ tracking_domain_id == o.tracking_domain_id &&
774
+ track_opens == o.track_opens &&
775
+ unsubscribe_text == o.unsubscribe_text &&
776
+ updated_at == o.updated_at &&
777
+ variant_distribution == o.variant_distribution &&
778
+ window_from == o.window_from &&
779
+ window_to == o.window_to &&
780
+ stats == o.stats &&
781
+ senders == o.senders &&
782
+ steps == o.steps
783
+ end
784
+
785
+ # @see the `==` method
786
+ # @param [Object] Object to be compared
787
+ def eql?(o)
788
+ self == o
789
+ end
790
+
791
+ # Calculates hash code according to all attributes.
792
+ # @return [Integer] Hash code
793
+ def hash
794
+ [active_days, add_unsubscribe, archived_at, auto_pause_on_company_reply, bounce_pause_threshold, created_at, id, jitter_max_seconds, jitter_min_seconds, kind, name, new_per_day, object, paused_at, paused_meta, paused_reason, plain_text_mode, send_interval_minutes, spam_pause_threshold, start_date, status, stop_condition, timezone, track_clicks, tracking_domain_id, track_opens, unsubscribe_text, updated_at, variant_distribution, window_from, window_to, stats, senders, steps].hash
795
+ end
796
+
797
+ # Builds the object from hash
798
+ # @param [Hash] attributes Model attributes in the form of hash
799
+ # @return [Object] Returns the model itself
800
+ def self.build_from_hash(attributes)
801
+ return nil unless attributes.is_a?(Hash)
802
+ attributes = attributes.transform_keys(&:to_sym)
803
+ transformed_hash = {}
804
+ openapi_types.each_pair do |key, type|
805
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
806
+ transformed_hash["#{key}"] = nil
807
+ elsif type =~ /\AArray<(.*)>/i
808
+ # check to ensure the input is an array given that the attribute
809
+ # is documented as an array but the input is not
810
+ if attributes[attribute_map[key]].is_a?(Array)
811
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
812
+ end
813
+ elsif !attributes[attribute_map[key]].nil?
814
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
815
+ end
816
+ end
817
+ new(transformed_hash)
818
+ end
819
+
820
+ # Deserializes the data based on type
821
+ # @param string type Data type
822
+ # @param string value Value to be deserialized
823
+ # @return [Object] Deserialized data
824
+ def self._deserialize(type, value)
825
+ case type.to_sym
826
+ when :Time
827
+ Time.parse(value)
828
+ when :Date
829
+ Date.parse(value)
830
+ when :String
831
+ value.to_s
832
+ when :Integer
833
+ value.to_i
834
+ when :Float
835
+ value.to_f
836
+ when :Boolean
837
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
838
+ true
839
+ else
840
+ false
841
+ end
842
+ when :Object
843
+ # generic object (usually a Hash), return directly
844
+ value
845
+ when /\AArray<(?<inner_type>.+)>\z/
846
+ inner_type = Regexp.last_match[:inner_type]
847
+ value.map { |v| _deserialize(inner_type, v) }
848
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
849
+ k_type = Regexp.last_match[:k_type]
850
+ v_type = Regexp.last_match[:v_type]
851
+ {}.tap do |hash|
852
+ value.each do |k, v|
853
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
854
+ end
855
+ end
856
+ else # model
857
+ # models (e.g. Pet) or oneOf
858
+ klass = Norbelys.const_get(type)
859
+ klass.respond_to?(:openapi_any_of) || klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value)
860
+ end
861
+ end
862
+
863
+ # Returns the string representation of the object
864
+ # @return [String] String presentation of the object
865
+ def to_s
866
+ to_hash.to_s
867
+ end
868
+
869
+ # to_body is an alias to to_hash (backward compatibility)
870
+ # @return [Hash] Returns the object in the form of hash
871
+ def to_body
872
+ to_hash
873
+ end
874
+
875
+ # Returns the object in the form of hash
876
+ # @return [Hash] Returns the object in the form of hash
877
+ def to_hash
878
+ hash = {}
879
+ self.class.attribute_map.each_pair do |attr, param|
880
+ value = self.send(attr)
881
+ if value.nil?
882
+ is_nullable = self.class.openapi_nullable.include?(attr)
883
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
884
+ end
885
+
886
+ hash[param] = _to_hash(value)
887
+ end
888
+ hash
889
+ end
890
+
891
+ # Outputs non-array value in the form of hash
892
+ # For object, use to_hash. Otherwise, just return the value
893
+ # @param [Object] value Any valid value
894
+ # @return [Hash] Returns the value in the form of hash
895
+ def _to_hash(value)
896
+ if value.is_a?(Array)
897
+ value.compact.map { |v| _to_hash(v) }
898
+ elsif value.is_a?(Hash)
899
+ {}.tap do |hash|
900
+ value.each { |k, v| hash[k] = _to_hash(v) }
901
+ end
902
+ elsif value.respond_to? :to_hash
903
+ value.to_hash
904
+ else
905
+ value
906
+ end
907
+ end
908
+
909
+ end
910
+
911
+ end