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,697 @@
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 ProgramUpdateParams
18
+ attr_accessor :active_days
19
+
20
+ # Attach RFC 8058 one-click unsubscribe headers + footer. Defaults off (opt-in).
21
+ attr_accessor :add_unsubscribe
22
+
23
+ # Pause every lead at a company once one of them replies.
24
+ attr_accessor :auto_pause_on_company_reply
25
+
26
+ # Auto-pause when the bounce rate reaches this percent; 0 disables. Default 2.
27
+ attr_accessor :bounce_pause_threshold
28
+
29
+ # Random extra wait per send, upper bound (seconds).
30
+ attr_accessor :jitter_max_seconds
31
+
32
+ # Random extra wait per send, lower bound (seconds).
33
+ attr_accessor :jitter_min_seconds
34
+
35
+ # Defaults to \"cold_sequence\".
36
+ attr_accessor :kind
37
+
38
+ # Display name.
39
+ attr_accessor :name
40
+
41
+ # New leads started per day for the whole campaign, shared across all its mailboxes (follow-ups excluded); 0 = uncapped.
42
+ attr_accessor :new_per_day
43
+
44
+ # Send the body as plain text only: no HTML part, open pixel, or link tracking.
45
+ attr_accessor :plain_text_mode
46
+
47
+ # Minutes between sends from one mailbox (cold-email floor is 3).
48
+ attr_accessor :send_interval_minutes
49
+
50
+ # Auto-pause when the spam-complaint rate reaches this percent; 0 disables. Default 0.3.
51
+ attr_accessor :spam_pause_threshold
52
+
53
+ attr_accessor :start_date
54
+
55
+ # Build the whole cadence in one call: ordered steps, each with its arms. Omit to start empty and add steps later via programs.update.
56
+ attr_accessor :steps
57
+
58
+ # Engagement that pulls a lead out of the cadence: `reply`, `click`, `open`, `none`.
59
+ attr_accessor :stop_condition
60
+
61
+ # IANA timezone.
62
+ attr_accessor :timezone
63
+
64
+ # Rewrite links to track clicks.
65
+ attr_accessor :track_clicks
66
+
67
+ attr_accessor :tracking_domain_id
68
+
69
+ # Insert the open pixel.
70
+ attr_accessor :track_opens
71
+
72
+ # Custom unsubscribe footer copy.
73
+ attr_accessor :unsubscribe_text
74
+
75
+ # How A/B arms are spread across leads with no decided winner: `pattern` (deterministic per-lead hash) or `random` (independent roll per lead).
76
+ attr_accessor :variant_distribution
77
+
78
+ attr_accessor :window_from
79
+
80
+ attr_accessor :window_to
81
+
82
+ class EnumAttributeValidator
83
+ attr_reader :datatype
84
+ attr_reader :allowable_values
85
+
86
+ def initialize(datatype, allowable_values)
87
+ @allowable_values = allowable_values.map do |value|
88
+ case datatype.to_s
89
+ when /Integer/i
90
+ value.to_i
91
+ when /Float/i
92
+ value.to_f
93
+ else
94
+ value
95
+ end
96
+ end
97
+ end
98
+
99
+ def valid?(value)
100
+ !value || allowable_values.include?(value)
101
+ end
102
+ end
103
+
104
+ # Attribute mapping from ruby-style variable name to JSON key.
105
+ def self.attribute_map
106
+ {
107
+ :'active_days' => :'activeDays',
108
+ :'add_unsubscribe' => :'addUnsubscribe',
109
+ :'auto_pause_on_company_reply' => :'autoPauseOnCompanyReply',
110
+ :'bounce_pause_threshold' => :'bouncePauseThreshold',
111
+ :'jitter_max_seconds' => :'jitterMaxSeconds',
112
+ :'jitter_min_seconds' => :'jitterMinSeconds',
113
+ :'kind' => :'kind',
114
+ :'name' => :'name',
115
+ :'new_per_day' => :'newPerDay',
116
+ :'plain_text_mode' => :'plainTextMode',
117
+ :'send_interval_minutes' => :'sendIntervalMinutes',
118
+ :'spam_pause_threshold' => :'spamPauseThreshold',
119
+ :'start_date' => :'startDate',
120
+ :'steps' => :'steps',
121
+ :'stop_condition' => :'stopCondition',
122
+ :'timezone' => :'timezone',
123
+ :'track_clicks' => :'trackClicks',
124
+ :'tracking_domain_id' => :'trackingDomainId',
125
+ :'track_opens' => :'trackOpens',
126
+ :'unsubscribe_text' => :'unsubscribeText',
127
+ :'variant_distribution' => :'variantDistribution',
128
+ :'window_from' => :'windowFrom',
129
+ :'window_to' => :'windowTo'
130
+ }
131
+ end
132
+
133
+ # Returns all the JSON keys this model knows about
134
+ def self.acceptable_attributes
135
+ attribute_map.values
136
+ end
137
+
138
+ # Attribute type mapping.
139
+ def self.openapi_types
140
+ {
141
+ :'active_days' => :'Array<Integer>',
142
+ :'add_unsubscribe' => :'Boolean',
143
+ :'auto_pause_on_company_reply' => :'Boolean',
144
+ :'bounce_pause_threshold' => :'Float',
145
+ :'jitter_max_seconds' => :'Integer',
146
+ :'jitter_min_seconds' => :'Integer',
147
+ :'kind' => :'String',
148
+ :'name' => :'String',
149
+ :'new_per_day' => :'Integer',
150
+ :'plain_text_mode' => :'Boolean',
151
+ :'send_interval_minutes' => :'Integer',
152
+ :'spam_pause_threshold' => :'Float',
153
+ :'start_date' => :'Integer',
154
+ :'steps' => :'Array<ProgramStepInput>',
155
+ :'stop_condition' => :'String',
156
+ :'timezone' => :'String',
157
+ :'track_clicks' => :'Boolean',
158
+ :'tracking_domain_id' => :'String',
159
+ :'track_opens' => :'Boolean',
160
+ :'unsubscribe_text' => :'String',
161
+ :'variant_distribution' => :'String',
162
+ :'window_from' => :'String',
163
+ :'window_to' => :'String'
164
+ }
165
+ end
166
+
167
+ # List of attributes with nullable: true
168
+ def self.openapi_nullable
169
+ Set.new([
170
+ :'active_days',
171
+ :'start_date',
172
+ :'tracking_domain_id',
173
+ :'window_from',
174
+ :'window_to'
175
+ ])
176
+ end
177
+
178
+ # Initializes the object
179
+ # @param [Hash] attributes Model attributes in the form of hash
180
+ def initialize(attributes = {})
181
+ if (!attributes.is_a?(Hash))
182
+ fail ArgumentError, "The input argument (attributes) must be a hash in `Norbelys::ProgramUpdateParams` initialize method"
183
+ end
184
+
185
+ # check to see if the attribute exists and convert string to symbol for hash key
186
+ attributes = attributes.each_with_object({}) { |(k, v), h|
187
+ if (!self.class.attribute_map.key?(k.to_sym))
188
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Norbelys::ProgramUpdateParams`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
189
+ end
190
+ h[k.to_sym] = v
191
+ }
192
+
193
+ if attributes.key?(:'active_days')
194
+ if (value = attributes[:'active_days']).is_a?(Array)
195
+ self.active_days = value
196
+ end
197
+ end
198
+
199
+ if attributes.key?(:'add_unsubscribe')
200
+ self.add_unsubscribe = attributes[:'add_unsubscribe']
201
+ end
202
+
203
+ if attributes.key?(:'auto_pause_on_company_reply')
204
+ self.auto_pause_on_company_reply = attributes[:'auto_pause_on_company_reply']
205
+ end
206
+
207
+ if attributes.key?(:'bounce_pause_threshold')
208
+ self.bounce_pause_threshold = attributes[:'bounce_pause_threshold']
209
+ end
210
+
211
+ if attributes.key?(:'jitter_max_seconds')
212
+ self.jitter_max_seconds = attributes[:'jitter_max_seconds']
213
+ end
214
+
215
+ if attributes.key?(:'jitter_min_seconds')
216
+ self.jitter_min_seconds = attributes[:'jitter_min_seconds']
217
+ end
218
+
219
+ if attributes.key?(:'kind')
220
+ self.kind = attributes[:'kind']
221
+ end
222
+
223
+ if attributes.key?(:'name')
224
+ self.name = attributes[:'name']
225
+ end
226
+
227
+ if attributes.key?(:'new_per_day')
228
+ self.new_per_day = attributes[:'new_per_day']
229
+ end
230
+
231
+ if attributes.key?(:'plain_text_mode')
232
+ self.plain_text_mode = attributes[:'plain_text_mode']
233
+ end
234
+
235
+ if attributes.key?(:'send_interval_minutes')
236
+ self.send_interval_minutes = attributes[:'send_interval_minutes']
237
+ end
238
+
239
+ if attributes.key?(:'spam_pause_threshold')
240
+ self.spam_pause_threshold = attributes[:'spam_pause_threshold']
241
+ end
242
+
243
+ if attributes.key?(:'start_date')
244
+ self.start_date = attributes[:'start_date']
245
+ end
246
+
247
+ if attributes.key?(:'steps')
248
+ if (value = attributes[:'steps']).is_a?(Array)
249
+ self.steps = value
250
+ end
251
+ end
252
+
253
+ if attributes.key?(:'stop_condition')
254
+ self.stop_condition = attributes[:'stop_condition']
255
+ end
256
+
257
+ if attributes.key?(:'timezone')
258
+ self.timezone = attributes[:'timezone']
259
+ end
260
+
261
+ if attributes.key?(:'track_clicks')
262
+ self.track_clicks = attributes[:'track_clicks']
263
+ end
264
+
265
+ if attributes.key?(:'tracking_domain_id')
266
+ self.tracking_domain_id = attributes[:'tracking_domain_id']
267
+ end
268
+
269
+ if attributes.key?(:'track_opens')
270
+ self.track_opens = attributes[:'track_opens']
271
+ end
272
+
273
+ if attributes.key?(:'unsubscribe_text')
274
+ self.unsubscribe_text = attributes[:'unsubscribe_text']
275
+ end
276
+
277
+ if attributes.key?(:'variant_distribution')
278
+ self.variant_distribution = attributes[:'variant_distribution']
279
+ end
280
+
281
+ if attributes.key?(:'window_from')
282
+ self.window_from = attributes[:'window_from']
283
+ end
284
+
285
+ if attributes.key?(:'window_to')
286
+ self.window_to = attributes[:'window_to']
287
+ end
288
+ end
289
+
290
+ # Show invalid properties with the reasons. Usually used together with valid?
291
+ # @return Array for valid properties with the reasons
292
+ def list_invalid_properties
293
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
294
+ invalid_properties = Array.new
295
+ if !@bounce_pause_threshold.nil? && @bounce_pause_threshold > 100
296
+ invalid_properties.push('invalid value for "bounce_pause_threshold", must be smaller than or equal to 100.')
297
+ end
298
+
299
+ if !@bounce_pause_threshold.nil? && @bounce_pause_threshold < 0
300
+ invalid_properties.push('invalid value for "bounce_pause_threshold", must be greater than or equal to 0.')
301
+ end
302
+
303
+ if !@jitter_max_seconds.nil? && @jitter_max_seconds < 0
304
+ invalid_properties.push('invalid value for "jitter_max_seconds", must be greater than or equal to 0.')
305
+ end
306
+
307
+ if !@jitter_min_seconds.nil? && @jitter_min_seconds < 0
308
+ invalid_properties.push('invalid value for "jitter_min_seconds", must be greater than or equal to 0.')
309
+ end
310
+
311
+ if !@name.nil? && @name.to_s.length < 1
312
+ invalid_properties.push('invalid value for "name", the character length must be great than or equal to 1.')
313
+ end
314
+
315
+ if !@new_per_day.nil? && @new_per_day < 0
316
+ invalid_properties.push('invalid value for "new_per_day", must be greater than or equal to 0.')
317
+ end
318
+
319
+ if !@send_interval_minutes.nil? && @send_interval_minutes < 3
320
+ invalid_properties.push('invalid value for "send_interval_minutes", must be greater than or equal to 3.')
321
+ end
322
+
323
+ if !@spam_pause_threshold.nil? && @spam_pause_threshold > 100
324
+ invalid_properties.push('invalid value for "spam_pause_threshold", must be smaller than or equal to 100.')
325
+ end
326
+
327
+ if !@spam_pause_threshold.nil? && @spam_pause_threshold < 0
328
+ invalid_properties.push('invalid value for "spam_pause_threshold", must be greater than or equal to 0.')
329
+ end
330
+
331
+ if !@start_date.nil? && @start_date < 0
332
+ invalid_properties.push('invalid value for "start_date", must be greater than or equal to 0.')
333
+ end
334
+
335
+ pattern = Regexp.new(/^([01]?\d|2[0-3]):[0-5]\d$/)
336
+ if !@window_from.nil? && @window_from !~ pattern
337
+ invalid_properties.push("invalid value for \"window_from\", must conform to the pattern #{pattern}.")
338
+ end
339
+
340
+ pattern = Regexp.new(/^([01]?\d|2[0-3]):[0-5]\d$/)
341
+ if !@window_to.nil? && @window_to !~ pattern
342
+ invalid_properties.push("invalid value for \"window_to\", must conform to the pattern #{pattern}.")
343
+ end
344
+
345
+ invalid_properties
346
+ end
347
+
348
+ # Check to see if the all the properties in the model are valid
349
+ # @return true if the model is valid
350
+ def valid?
351
+ warn '[DEPRECATED] the `valid?` method is obsolete'
352
+ return false if !@bounce_pause_threshold.nil? && @bounce_pause_threshold > 100
353
+ return false if !@bounce_pause_threshold.nil? && @bounce_pause_threshold < 0
354
+ return false if !@jitter_max_seconds.nil? && @jitter_max_seconds < 0
355
+ return false if !@jitter_min_seconds.nil? && @jitter_min_seconds < 0
356
+ kind_validator = EnumAttributeValidator.new('String', ["cold_sequence"])
357
+ return false unless kind_validator.valid?(@kind)
358
+ return false if !@name.nil? && @name.to_s.length < 1
359
+ return false if !@new_per_day.nil? && @new_per_day < 0
360
+ return false if !@send_interval_minutes.nil? && @send_interval_minutes < 3
361
+ return false if !@spam_pause_threshold.nil? && @spam_pause_threshold > 100
362
+ return false if !@spam_pause_threshold.nil? && @spam_pause_threshold < 0
363
+ return false if !@start_date.nil? && @start_date < 0
364
+ stop_condition_validator = EnumAttributeValidator.new('String', ["reply", "click", "open", "none"])
365
+ return false unless stop_condition_validator.valid?(@stop_condition)
366
+ variant_distribution_validator = EnumAttributeValidator.new('String', ["pattern", "random"])
367
+ return false unless variant_distribution_validator.valid?(@variant_distribution)
368
+ return false if !@window_from.nil? && @window_from !~ Regexp.new(/^([01]?\d|2[0-3]):[0-5]\d$/)
369
+ return false if !@window_to.nil? && @window_to !~ Regexp.new(/^([01]?\d|2[0-3]):[0-5]\d$/)
370
+ true
371
+ end
372
+
373
+ # Custom attribute writer method with validation
374
+ # @param [Object] bounce_pause_threshold Value to be assigned
375
+ def bounce_pause_threshold=(bounce_pause_threshold)
376
+ if bounce_pause_threshold.nil?
377
+ fail ArgumentError, 'bounce_pause_threshold cannot be nil'
378
+ end
379
+
380
+ if bounce_pause_threshold > 100
381
+ fail ArgumentError, 'invalid value for "bounce_pause_threshold", must be smaller than or equal to 100.'
382
+ end
383
+
384
+ if bounce_pause_threshold < 0
385
+ fail ArgumentError, 'invalid value for "bounce_pause_threshold", must be greater than or equal to 0.'
386
+ end
387
+
388
+ @bounce_pause_threshold = bounce_pause_threshold
389
+ end
390
+
391
+ # Custom attribute writer method with validation
392
+ # @param [Object] jitter_max_seconds Value to be assigned
393
+ def jitter_max_seconds=(jitter_max_seconds)
394
+ if jitter_max_seconds.nil?
395
+ fail ArgumentError, 'jitter_max_seconds cannot be nil'
396
+ end
397
+
398
+ if jitter_max_seconds < 0
399
+ fail ArgumentError, 'invalid value for "jitter_max_seconds", must be greater than or equal to 0.'
400
+ end
401
+
402
+ @jitter_max_seconds = jitter_max_seconds
403
+ end
404
+
405
+ # Custom attribute writer method with validation
406
+ # @param [Object] jitter_min_seconds Value to be assigned
407
+ def jitter_min_seconds=(jitter_min_seconds)
408
+ if jitter_min_seconds.nil?
409
+ fail ArgumentError, 'jitter_min_seconds cannot be nil'
410
+ end
411
+
412
+ if jitter_min_seconds < 0
413
+ fail ArgumentError, 'invalid value for "jitter_min_seconds", must be greater than or equal to 0.'
414
+ end
415
+
416
+ @jitter_min_seconds = jitter_min_seconds
417
+ end
418
+
419
+ # Custom attribute writer method checking allowed values (enum).
420
+ # @param [Object] kind Object to be assigned
421
+ def kind=(kind)
422
+ validator = EnumAttributeValidator.new('String', ["cold_sequence"])
423
+ unless validator.valid?(kind)
424
+ fail ArgumentError, "invalid value for \"kind\", must be one of #{validator.allowable_values}."
425
+ end
426
+ @kind = kind
427
+ end
428
+
429
+ # Custom attribute writer method with validation
430
+ # @param [Object] name Value to be assigned
431
+ def name=(name)
432
+ if name.nil?
433
+ fail ArgumentError, 'name cannot be nil'
434
+ end
435
+
436
+ if name.to_s.length < 1
437
+ fail ArgumentError, 'invalid value for "name", the character length must be great than or equal to 1.'
438
+ end
439
+
440
+ @name = name
441
+ end
442
+
443
+ # Custom attribute writer method with validation
444
+ # @param [Object] new_per_day Value to be assigned
445
+ def new_per_day=(new_per_day)
446
+ if new_per_day.nil?
447
+ fail ArgumentError, 'new_per_day cannot be nil'
448
+ end
449
+
450
+ if new_per_day < 0
451
+ fail ArgumentError, 'invalid value for "new_per_day", must be greater than or equal to 0.'
452
+ end
453
+
454
+ @new_per_day = new_per_day
455
+ end
456
+
457
+ # Custom attribute writer method with validation
458
+ # @param [Object] send_interval_minutes Value to be assigned
459
+ def send_interval_minutes=(send_interval_minutes)
460
+ if send_interval_minutes.nil?
461
+ fail ArgumentError, 'send_interval_minutes cannot be nil'
462
+ end
463
+
464
+ if send_interval_minutes < 3
465
+ fail ArgumentError, 'invalid value for "send_interval_minutes", must be greater than or equal to 3.'
466
+ end
467
+
468
+ @send_interval_minutes = send_interval_minutes
469
+ end
470
+
471
+ # Custom attribute writer method with validation
472
+ # @param [Object] spam_pause_threshold Value to be assigned
473
+ def spam_pause_threshold=(spam_pause_threshold)
474
+ if spam_pause_threshold.nil?
475
+ fail ArgumentError, 'spam_pause_threshold cannot be nil'
476
+ end
477
+
478
+ if spam_pause_threshold > 100
479
+ fail ArgumentError, 'invalid value for "spam_pause_threshold", must be smaller than or equal to 100.'
480
+ end
481
+
482
+ if spam_pause_threshold < 0
483
+ fail ArgumentError, 'invalid value for "spam_pause_threshold", must be greater than or equal to 0.'
484
+ end
485
+
486
+ @spam_pause_threshold = spam_pause_threshold
487
+ end
488
+
489
+ # Custom attribute writer method with validation
490
+ # @param [Object] start_date Value to be assigned
491
+ def start_date=(start_date)
492
+ if !start_date.nil? && start_date < 0
493
+ fail ArgumentError, 'invalid value for "start_date", must be greater than or equal to 0.'
494
+ end
495
+
496
+ @start_date = start_date
497
+ end
498
+
499
+ # Custom attribute writer method checking allowed values (enum).
500
+ # @param [Object] stop_condition Object to be assigned
501
+ def stop_condition=(stop_condition)
502
+ validator = EnumAttributeValidator.new('String', ["reply", "click", "open", "none"])
503
+ unless validator.valid?(stop_condition)
504
+ fail ArgumentError, "invalid value for \"stop_condition\", must be one of #{validator.allowable_values}."
505
+ end
506
+ @stop_condition = stop_condition
507
+ end
508
+
509
+ # Custom attribute writer method checking allowed values (enum).
510
+ # @param [Object] variant_distribution Object to be assigned
511
+ def variant_distribution=(variant_distribution)
512
+ validator = EnumAttributeValidator.new('String', ["pattern", "random"])
513
+ unless validator.valid?(variant_distribution)
514
+ fail ArgumentError, "invalid value for \"variant_distribution\", must be one of #{validator.allowable_values}."
515
+ end
516
+ @variant_distribution = variant_distribution
517
+ end
518
+
519
+ # Custom attribute writer method with validation
520
+ # @param [Object] window_from Value to be assigned
521
+ def window_from=(window_from)
522
+ pattern = Regexp.new(/^([01]?\d|2[0-3]):[0-5]\d$/)
523
+ if !window_from.nil? && window_from !~ pattern
524
+ fail ArgumentError, "invalid value for \"window_from\", must conform to the pattern #{pattern}."
525
+ end
526
+
527
+ @window_from = window_from
528
+ end
529
+
530
+ # Custom attribute writer method with validation
531
+ # @param [Object] window_to Value to be assigned
532
+ def window_to=(window_to)
533
+ pattern = Regexp.new(/^([01]?\d|2[0-3]):[0-5]\d$/)
534
+ if !window_to.nil? && window_to !~ pattern
535
+ fail ArgumentError, "invalid value for \"window_to\", must conform to the pattern #{pattern}."
536
+ end
537
+
538
+ @window_to = window_to
539
+ end
540
+
541
+ # Checks equality by comparing each attribute.
542
+ # @param [Object] Object to be compared
543
+ def ==(o)
544
+ return true if self.equal?(o)
545
+ self.class == o.class &&
546
+ active_days == o.active_days &&
547
+ add_unsubscribe == o.add_unsubscribe &&
548
+ auto_pause_on_company_reply == o.auto_pause_on_company_reply &&
549
+ bounce_pause_threshold == o.bounce_pause_threshold &&
550
+ jitter_max_seconds == o.jitter_max_seconds &&
551
+ jitter_min_seconds == o.jitter_min_seconds &&
552
+ kind == o.kind &&
553
+ name == o.name &&
554
+ new_per_day == o.new_per_day &&
555
+ plain_text_mode == o.plain_text_mode &&
556
+ send_interval_minutes == o.send_interval_minutes &&
557
+ spam_pause_threshold == o.spam_pause_threshold &&
558
+ start_date == o.start_date &&
559
+ steps == o.steps &&
560
+ stop_condition == o.stop_condition &&
561
+ timezone == o.timezone &&
562
+ track_clicks == o.track_clicks &&
563
+ tracking_domain_id == o.tracking_domain_id &&
564
+ track_opens == o.track_opens &&
565
+ unsubscribe_text == o.unsubscribe_text &&
566
+ variant_distribution == o.variant_distribution &&
567
+ window_from == o.window_from &&
568
+ window_to == o.window_to
569
+ end
570
+
571
+ # @see the `==` method
572
+ # @param [Object] Object to be compared
573
+ def eql?(o)
574
+ self == o
575
+ end
576
+
577
+ # Calculates hash code according to all attributes.
578
+ # @return [Integer] Hash code
579
+ def hash
580
+ [active_days, add_unsubscribe, auto_pause_on_company_reply, bounce_pause_threshold, jitter_max_seconds, jitter_min_seconds, kind, name, new_per_day, plain_text_mode, send_interval_minutes, spam_pause_threshold, start_date, steps, stop_condition, timezone, track_clicks, tracking_domain_id, track_opens, unsubscribe_text, variant_distribution, window_from, window_to].hash
581
+ end
582
+
583
+ # Builds the object from hash
584
+ # @param [Hash] attributes Model attributes in the form of hash
585
+ # @return [Object] Returns the model itself
586
+ def self.build_from_hash(attributes)
587
+ return nil unless attributes.is_a?(Hash)
588
+ attributes = attributes.transform_keys(&:to_sym)
589
+ transformed_hash = {}
590
+ openapi_types.each_pair do |key, type|
591
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
592
+ transformed_hash["#{key}"] = nil
593
+ elsif type =~ /\AArray<(.*)>/i
594
+ # check to ensure the input is an array given that the attribute
595
+ # is documented as an array but the input is not
596
+ if attributes[attribute_map[key]].is_a?(Array)
597
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
598
+ end
599
+ elsif !attributes[attribute_map[key]].nil?
600
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
601
+ end
602
+ end
603
+ new(transformed_hash)
604
+ end
605
+
606
+ # Deserializes the data based on type
607
+ # @param string type Data type
608
+ # @param string value Value to be deserialized
609
+ # @return [Object] Deserialized data
610
+ def self._deserialize(type, value)
611
+ case type.to_sym
612
+ when :Time
613
+ Time.parse(value)
614
+ when :Date
615
+ Date.parse(value)
616
+ when :String
617
+ value.to_s
618
+ when :Integer
619
+ value.to_i
620
+ when :Float
621
+ value.to_f
622
+ when :Boolean
623
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
624
+ true
625
+ else
626
+ false
627
+ end
628
+ when :Object
629
+ # generic object (usually a Hash), return directly
630
+ value
631
+ when /\AArray<(?<inner_type>.+)>\z/
632
+ inner_type = Regexp.last_match[:inner_type]
633
+ value.map { |v| _deserialize(inner_type, v) }
634
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
635
+ k_type = Regexp.last_match[:k_type]
636
+ v_type = Regexp.last_match[:v_type]
637
+ {}.tap do |hash|
638
+ value.each do |k, v|
639
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
640
+ end
641
+ end
642
+ else # model
643
+ # models (e.g. Pet) or oneOf
644
+ klass = Norbelys.const_get(type)
645
+ klass.respond_to?(:openapi_any_of) || klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value)
646
+ end
647
+ end
648
+
649
+ # Returns the string representation of the object
650
+ # @return [String] String presentation of the object
651
+ def to_s
652
+ to_hash.to_s
653
+ end
654
+
655
+ # to_body is an alias to to_hash (backward compatibility)
656
+ # @return [Hash] Returns the object in the form of hash
657
+ def to_body
658
+ to_hash
659
+ end
660
+
661
+ # Returns the object in the form of hash
662
+ # @return [Hash] Returns the object in the form of hash
663
+ def to_hash
664
+ hash = {}
665
+ self.class.attribute_map.each_pair do |attr, param|
666
+ value = self.send(attr)
667
+ if value.nil?
668
+ is_nullable = self.class.openapi_nullable.include?(attr)
669
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
670
+ end
671
+
672
+ hash[param] = _to_hash(value)
673
+ end
674
+ hash
675
+ end
676
+
677
+ # Outputs non-array value in the form of hash
678
+ # For object, use to_hash. Otherwise, just return the value
679
+ # @param [Object] value Any valid value
680
+ # @return [Hash] Returns the value in the form of hash
681
+ def _to_hash(value)
682
+ if value.is_a?(Array)
683
+ value.compact.map { |v| _to_hash(v) }
684
+ elsif value.is_a?(Hash)
685
+ {}.tap do |hash|
686
+ value.each { |k, v| hash[k] = _to_hash(v) }
687
+ end
688
+ elsif value.respond_to? :to_hash
689
+ value.to_hash
690
+ else
691
+ value
692
+ end
693
+ end
694
+
695
+ end
696
+
697
+ end