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,704 @@
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 ProgramCreateParams
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::ProgramCreateParams` 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::ProgramCreateParams`. 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
+ else
226
+ self.name = nil
227
+ end
228
+
229
+ if attributes.key?(:'new_per_day')
230
+ self.new_per_day = attributes[:'new_per_day']
231
+ end
232
+
233
+ if attributes.key?(:'plain_text_mode')
234
+ self.plain_text_mode = attributes[:'plain_text_mode']
235
+ end
236
+
237
+ if attributes.key?(:'send_interval_minutes')
238
+ self.send_interval_minutes = attributes[:'send_interval_minutes']
239
+ end
240
+
241
+ if attributes.key?(:'spam_pause_threshold')
242
+ self.spam_pause_threshold = attributes[:'spam_pause_threshold']
243
+ end
244
+
245
+ if attributes.key?(:'start_date')
246
+ self.start_date = attributes[:'start_date']
247
+ end
248
+
249
+ if attributes.key?(:'steps')
250
+ if (value = attributes[:'steps']).is_a?(Array)
251
+ self.steps = value
252
+ end
253
+ end
254
+
255
+ if attributes.key?(:'stop_condition')
256
+ self.stop_condition = attributes[:'stop_condition']
257
+ end
258
+
259
+ if attributes.key?(:'timezone')
260
+ self.timezone = attributes[:'timezone']
261
+ end
262
+
263
+ if attributes.key?(:'track_clicks')
264
+ self.track_clicks = attributes[:'track_clicks']
265
+ end
266
+
267
+ if attributes.key?(:'tracking_domain_id')
268
+ self.tracking_domain_id = attributes[:'tracking_domain_id']
269
+ end
270
+
271
+ if attributes.key?(:'track_opens')
272
+ self.track_opens = attributes[:'track_opens']
273
+ end
274
+
275
+ if attributes.key?(:'unsubscribe_text')
276
+ self.unsubscribe_text = attributes[:'unsubscribe_text']
277
+ end
278
+
279
+ if attributes.key?(:'variant_distribution')
280
+ self.variant_distribution = attributes[:'variant_distribution']
281
+ end
282
+
283
+ if attributes.key?(:'window_from')
284
+ self.window_from = attributes[:'window_from']
285
+ end
286
+
287
+ if attributes.key?(:'window_to')
288
+ self.window_to = attributes[:'window_to']
289
+ end
290
+ end
291
+
292
+ # Show invalid properties with the reasons. Usually used together with valid?
293
+ # @return Array for valid properties with the reasons
294
+ def list_invalid_properties
295
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
296
+ invalid_properties = Array.new
297
+ if !@bounce_pause_threshold.nil? && @bounce_pause_threshold > 100
298
+ invalid_properties.push('invalid value for "bounce_pause_threshold", must be smaller than or equal to 100.')
299
+ end
300
+
301
+ if !@bounce_pause_threshold.nil? && @bounce_pause_threshold < 0
302
+ invalid_properties.push('invalid value for "bounce_pause_threshold", must be greater than or equal to 0.')
303
+ end
304
+
305
+ if !@jitter_max_seconds.nil? && @jitter_max_seconds < 0
306
+ invalid_properties.push('invalid value for "jitter_max_seconds", must be greater than or equal to 0.')
307
+ end
308
+
309
+ if !@jitter_min_seconds.nil? && @jitter_min_seconds < 0
310
+ invalid_properties.push('invalid value for "jitter_min_seconds", must be greater than or equal to 0.')
311
+ end
312
+
313
+ if @name.nil?
314
+ invalid_properties.push('invalid value for "name", name cannot be nil.')
315
+ end
316
+
317
+ if @name.to_s.length < 1
318
+ invalid_properties.push('invalid value for "name", the character length must be great than or equal to 1.')
319
+ end
320
+
321
+ if !@new_per_day.nil? && @new_per_day < 0
322
+ invalid_properties.push('invalid value for "new_per_day", must be greater than or equal to 0.')
323
+ end
324
+
325
+ if !@send_interval_minutes.nil? && @send_interval_minutes < 3
326
+ invalid_properties.push('invalid value for "send_interval_minutes", must be greater than or equal to 3.')
327
+ end
328
+
329
+ if !@spam_pause_threshold.nil? && @spam_pause_threshold > 100
330
+ invalid_properties.push('invalid value for "spam_pause_threshold", must be smaller than or equal to 100.')
331
+ end
332
+
333
+ if !@spam_pause_threshold.nil? && @spam_pause_threshold < 0
334
+ invalid_properties.push('invalid value for "spam_pause_threshold", must be greater than or equal to 0.')
335
+ end
336
+
337
+ if !@start_date.nil? && @start_date < 0
338
+ invalid_properties.push('invalid value for "start_date", must be greater than or equal to 0.')
339
+ end
340
+
341
+ pattern = Regexp.new(/^([01]?\d|2[0-3]):[0-5]\d$/)
342
+ if !@window_from.nil? && @window_from !~ pattern
343
+ invalid_properties.push("invalid value for \"window_from\", must conform to the pattern #{pattern}.")
344
+ end
345
+
346
+ pattern = Regexp.new(/^([01]?\d|2[0-3]):[0-5]\d$/)
347
+ if !@window_to.nil? && @window_to !~ pattern
348
+ invalid_properties.push("invalid value for \"window_to\", must conform to the pattern #{pattern}.")
349
+ end
350
+
351
+ invalid_properties
352
+ end
353
+
354
+ # Check to see if the all the properties in the model are valid
355
+ # @return true if the model is valid
356
+ def valid?
357
+ warn '[DEPRECATED] the `valid?` method is obsolete'
358
+ return false if !@bounce_pause_threshold.nil? && @bounce_pause_threshold > 100
359
+ return false if !@bounce_pause_threshold.nil? && @bounce_pause_threshold < 0
360
+ return false if !@jitter_max_seconds.nil? && @jitter_max_seconds < 0
361
+ return false if !@jitter_min_seconds.nil? && @jitter_min_seconds < 0
362
+ kind_validator = EnumAttributeValidator.new('String', ["cold_sequence"])
363
+ return false unless kind_validator.valid?(@kind)
364
+ return false if @name.nil?
365
+ return false if @name.to_s.length < 1
366
+ return false if !@new_per_day.nil? && @new_per_day < 0
367
+ return false if !@send_interval_minutes.nil? && @send_interval_minutes < 3
368
+ return false if !@spam_pause_threshold.nil? && @spam_pause_threshold > 100
369
+ return false if !@spam_pause_threshold.nil? && @spam_pause_threshold < 0
370
+ return false if !@start_date.nil? && @start_date < 0
371
+ stop_condition_validator = EnumAttributeValidator.new('String', ["reply", "click", "open", "none"])
372
+ return false unless stop_condition_validator.valid?(@stop_condition)
373
+ variant_distribution_validator = EnumAttributeValidator.new('String', ["pattern", "random"])
374
+ return false unless variant_distribution_validator.valid?(@variant_distribution)
375
+ return false if !@window_from.nil? && @window_from !~ Regexp.new(/^([01]?\d|2[0-3]):[0-5]\d$/)
376
+ return false if !@window_to.nil? && @window_to !~ Regexp.new(/^([01]?\d|2[0-3]):[0-5]\d$/)
377
+ true
378
+ end
379
+
380
+ # Custom attribute writer method with validation
381
+ # @param [Object] bounce_pause_threshold Value to be assigned
382
+ def bounce_pause_threshold=(bounce_pause_threshold)
383
+ if bounce_pause_threshold.nil?
384
+ fail ArgumentError, 'bounce_pause_threshold cannot be nil'
385
+ end
386
+
387
+ if bounce_pause_threshold > 100
388
+ fail ArgumentError, 'invalid value for "bounce_pause_threshold", must be smaller than or equal to 100.'
389
+ end
390
+
391
+ if bounce_pause_threshold < 0
392
+ fail ArgumentError, 'invalid value for "bounce_pause_threshold", must be greater than or equal to 0.'
393
+ end
394
+
395
+ @bounce_pause_threshold = bounce_pause_threshold
396
+ end
397
+
398
+ # Custom attribute writer method with validation
399
+ # @param [Object] jitter_max_seconds Value to be assigned
400
+ def jitter_max_seconds=(jitter_max_seconds)
401
+ if jitter_max_seconds.nil?
402
+ fail ArgumentError, 'jitter_max_seconds cannot be nil'
403
+ end
404
+
405
+ if jitter_max_seconds < 0
406
+ fail ArgumentError, 'invalid value for "jitter_max_seconds", must be greater than or equal to 0.'
407
+ end
408
+
409
+ @jitter_max_seconds = jitter_max_seconds
410
+ end
411
+
412
+ # Custom attribute writer method with validation
413
+ # @param [Object] jitter_min_seconds Value to be assigned
414
+ def jitter_min_seconds=(jitter_min_seconds)
415
+ if jitter_min_seconds.nil?
416
+ fail ArgumentError, 'jitter_min_seconds cannot be nil'
417
+ end
418
+
419
+ if jitter_min_seconds < 0
420
+ fail ArgumentError, 'invalid value for "jitter_min_seconds", must be greater than or equal to 0.'
421
+ end
422
+
423
+ @jitter_min_seconds = jitter_min_seconds
424
+ end
425
+
426
+ # Custom attribute writer method checking allowed values (enum).
427
+ # @param [Object] kind Object to be assigned
428
+ def kind=(kind)
429
+ validator = EnumAttributeValidator.new('String', ["cold_sequence"])
430
+ unless validator.valid?(kind)
431
+ fail ArgumentError, "invalid value for \"kind\", must be one of #{validator.allowable_values}."
432
+ end
433
+ @kind = kind
434
+ end
435
+
436
+ # Custom attribute writer method with validation
437
+ # @param [Object] name Value to be assigned
438
+ def name=(name)
439
+ if name.nil?
440
+ fail ArgumentError, 'name cannot be nil'
441
+ end
442
+
443
+ if name.to_s.length < 1
444
+ fail ArgumentError, 'invalid value for "name", the character length must be great than or equal to 1.'
445
+ end
446
+
447
+ @name = name
448
+ end
449
+
450
+ # Custom attribute writer method with validation
451
+ # @param [Object] new_per_day Value to be assigned
452
+ def new_per_day=(new_per_day)
453
+ if new_per_day.nil?
454
+ fail ArgumentError, 'new_per_day cannot be nil'
455
+ end
456
+
457
+ if new_per_day < 0
458
+ fail ArgumentError, 'invalid value for "new_per_day", must be greater than or equal to 0.'
459
+ end
460
+
461
+ @new_per_day = new_per_day
462
+ end
463
+
464
+ # Custom attribute writer method with validation
465
+ # @param [Object] send_interval_minutes Value to be assigned
466
+ def send_interval_minutes=(send_interval_minutes)
467
+ if send_interval_minutes.nil?
468
+ fail ArgumentError, 'send_interval_minutes cannot be nil'
469
+ end
470
+
471
+ if send_interval_minutes < 3
472
+ fail ArgumentError, 'invalid value for "send_interval_minutes", must be greater than or equal to 3.'
473
+ end
474
+
475
+ @send_interval_minutes = send_interval_minutes
476
+ end
477
+
478
+ # Custom attribute writer method with validation
479
+ # @param [Object] spam_pause_threshold Value to be assigned
480
+ def spam_pause_threshold=(spam_pause_threshold)
481
+ if spam_pause_threshold.nil?
482
+ fail ArgumentError, 'spam_pause_threshold cannot be nil'
483
+ end
484
+
485
+ if spam_pause_threshold > 100
486
+ fail ArgumentError, 'invalid value for "spam_pause_threshold", must be smaller than or equal to 100.'
487
+ end
488
+
489
+ if spam_pause_threshold < 0
490
+ fail ArgumentError, 'invalid value for "spam_pause_threshold", must be greater than or equal to 0.'
491
+ end
492
+
493
+ @spam_pause_threshold = spam_pause_threshold
494
+ end
495
+
496
+ # Custom attribute writer method with validation
497
+ # @param [Object] start_date Value to be assigned
498
+ def start_date=(start_date)
499
+ if !start_date.nil? && start_date < 0
500
+ fail ArgumentError, 'invalid value for "start_date", must be greater than or equal to 0.'
501
+ end
502
+
503
+ @start_date = start_date
504
+ end
505
+
506
+ # Custom attribute writer method checking allowed values (enum).
507
+ # @param [Object] stop_condition Object to be assigned
508
+ def stop_condition=(stop_condition)
509
+ validator = EnumAttributeValidator.new('String', ["reply", "click", "open", "none"])
510
+ unless validator.valid?(stop_condition)
511
+ fail ArgumentError, "invalid value for \"stop_condition\", must be one of #{validator.allowable_values}."
512
+ end
513
+ @stop_condition = stop_condition
514
+ end
515
+
516
+ # Custom attribute writer method checking allowed values (enum).
517
+ # @param [Object] variant_distribution Object to be assigned
518
+ def variant_distribution=(variant_distribution)
519
+ validator = EnumAttributeValidator.new('String', ["pattern", "random"])
520
+ unless validator.valid?(variant_distribution)
521
+ fail ArgumentError, "invalid value for \"variant_distribution\", must be one of #{validator.allowable_values}."
522
+ end
523
+ @variant_distribution = variant_distribution
524
+ end
525
+
526
+ # Custom attribute writer method with validation
527
+ # @param [Object] window_from Value to be assigned
528
+ def window_from=(window_from)
529
+ pattern = Regexp.new(/^([01]?\d|2[0-3]):[0-5]\d$/)
530
+ if !window_from.nil? && window_from !~ pattern
531
+ fail ArgumentError, "invalid value for \"window_from\", must conform to the pattern #{pattern}."
532
+ end
533
+
534
+ @window_from = window_from
535
+ end
536
+
537
+ # Custom attribute writer method with validation
538
+ # @param [Object] window_to Value to be assigned
539
+ def window_to=(window_to)
540
+ pattern = Regexp.new(/^([01]?\d|2[0-3]):[0-5]\d$/)
541
+ if !window_to.nil? && window_to !~ pattern
542
+ fail ArgumentError, "invalid value for \"window_to\", must conform to the pattern #{pattern}."
543
+ end
544
+
545
+ @window_to = window_to
546
+ end
547
+
548
+ # Checks equality by comparing each attribute.
549
+ # @param [Object] Object to be compared
550
+ def ==(o)
551
+ return true if self.equal?(o)
552
+ self.class == o.class &&
553
+ active_days == o.active_days &&
554
+ add_unsubscribe == o.add_unsubscribe &&
555
+ auto_pause_on_company_reply == o.auto_pause_on_company_reply &&
556
+ bounce_pause_threshold == o.bounce_pause_threshold &&
557
+ jitter_max_seconds == o.jitter_max_seconds &&
558
+ jitter_min_seconds == o.jitter_min_seconds &&
559
+ kind == o.kind &&
560
+ name == o.name &&
561
+ new_per_day == o.new_per_day &&
562
+ plain_text_mode == o.plain_text_mode &&
563
+ send_interval_minutes == o.send_interval_minutes &&
564
+ spam_pause_threshold == o.spam_pause_threshold &&
565
+ start_date == o.start_date &&
566
+ steps == o.steps &&
567
+ stop_condition == o.stop_condition &&
568
+ timezone == o.timezone &&
569
+ track_clicks == o.track_clicks &&
570
+ tracking_domain_id == o.tracking_domain_id &&
571
+ track_opens == o.track_opens &&
572
+ unsubscribe_text == o.unsubscribe_text &&
573
+ variant_distribution == o.variant_distribution &&
574
+ window_from == o.window_from &&
575
+ window_to == o.window_to
576
+ end
577
+
578
+ # @see the `==` method
579
+ # @param [Object] Object to be compared
580
+ def eql?(o)
581
+ self == o
582
+ end
583
+
584
+ # Calculates hash code according to all attributes.
585
+ # @return [Integer] Hash code
586
+ def hash
587
+ [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
588
+ end
589
+
590
+ # Builds the object from hash
591
+ # @param [Hash] attributes Model attributes in the form of hash
592
+ # @return [Object] Returns the model itself
593
+ def self.build_from_hash(attributes)
594
+ return nil unless attributes.is_a?(Hash)
595
+ attributes = attributes.transform_keys(&:to_sym)
596
+ transformed_hash = {}
597
+ openapi_types.each_pair do |key, type|
598
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
599
+ transformed_hash["#{key}"] = nil
600
+ elsif type =~ /\AArray<(.*)>/i
601
+ # check to ensure the input is an array given that the attribute
602
+ # is documented as an array but the input is not
603
+ if attributes[attribute_map[key]].is_a?(Array)
604
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
605
+ end
606
+ elsif !attributes[attribute_map[key]].nil?
607
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
608
+ end
609
+ end
610
+ new(transformed_hash)
611
+ end
612
+
613
+ # Deserializes the data based on type
614
+ # @param string type Data type
615
+ # @param string value Value to be deserialized
616
+ # @return [Object] Deserialized data
617
+ def self._deserialize(type, value)
618
+ case type.to_sym
619
+ when :Time
620
+ Time.parse(value)
621
+ when :Date
622
+ Date.parse(value)
623
+ when :String
624
+ value.to_s
625
+ when :Integer
626
+ value.to_i
627
+ when :Float
628
+ value.to_f
629
+ when :Boolean
630
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
631
+ true
632
+ else
633
+ false
634
+ end
635
+ when :Object
636
+ # generic object (usually a Hash), return directly
637
+ value
638
+ when /\AArray<(?<inner_type>.+)>\z/
639
+ inner_type = Regexp.last_match[:inner_type]
640
+ value.map { |v| _deserialize(inner_type, v) }
641
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
642
+ k_type = Regexp.last_match[:k_type]
643
+ v_type = Regexp.last_match[:v_type]
644
+ {}.tap do |hash|
645
+ value.each do |k, v|
646
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
647
+ end
648
+ end
649
+ else # model
650
+ # models (e.g. Pet) or oneOf
651
+ klass = Norbelys.const_get(type)
652
+ klass.respond_to?(:openapi_any_of) || klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value)
653
+ end
654
+ end
655
+
656
+ # Returns the string representation of the object
657
+ # @return [String] String presentation of the object
658
+ def to_s
659
+ to_hash.to_s
660
+ end
661
+
662
+ # to_body is an alias to to_hash (backward compatibility)
663
+ # @return [Hash] Returns the object in the form of hash
664
+ def to_body
665
+ to_hash
666
+ end
667
+
668
+ # Returns the object in the form of hash
669
+ # @return [Hash] Returns the object in the form of hash
670
+ def to_hash
671
+ hash = {}
672
+ self.class.attribute_map.each_pair do |attr, param|
673
+ value = self.send(attr)
674
+ if value.nil?
675
+ is_nullable = self.class.openapi_nullable.include?(attr)
676
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
677
+ end
678
+
679
+ hash[param] = _to_hash(value)
680
+ end
681
+ hash
682
+ end
683
+
684
+ # Outputs non-array value in the form of hash
685
+ # For object, use to_hash. Otherwise, just return the value
686
+ # @param [Object] value Any valid value
687
+ # @return [Hash] Returns the value in the form of hash
688
+ def _to_hash(value)
689
+ if value.is_a?(Array)
690
+ value.compact.map { |v| _to_hash(v) }
691
+ elsif value.is_a?(Hash)
692
+ {}.tap do |hash|
693
+ value.each { |k, v| hash[k] = _to_hash(v) }
694
+ end
695
+ elsif value.respond_to? :to_hash
696
+ value.to_hash
697
+ else
698
+ value
699
+ end
700
+ end
701
+
702
+ end
703
+
704
+ end