peal 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +171 -320
- data/lib/peal/analytics/client.rb +120 -0
- data/lib/peal/analytics/types/post_analytics_request.rb +13 -0
- data/lib/peal/analytics/types/summary_analytics_request.rb +17 -0
- data/lib/peal/api_keys/client.rb +153 -0
- data/lib/peal/api_keys/types/list_api_keys_request.rb +11 -0
- data/lib/peal/api_keys/types/new_api_key.rb +17 -0
- data/lib/peal/api_keys/types/revoke_api_keys_request.rb +13 -0
- data/lib/peal/assistant/client.rb +112 -0
- data/lib/peal/assistant/types/status_assistant_request.rb +11 -0
- data/lib/peal/assistant/types/suggestion_request.rb +15 -0
- data/lib/peal/billing/client.rb +58 -0
- data/lib/peal/billing/types/get_billing_request.rb +11 -0
- data/lib/peal/channels/client.rb +366 -0
- data/lib/peal/channels/types/choose_accounts.rb +17 -0
- data/lib/peal/channels/types/connect_callback.rb +21 -0
- data/lib/peal/channels/types/connect_channel.rb +17 -0
- data/lib/peal/channels/types/disconnect_channels_request.rb +13 -0
- data/lib/peal/channels/types/list_channels_request.rb +11 -0
- data/lib/peal/channels/types/platforms_channels_request.rb +11 -0
- data/lib/peal/channels/types/reconnect_channels_request.rb +13 -0
- data/lib/peal/client.rb +93 -0
- data/lib/peal/environment.rb +7 -0
- data/lib/peal/errors/api_error.rb +8 -0
- data/lib/peal/errors/client_error.rb +17 -0
- data/lib/peal/errors/connection_error.rb +11 -0
- data/lib/peal/errors/redirect_error.rb +8 -0
- data/lib/peal/errors/response_error.rb +65 -0
- data/lib/peal/errors/server_error.rb +11 -0
- data/lib/peal/errors/timeout_error.rb +8 -0
- data/lib/peal/internal/errors/constraint_error.rb +10 -0
- data/lib/peal/internal/errors/type_error.rb +10 -0
- data/lib/peal/internal/http/base_request.rb +83 -0
- data/lib/peal/internal/http/raw_client.rb +297 -0
- data/lib/peal/internal/iterators/cursor_item_iterator.rb +33 -0
- data/lib/peal/internal/iterators/cursor_page_iterator.rb +126 -0
- data/lib/peal/internal/iterators/item_iterator.rb +120 -0
- data/lib/peal/internal/iterators/offset_item_iterator.rb +35 -0
- data/lib/peal/internal/iterators/offset_page_iterator.rb +160 -0
- data/lib/peal/internal/json/request.rb +51 -0
- data/lib/peal/internal/json/serializable.rb +25 -0
- data/lib/peal/internal/multipart/multipart_encoder.rb +141 -0
- data/lib/peal/internal/multipart/multipart_form_data.rb +84 -0
- data/lib/peal/internal/multipart/multipart_form_data_part.rb +51 -0
- data/lib/peal/internal/multipart/multipart_request.rb +42 -0
- data/lib/peal/internal/types/array.rb +47 -0
- data/lib/peal/internal/types/boolean.rb +34 -0
- data/lib/peal/internal/types/enum.rb +56 -0
- data/lib/peal/internal/types/hash.rb +36 -0
- data/lib/peal/internal/types/model/field.rb +38 -0
- data/lib/peal/internal/types/model.rb +258 -0
- data/lib/peal/internal/types/type.rb +35 -0
- data/lib/peal/internal/types/union.rb +161 -0
- data/lib/peal/internal/types/unknown.rb +15 -0
- data/lib/peal/internal/types/utils.rb +144 -0
- data/lib/peal/invitations/client.rb +160 -0
- data/lib/peal/invitations/types/list_invitations_request.rb +11 -0
- data/lib/peal/invitations/types/new_invitation.rb +15 -0
- data/lib/peal/invitations/types/revoke_invitations_request.rb +13 -0
- data/lib/peal/media/client.rb +360 -0
- data/lib/peal/media/types/complete_media_request.rb +13 -0
- data/lib/peal/media/types/delete_media_request.rb +13 -0
- data/lib/peal/media/types/get_media_request.rb +13 -0
- data/lib/peal/media/types/list_media_request.rb +15 -0
- data/lib/peal/media/types/media_description.rb +15 -0
- data/lib/peal/media/types/new_upload.rb +17 -0
- data/lib/peal/media/types/usage_media_request.rb +13 -0
- data/lib/peal/members/client.rb +58 -0
- data/lib/peal/members/types/list_members_request.rb +11 -0
- data/lib/peal/notices/client.rb +189 -0
- data/lib/peal/notices/types/list_notices_request.rb +13 -0
- data/lib/peal/notices/types/mark_notices_read.rb +11 -0
- data/lib/peal/notification_preferences/client.rb +100 -0
- data/lib/peal/notification_preferences/types/notification_preferences_change.rb +13 -0
- data/lib/peal/notification_preferences/types/notification_preferences_change_email.rb +19 -0
- data/lib/peal/posts/client.rb +703 -0
- data/lib/peal/posts/types/attempts_posts_request.rb +13 -0
- data/lib/peal/posts/types/cancel_posts_request.rb +13 -0
- data/lib/peal/posts/types/confirm_posts_request.rb +17 -0
- data/lib/peal/posts/types/create_posts_request.rb +13 -0
- data/lib/peal/posts/types/discard_posts_request.rb +13 -0
- data/lib/peal/posts/types/drafts_posts_request.rb +15 -0
- data/lib/peal/posts/types/get_posts_request.rb +13 -0
- data/lib/peal/posts/types/list_posts_request.rb +15 -0
- data/lib/peal/posts/types/repost_posts_request.rb +15 -0
- data/lib/peal/posts/types/reschedule_posts_request.rb +15 -0
- data/lib/peal/posts/types/schedule_post.rb +19 -0
- data/lib/peal/posts/types/unschedule_posts_request.rb +13 -0
- data/lib/peal/posts/types/update_posts_request.rb +15 -0
- data/lib/peal/session/client.rb +55 -0
- data/lib/peal/system/client.rb +82 -0
- data/lib/peal/tiktok/client.rb +62 -0
- data/lib/peal/tiktok/types/creator_tiktok_request.rb +13 -0
- data/lib/peal/types/already_member_encoded.rb +9 -0
- data/lib/peal/types/alt_text_too_long_encoded.rb +13 -0
- data/lib/peal/types/alt_text_too_long_encoded_tag.rb +13 -0
- data/lib/peal/types/analytics_summary.rb +23 -0
- data/lib/peal/types/api_key.rb +21 -0
- data/lib/peal/types/api_key_not_found_encoded.rb +9 -0
- data/lib/peal/types/assistant_action.rb +21 -0
- data/lib/peal/types/assistant_action_hashtags.rb +9 -0
- data/lib/peal/types/assistant_action_rewrite.rb +11 -0
- data/lib/peal/types/assistant_action_shorten.rb +11 -0
- data/lib/peal/types/assistant_action_translate.rb +11 -0
- data/lib/peal/types/assistant_failed_encoded.rb +13 -0
- data/lib/peal/types/assistant_failed_encoded_reason.rb +16 -0
- data/lib/peal/types/assistant_failed_encoded_tag.rb +13 -0
- data/lib/peal/types/assistant_input_rejected_encoded.rb +15 -0
- data/lib/peal/types/assistant_input_rejected_encoded_reason.rb +14 -0
- data/lib/peal/types/assistant_input_rejected_encoded_tag.rb +13 -0
- data/lib/peal/types/assistant_quota_exceeded_encoded.rb +15 -0
- data/lib/peal/types/assistant_quota_exceeded_encoded_tag.rb +13 -0
- data/lib/peal/types/assistant_status.rb +19 -0
- data/lib/peal/types/assistant_tone.rb +17 -0
- data/lib/peal/types/assistant_unavailable_encoded.rb +11 -0
- data/lib/peal/types/assistant_unavailable_encoded_tag.rb +13 -0
- data/lib/peal/types/attempt_result.rb +24 -0
- data/lib/peal/types/authorization.rb +11 -0
- data/lib/peal/types/billing.rb +21 -0
- data/lib/peal/types/billing_subscription.rb +17 -0
- data/lib/peal/types/calendar_day.rb +25 -0
- data/lib/peal/types/channel.rb +23 -0
- data/lib/peal/types/channel_cannot_post_encoded.rb +13 -0
- data/lib/peal/types/channel_cannot_post_encoded_reason.rb +14 -0
- data/lib/peal/types/channel_cannot_post_encoded_tag.rb +13 -0
- data/lib/peal/types/channel_metrics.rb +23 -0
- data/lib/peal/types/channel_not_found_encoded.rb +9 -0
- data/lib/peal/types/channel_options.rb +13 -0
- data/lib/peal/types/channel_status.rb +19 -0
- data/lib/peal/types/channel_status_active.rb +9 -0
- data/lib/peal/types/channel_status_disabled.rb +11 -0
- data/lib/peal/types/channel_status_refresh_needed.rb +9 -0
- data/lib/peal/types/choosable_account.rb +19 -0
- data/lib/peal/types/conflict_error_body.rb +17 -0
- data/lib/peal/types/connect_failed_encoded.rb +13 -0
- data/lib/peal/types/connect_failed_encoded_tag.rb +13 -0
- data/lib/peal/types/connect_failure_reason.rb +22 -0
- data/lib/peal/types/connect_outcome.rb +17 -0
- data/lib/peal/types/connect_outcome_choose.rb +15 -0
- data/lib/peal/types/connect_outcome_connected.rb +11 -0
- data/lib/peal/types/connectable_platforms.rb +11 -0
- data/lib/peal/types/content_violation.rb +65 -0
- data/lib/peal/types/content_violation_alt_text_too_long.rb +19 -0
- data/lib/peal/types/content_violation_aspect_ratio_unsupported.rb +23 -0
- data/lib/peal/types/content_violation_aspect_ratio_unsupported_maximum.rb +15 -0
- data/lib/peal/types/content_violation_aspect_ratio_unsupported_minimum.rb +15 -0
- data/lib/peal/types/content_violation_empty.rb +13 -0
- data/lib/peal/types/content_violation_forbidden_characters.rb +15 -0
- data/lib/peal/types/content_violation_media_required.rb +13 -0
- data/lib/peal/types/content_violation_media_too_large.rb +19 -0
- data/lib/peal/types/content_violation_media_too_small.rb +19 -0
- data/lib/peal/types/content_violation_media_type_unsupported.rb +17 -0
- data/lib/peal/types/content_violation_mixed_media.rb +13 -0
- data/lib/peal/types/content_violation_no_channels.rb +9 -0
- data/lib/peal/types/content_violation_option_invalid.rb +15 -0
- data/lib/peal/types/content_violation_option_missing.rb +15 -0
- data/lib/peal/types/content_violation_option_too_long.rb +19 -0
- data/lib/peal/types/content_violation_options_for_other_platform.rb +15 -0
- data/lib/peal/types/content_violation_options_without_channel.rb +11 -0
- data/lib/peal/types/content_violation_override_without_channel.rb +11 -0
- data/lib/peal/types/content_violation_side_out_of_range.rb +23 -0
- data/lib/peal/types/content_violation_text_too_long.rb +19 -0
- data/lib/peal/types/content_violation_too_many_hashtags.rb +17 -0
- data/lib/peal/types/content_violation_too_many_links.rb +17 -0
- data/lib/peal/types/content_violation_too_many_media.rb +17 -0
- data/lib/peal/types/content_violation_too_many_mentions.rb +17 -0
- data/lib/peal/types/content_violation_too_many_pixels.rb +21 -0
- data/lib/peal/types/content_violation_too_many_videos.rb +17 -0
- data/lib/peal/types/content_violation_video_too_long.rb +19 -0
- data/lib/peal/types/content_violation_video_too_short.rb +19 -0
- data/lib/peal/types/created_api_key.rb +13 -0
- data/lib/peal/types/database_unavailable_encoded.rb +11 -0
- data/lib/peal/types/database_unavailable_encoded_tag.rb +13 -0
- data/lib/peal/types/draft_page.rb +13 -0
- data/lib/peal/types/effect_http_api_error_bad_request_encoded.rb +11 -0
- data/lib/peal/types/effect_http_api_error_bad_request_encoded_tag.rb +13 -0
- data/lib/peal/types/engagement_day.rb +19 -0
- data/lib/peal/types/failure_reason.rb +24 -0
- data/lib/peal/types/forbidden_encoded.rb +11 -0
- data/lib/peal/types/forbidden_encoded_tag.rb +13 -0
- data/lib/peal/types/invalid_date_range_encoded.rb +11 -0
- data/lib/peal/types/invalid_date_range_encoded_tag.rb +13 -0
- data/lib/peal/types/invalid_time_range_encoded.rb +11 -0
- data/lib/peal/types/invalid_time_range_encoded_tag.rb +13 -0
- data/lib/peal/types/invalid_time_zone_encoded.rb +13 -0
- data/lib/peal/types/invalid_time_zone_encoded_tag.rb +13 -0
- data/lib/peal/types/invitation.rb +21 -0
- data/lib/peal/types/invitation_not_found_encoded.rb +9 -0
- data/lib/peal/types/me.rb +15 -0
- data/lib/peal/types/me_user.rb +21 -0
- data/lib/peal/types/me_user_locale.rb +14 -0
- data/lib/peal/types/media.rb +33 -0
- data/lib/peal/types/media_attachment.rb +13 -0
- data/lib/peal/types/media_content_type.rb +18 -0
- data/lib/peal/types/media_dimensions.rb +13 -0
- data/lib/peal/types/media_in_use_encoded.rb +13 -0
- data/lib/peal/types/media_in_use_encoded_tag.rb +13 -0
- data/lib/peal/types/media_kind.rb +14 -0
- data/lib/peal/types/media_not_found_encoded.rb +9 -0
- data/lib/peal/types/media_page.rb +13 -0
- data/lib/peal/types/media_status.rb +21 -0
- data/lib/peal/types/media_status_pending.rb +9 -0
- data/lib/peal/types/media_status_ready.rb +9 -0
- data/lib/peal/types/media_status_rejected.rb +11 -0
- data/lib/peal/types/media_status_uploaded.rb +11 -0
- data/lib/peal/types/media_store_unavailable_encoded.rb +11 -0
- data/lib/peal/types/media_store_unavailable_encoded_tag.rb +13 -0
- data/lib/peal/types/media_too_large_encoded.rb +15 -0
- data/lib/peal/types/media_too_large_encoded_kind.rb +14 -0
- data/lib/peal/types/media_usage.rb +13 -0
- data/lib/peal/types/membership.rb +19 -0
- data/lib/peal/types/metric_totals.rb +21 -0
- data/lib/peal/types/metrics_snapshot.rb +13 -0
- data/lib/peal/types/non_finite_number.rb +14 -0
- data/lib/peal/types/not_found_error_body.rb +17 -0
- data/lib/peal/types/notice.rb +19 -0
- data/lib/peal/types/notice_channel.rb +13 -0
- data/lib/peal/types/notice_event.rb +23 -0
- data/lib/peal/types/notice_event_channel_reconnect_required.rb +11 -0
- data/lib/peal/types/notice_event_channel_reconnect_soon.rb +13 -0
- data/lib/peal/types/notice_event_post_failed.rb +15 -0
- data/lib/peal/types/notice_event_post_published.rb +15 -0
- data/lib/peal/types/notice_event_post_unconfirmed.rb +13 -0
- data/lib/peal/types/notice_page.rb +13 -0
- data/lib/peal/types/notification_preferences.rb +13 -0
- data/lib/peal/types/notification_preferences_email.rb +17 -0
- data/lib/peal/types/paid_plan.rb +14 -0
- data/lib/peal/types/period_usage.rb +13 -0
- data/lib/peal/types/permission.rb +40 -0
- data/lib/peal/types/plan.rb +15 -0
- data/lib/peal/types/plan_allowances.rb +17 -0
- data/lib/peal/types/plan_limit.rb +16 -0
- data/lib/peal/types/plan_limit_reached_encoded.rb +15 -0
- data/lib/peal/types/plan_limit_reached_encoded_tag.rb +13 -0
- data/lib/peal/types/plan_offer.rb +13 -0
- data/lib/peal/types/platform.rb +22 -0
- data/lib/peal/types/platform_unreachable_encoded.rb +11 -0
- data/lib/peal/types/platform_unreachable_encoded_tag.rb +13 -0
- data/lib/peal/types/post.rb +23 -0
- data/lib/peal/types/post_analytics.rb +13 -0
- data/lib/peal/types/post_content.rb +15 -0
- data/lib/peal/types/post_content_invalid_encoded.rb +11 -0
- data/lib/peal/types/post_draft.rb +15 -0
- data/lib/peal/types/post_metrics.rb +19 -0
- data/lib/peal/types/post_not_found_encoded.rb +9 -0
- data/lib/peal/types/post_outcome.rb +17 -0
- data/lib/peal/types/post_schedule.rb +13 -0
- data/lib/peal/types/post_status.rb +17 -0
- data/lib/peal/types/post_status_conflict_encoded.rb +13 -0
- data/lib/peal/types/post_status_conflict_encoded_tag.rb +13 -0
- data/lib/peal/types/post_target.rb +29 -0
- data/lib/peal/types/post_target_status.rb +18 -0
- data/lib/peal/types/prepared_upload.rb +13 -0
- data/lib/peal/types/probe_state.rb +18 -0
- data/lib/peal/types/publication_attempt.rb +23 -0
- data/lib/peal/types/rejection_reason.rb +14 -0
- data/lib/peal/types/role.rb +17 -0
- data/lib/peal/types/schedule_in_past_encoded.rb +9 -0
- data/lib/peal/types/signed_request.rb +15 -0
- data/lib/peal/types/signed_request_method.rb +13 -0
- data/lib/peal/types/subscription_status.rb +20 -0
- data/lib/peal/types/suggestion.rb +17 -0
- data/lib/peal/types/suggestion_hashtags.rb +11 -0
- data/lib/peal/types/suggestion_text.rb +11 -0
- data/lib/peal/types/target_confirmation.rb +17 -0
- data/lib/peal/types/target_confirmation_not_published.rb +9 -0
- data/lib/peal/types/target_confirmation_published.rb +11 -0
- data/lib/peal/types/target_metrics.rb +25 -0
- data/lib/peal/types/target_options.rb +19 -0
- data/lib/peal/types/target_status_conflict_encoded.rb +11 -0
- data/lib/peal/types/text_override.rb +13 -0
- data/lib/peal/types/text_unit.rb +18 -0
- data/lib/peal/types/tik_tok_account.rb +13 -0
- data/lib/peal/types/tik_tok_account_posting.rb +17 -0
- data/lib/peal/types/tik_tok_account_posting_blocked.rb +11 -0
- data/lib/peal/types/tik_tok_account_posting_ready.rb +11 -0
- data/lib/peal/types/tik_tok_block.rb +15 -0
- data/lib/peal/types/tik_tok_creator.rb +25 -0
- data/lib/peal/types/tik_tok_options.rb +26 -0
- data/lib/peal/types/tik_tok_privacy_level.rb +16 -0
- data/lib/peal/types/too_many_invitations_encoded.rb +9 -0
- data/lib/peal/types/top_post.rb +23 -0
- data/lib/peal/types/translation_language.rb +22 -0
- data/lib/peal/types/unauthenticated_encoded.rb +11 -0
- data/lib/peal/types/unauthenticated_encoded_tag.rb +13 -0
- data/lib/peal/types/unconfirmed_reason.rb +16 -0
- data/lib/peal/types/unknown_channels_encoded.rb +11 -0
- data/lib/peal/types/unknown_media_encoded.rb +11 -0
- data/lib/peal/types/unprocessable_entity_error_body.rb +19 -0
- data/lib/peal/types/unread_notices.rb +11 -0
- data/lib/peal/types/unsupported_media_type_encoded.rb +11 -0
- data/lib/peal/types/upload_incomplete_encoded.rb +11 -0
- data/lib/peal/types/upload_incomplete_encoded_tag.rb +13 -0
- data/lib/peal/types/upload_part.rb +15 -0
- data/lib/peal/types/upload_rejected_encoded.rb +13 -0
- data/lib/peal/types/upload_rejected_encoded_tag.rb +13 -0
- data/lib/peal/types/upload_target.rb +17 -0
- data/lib/peal/types/upload_target_multipart.rb +15 -0
- data/lib/peal/types/upload_target_single.rb +13 -0
- data/lib/peal/types/usage.rb +17 -0
- data/lib/peal/types/workspace_member.rb +19 -0
- data/lib/peal/types/workspace_not_found_encoded.rb +11 -0
- data/lib/peal/types/workspace_not_found_encoded_tag.rb +13 -0
- data/lib/peal/types/you_tube_options.rb +24 -0
- data/lib/peal/types/you_tube_privacy.rb +15 -0
- data/lib/peal/version.rb +2 -12
- data/lib/peal.rb +315 -248
- metadata +312 -292
- data/lib/peal/api/analytics_api.rb +0 -185
- data/lib/peal/api/api_keys_api.rb +0 -228
- data/lib/peal/api/assistant_api.rb +0 -159
- data/lib/peal/api/billing_api.rb +0 -85
- data/lib/peal/api/channels_api.rb +0 -526
- data/lib/peal/api/invitations_api.rb +0 -228
- data/lib/peal/api/media_api.rb +0 -526
- data/lib/peal/api/members_api.rb +0 -85
- data/lib/peal/api/notices_api.rb +0 -272
- data/lib/peal/api/notification_preferences_api.rb +0 -147
- data/lib/peal/api/posts_api.rb +0 -993
- data/lib/peal/api/session_api.rb +0 -79
- data/lib/peal/api/system_api.rb +0 -134
- data/lib/peal/api/tiktok_api.rb +0 -91
- data/lib/peal/api_client.rb +0 -441
- data/lib/peal/api_error.rb +0 -58
- data/lib/peal/api_model_base.rb +0 -88
- data/lib/peal/configuration.rb +0 -392
- data/lib/peal/models/already_member_encoded.rb +0 -201
- data/lib/peal/models/alt_text_too_long_encoded.rb +0 -245
- data/lib/peal/models/analytics_summary.rb +0 -361
- data/lib/peal/models/api_key.rb +0 -281
- data/lib/peal/models/api_key_not_found_encoded.rb +0 -201
- data/lib/peal/models/api_keys_revoke404_response.rb +0 -103
- data/lib/peal/models/assistant_action.rb +0 -105
- data/lib/peal/models/assistant_action_any_of.rb +0 -227
- data/lib/peal/models/assistant_action_any_of1.rb +0 -227
- data/lib/peal/models/assistant_action_any_of2.rb +0 -227
- data/lib/peal/models/assistant_action_any_of3.rb +0 -201
- data/lib/peal/models/assistant_failed_encoded.rb +0 -229
- data/lib/peal/models/assistant_input_rejected_encoded.rb +0 -273
- data/lib/peal/models/assistant_quota_exceeded_encoded.rb +0 -271
- data/lib/peal/models/assistant_status.rb +0 -335
- data/lib/peal/models/assistant_tone.rb +0 -43
- data/lib/peal/models/assistant_unavailable_encoded.rb +0 -201
- data/lib/peal/models/attempt_result.rb +0 -50
- data/lib/peal/models/authorization.rb +0 -177
- data/lib/peal/models/billing.rb +0 -303
- data/lib/peal/models/billing_subscription.rb +0 -263
- data/lib/peal/models/channel.rb +0 -313
- data/lib/peal/models/channel_cannot_post_encoded.rb +0 -229
- data/lib/peal/models/channel_metrics.rb +0 -425
- data/lib/peal/models/channel_not_found_encoded.rb +0 -201
- data/lib/peal/models/channel_options.rb +0 -203
- data/lib/peal/models/channel_status.rb +0 -104
- data/lib/peal/models/channel_status_any_of.rb +0 -201
- data/lib/peal/models/channel_status_any_of1.rb +0 -201
- data/lib/peal/models/channel_status_any_of2.rb +0 -227
- data/lib/peal/models/channels_complete_connect404_response.rb +0 -103
- data/lib/peal/models/choosable_account.rb +0 -253
- data/lib/peal/models/choose_accounts.rb +0 -241
- data/lib/peal/models/connect_callback.rb +0 -279
- data/lib/peal/models/connect_channel.rb +0 -207
- data/lib/peal/models/connect_failed_encoded.rb +0 -227
- data/lib/peal/models/connect_failure_reason.rb +0 -48
- data/lib/peal/models/connect_outcome.rb +0 -103
- data/lib/peal/models/connect_outcome_any_of.rb +0 -227
- data/lib/peal/models/connect_outcome_any_of1.rb +0 -281
- data/lib/peal/models/connectable_platforms.rb +0 -179
- data/lib/peal/models/content_violation.rb +0 -127
- data/lib/peal/models/content_violation_any_of.rb +0 -201
- data/lib/peal/models/content_violation_any_of1.rb +0 -227
- data/lib/peal/models/content_violation_any_of10.rb +0 -341
- data/lib/peal/models/content_violation_any_of11.rb +0 -253
- data/lib/peal/models/content_violation_any_of12.rb +0 -341
- data/lib/peal/models/content_violation_any_of13.rb +0 -341
- data/lib/peal/models/content_violation_any_of14.rb +0 -341
- data/lib/peal/models/content_violation_any_of15.rb +0 -341
- data/lib/peal/models/content_violation_any_of16.rb +0 -253
- data/lib/peal/models/content_violation_any_of17.rb +0 -305
- data/lib/peal/models/content_violation_any_of18.rb +0 -367
- data/lib/peal/models/content_violation_any_of19.rb +0 -367
- data/lib/peal/models/content_violation_any_of2.rb +0 -227
- data/lib/peal/models/content_violation_any_of20.rb +0 -367
- data/lib/peal/models/content_violation_any_of21.rb +0 -367
- data/lib/peal/models/content_violation_any_of22.rb +0 -411
- data/lib/peal/models/content_violation_any_of23.rb +0 -455
- data/lib/peal/models/content_violation_any_of24.rb +0 -419
- data/lib/peal/models/content_violation_any_of24_maximum.rb +0 -103
- data/lib/peal/models/content_violation_any_of25.rb +0 -367
- data/lib/peal/models/content_violation_any_of3.rb +0 -279
- data/lib/peal/models/content_violation_any_of4.rb +0 -279
- data/lib/peal/models/content_violation_any_of5.rb +0 -367
- data/lib/peal/models/content_violation_any_of6.rb +0 -279
- data/lib/peal/models/content_violation_any_of7.rb +0 -253
- data/lib/peal/models/content_violation_any_of8.rb +0 -367
- data/lib/peal/models/content_violation_any_of9.rb +0 -281
- data/lib/peal/models/created_api_key.rb +0 -203
- data/lib/peal/models/database_unavailable_encoded.rb +0 -201
- data/lib/peal/models/draft_page.rb +0 -191
- data/lib/peal/models/effect_http_api_error_bad_request_encoded.rb +0 -201
- data/lib/peal/models/engagement_day.rb +0 -364
- data/lib/peal/models/failure_reason.rb +0 -50
- data/lib/peal/models/forbidden_encoded.rb +0 -201
- data/lib/peal/models/invalid_date_range_encoded.rb +0 -201
- data/lib/peal/models/invalid_time_range_encoded.rb +0 -201
- data/lib/peal/models/invalid_time_zone_encoded.rb +0 -227
- data/lib/peal/models/invitation.rb +0 -307
- data/lib/peal/models/invitation_not_found_encoded.rb +0 -201
- data/lib/peal/models/invitations_create409_response.rb +0 -103
- data/lib/peal/models/invitations_revoke404_response.rb +0 -103
- data/lib/peal/models/mark_notices_read.rb +0 -197
- data/lib/peal/models/me.rb +0 -217
- data/lib/peal/models/me_user.rb +0 -317
- data/lib/peal/models/media.rb +0 -457
- data/lib/peal/models/media_attachment.rb +0 -212
- data/lib/peal/models/media_content_type.rb +0 -44
- data/lib/peal/models/media_create422_response.rb +0 -104
- data/lib/peal/models/media_description.rb +0 -163
- data/lib/peal/models/media_dimensions.rb +0 -239
- data/lib/peal/models/media_get404_response.rb +0 -103
- data/lib/peal/models/media_in_use_encoded.rb +0 -229
- data/lib/peal/models/media_kind.rb +0 -40
- data/lib/peal/models/media_not_found_encoded.rb +0 -201
- data/lib/peal/models/media_page.rb +0 -191
- data/lib/peal/models/media_status.rb +0 -105
- data/lib/peal/models/media_status_any_of.rb +0 -201
- data/lib/peal/models/media_status_any_of1.rb +0 -227
- data/lib/peal/models/media_status_any_of2.rb +0 -201
- data/lib/peal/models/media_status_any_of3.rb +0 -227
- data/lib/peal/models/media_store_unavailable_encoded.rb +0 -201
- data/lib/peal/models/media_too_large_encoded.rb +0 -317
- data/lib/peal/models/media_usage.rb +0 -207
- data/lib/peal/models/membership.rb +0 -283
- data/lib/peal/models/metric_totals.rb +0 -399
- data/lib/peal/models/metrics_snapshot.rb +0 -203
- data/lib/peal/models/new_api_key.rb +0 -269
- data/lib/peal/models/new_invitation.rb +0 -245
- data/lib/peal/models/new_upload.rb +0 -231
- data/lib/peal/models/non_finite_number.rb +0 -41
- data/lib/peal/models/notice.rb +0 -267
- data/lib/peal/models/notice_channel.rb +0 -225
- data/lib/peal/models/notice_event.rb +0 -106
- data/lib/peal/models/notice_event_any_of.rb +0 -251
- data/lib/peal/models/notice_event_any_of1.rb +0 -265
- data/lib/peal/models/notice_event_any_of2.rb +0 -239
- data/lib/peal/models/notice_event_any_of3.rb +0 -227
- data/lib/peal/models/notice_event_any_of4.rb +0 -253
- data/lib/peal/models/notice_page.rb +0 -191
- data/lib/peal/models/notification_preferences.rb +0 -203
- data/lib/peal/models/notification_preferences_change.rb +0 -169
- data/lib/peal/models/notification_preferences_change_email.rb +0 -187
- data/lib/peal/models/notification_preferences_email.rb +0 -255
- data/lib/peal/models/paid_plan.rb +0 -40
- data/lib/peal/models/period_usage.rb +0 -221
- data/lib/peal/models/permission.rb +0 -66
- data/lib/peal/models/plan.rb +0 -41
- data/lib/peal/models/plan_allowances.rb +0 -295
- data/lib/peal/models/plan_limit.rb +0 -42
- data/lib/peal/models/plan_limit_reached_encoded.rb +0 -271
- data/lib/peal/models/plan_offer.rb +0 -225
- data/lib/peal/models/platform.rb +0 -48
- data/lib/peal/models/platform_unreachable_encoded.rb +0 -201
- data/lib/peal/models/post.rb +0 -315
- data/lib/peal/models/post_analytics.rb +0 -205
- data/lib/peal/models/post_content.rb +0 -251
- data/lib/peal/models/post_content_invalid_encoded.rb +0 -229
- data/lib/peal/models/post_draft.rb +0 -216
- data/lib/peal/models/post_metrics.rb +0 -355
- data/lib/peal/models/post_not_found_encoded.rb +0 -201
- data/lib/peal/models/post_outcome.rb +0 -43
- data/lib/peal/models/post_schedule.rb +0 -203
- data/lib/peal/models/post_status.rb +0 -43
- data/lib/peal/models/post_status_conflict_encoded.rb +0 -227
- data/lib/peal/models/post_target.rb +0 -364
- data/lib/peal/models/post_target_status.rb +0 -44
- data/lib/peal/models/posts_create422_response.rb +0 -104
- data/lib/peal/models/posts_get404_response.rb +0 -103
- data/lib/peal/models/posts_repost409_response.rb +0 -103
- data/lib/peal/models/posts_schedule422_response.rb +0 -106
- data/lib/peal/models/prepared_upload.rb +0 -203
- data/lib/peal/models/probe_state.rb +0 -44
- data/lib/peal/models/publication_attempt.rb +0 -377
- data/lib/peal/models/rejection_reason.rb +0 -40
- data/lib/peal/models/role.rb +0 -43
- data/lib/peal/models/schedule_in_past_encoded.rb +0 -201
- data/lib/peal/models/schedule_post.rb +0 -240
- data/lib/peal/models/signed_request.rb +0 -255
- data/lib/peal/models/subscription_status.rb +0 -46
- data/lib/peal/models/suggestion.rb +0 -103
- data/lib/peal/models/suggestion_any_of.rb +0 -227
- data/lib/peal/models/suggestion_any_of1.rb +0 -229
- data/lib/peal/models/suggestion_request.rb +0 -212
- data/lib/peal/models/target_confirmation.rb +0 -103
- data/lib/peal/models/target_confirmation_any_of.rb +0 -228
- data/lib/peal/models/target_confirmation_any_of1.rb +0 -201
- data/lib/peal/models/target_metrics.rb +0 -319
- data/lib/peal/models/target_options.rb +0 -104
- data/lib/peal/models/target_status_conflict_encoded.rb +0 -227
- data/lib/peal/models/text_override.rb +0 -221
- data/lib/peal/models/text_unit.rb +0 -44
- data/lib/peal/models/tik_tok_account.rb +0 -203
- data/lib/peal/models/tik_tok_account_posting.rb +0 -103
- data/lib/peal/models/tik_tok_account_posting_any_of.rb +0 -227
- data/lib/peal/models/tik_tok_account_posting_any_of1.rb +0 -227
- data/lib/peal/models/tik_tok_block.rb +0 -41
- data/lib/peal/models/tik_tok_creator.rb +0 -357
- data/lib/peal/models/tik_tok_options.rb +0 -274
- data/lib/peal/models/tik_tok_privacy_level.rb +0 -42
- data/lib/peal/models/too_many_invitations_encoded.rb +0 -201
- data/lib/peal/models/top_post.rb +0 -337
- data/lib/peal/models/translation_language.rb +0 -48
- data/lib/peal/models/unauthenticated_encoded.rb +0 -201
- data/lib/peal/models/unconfirmed_reason.rb +0 -42
- data/lib/peal/models/unknown_channels_encoded.rb +0 -229
- data/lib/peal/models/unknown_media_encoded.rb +0 -229
- data/lib/peal/models/unread_notices.rb +0 -195
- data/lib/peal/models/unsupported_media_type_encoded.rb +0 -227
- data/lib/peal/models/upload_incomplete_encoded.rb +0 -201
- data/lib/peal/models/upload_part.rb +0 -265
- data/lib/peal/models/upload_rejected_encoded.rb +0 -227
- data/lib/peal/models/upload_target.rb +0 -103
- data/lib/peal/models/upload_target_any_of.rb +0 -253
- data/lib/peal/models/upload_target_any_of1.rb +0 -299
- data/lib/peal/models/usage.rb +0 -291
- data/lib/peal/models/workspace_member.rb +0 -281
- data/lib/peal/models/workspace_not_found_encoded.rb +0 -201
- data/lib/peal/models/you_tube_options.rb +0 -324
- data/lib/peal/models/you_tube_privacy.rb +0 -41
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Peal
|
|
4
|
+
module Internal
|
|
5
|
+
module Types
|
|
6
|
+
# Define a union between two types
|
|
7
|
+
module Union
|
|
8
|
+
include Peal::Internal::Types::Type
|
|
9
|
+
|
|
10
|
+
def members
|
|
11
|
+
@members ||= []
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Add a member to this union
|
|
15
|
+
#
|
|
16
|
+
# @param type [Object]
|
|
17
|
+
# @option key [Symbol, String]
|
|
18
|
+
# @return [void]
|
|
19
|
+
def member(type, key: nil)
|
|
20
|
+
members.push([key, Utils.wrap_type(type)])
|
|
21
|
+
self
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def type_member?(type)
|
|
25
|
+
members.any? { |_key, type_fn| type == type_fn.call }
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Set the discriminant for this union
|
|
29
|
+
#
|
|
30
|
+
# @param key [Symbol, String]
|
|
31
|
+
# @return [void]
|
|
32
|
+
def discriminant(key)
|
|
33
|
+
@discriminant = key
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# @api private
|
|
37
|
+
private def discriminated?
|
|
38
|
+
!@discriminant.nil?
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Check if value matches a type, handling type wrapper instances
|
|
42
|
+
# (Internal::Types::Hash and Internal::Types::Array instances)
|
|
43
|
+
#
|
|
44
|
+
# @param value [Object]
|
|
45
|
+
# @param member_type [Object]
|
|
46
|
+
# @return [Boolean]
|
|
47
|
+
private def type_matches?(value, member_type)
|
|
48
|
+
case member_type
|
|
49
|
+
when Peal::Internal::Types::Hash
|
|
50
|
+
value.is_a?(::Hash)
|
|
51
|
+
when Peal::Internal::Types::Array
|
|
52
|
+
value.is_a?(::Array)
|
|
53
|
+
when Class, Module
|
|
54
|
+
value.is_a?(member_type)
|
|
55
|
+
else
|
|
56
|
+
false
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Resolves the type of a value to be one of the members
|
|
61
|
+
#
|
|
62
|
+
# @param value [Object]
|
|
63
|
+
# @return [Class]
|
|
64
|
+
private def resolve_member(value)
|
|
65
|
+
if discriminated? && value.is_a?(::Hash)
|
|
66
|
+
# Try both symbol and string keys for the discriminant
|
|
67
|
+
discriminant_value = value.fetch(@discriminant, nil) || value.fetch(@discriminant.to_s, nil)
|
|
68
|
+
|
|
69
|
+
return if discriminant_value.nil?
|
|
70
|
+
|
|
71
|
+
# Convert to string for consistent comparison
|
|
72
|
+
discriminant_str = discriminant_value.to_s
|
|
73
|
+
|
|
74
|
+
# First try exact match
|
|
75
|
+
members_hash = members.to_h
|
|
76
|
+
result = members_hash[discriminant_str]&.call
|
|
77
|
+
return result if result
|
|
78
|
+
|
|
79
|
+
# Try case-insensitive match as fallback
|
|
80
|
+
discriminant_lower = discriminant_str.downcase
|
|
81
|
+
matching_keys = members_hash.keys.select { |k| k.to_s.downcase == discriminant_lower }
|
|
82
|
+
|
|
83
|
+
# Only use case-insensitive match if exactly one key matches (avoid ambiguity)
|
|
84
|
+
return members_hash[matching_keys.first]&.call if matching_keys.length == 1
|
|
85
|
+
|
|
86
|
+
nil
|
|
87
|
+
else
|
|
88
|
+
# First try exact type matching
|
|
89
|
+
result = members.find do |_key, mem|
|
|
90
|
+
member_type = Utils.unwrap_type(mem)
|
|
91
|
+
type_matches?(value, member_type)
|
|
92
|
+
end&.last&.call
|
|
93
|
+
|
|
94
|
+
return result if result
|
|
95
|
+
|
|
96
|
+
# For Hash values, try to coerce into Model member types
|
|
97
|
+
if value.is_a?(::Hash)
|
|
98
|
+
members.find do |_key, mem|
|
|
99
|
+
member_type = Utils.unwrap_type(mem)
|
|
100
|
+
# Check if member_type is a Model class
|
|
101
|
+
next unless member_type.is_a?(Class) && member_type <= Model
|
|
102
|
+
|
|
103
|
+
# Try to coerce the hash into this model type with strict mode
|
|
104
|
+
begin
|
|
105
|
+
candidate = Utils.coerce(member_type, value, strict: true)
|
|
106
|
+
|
|
107
|
+
# Validate that all required (non-optional) fields are present
|
|
108
|
+
# This ensures undiscriminated unions properly distinguish between member types
|
|
109
|
+
member_type.fields.each do |field_name, field|
|
|
110
|
+
raise Errors::TypeError, "Required field `#{field_name}` missing for union member #{member_type.name}" if candidate.instance_variable_get(:@data)[field_name].nil? && !field.optional
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
true
|
|
114
|
+
rescue Errors::TypeError
|
|
115
|
+
false
|
|
116
|
+
end
|
|
117
|
+
end&.last&.call
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def coerce(value, strict: strict?)
|
|
123
|
+
type = resolve_member(value)
|
|
124
|
+
|
|
125
|
+
unless type
|
|
126
|
+
return value unless strict
|
|
127
|
+
|
|
128
|
+
if discriminated?
|
|
129
|
+
raise Errors::TypeError,
|
|
130
|
+
"value of type `#{value.class}` not member of union #{self}"
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
raise Errors::TypeError, "could not resolve to member of union #{self}"
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
coerced = Utils.coerce(type, value, strict: strict)
|
|
137
|
+
|
|
138
|
+
# For discriminated unions, store the discriminant info on the coerced instance
|
|
139
|
+
# so it can be injected back during serialization (to_h)
|
|
140
|
+
if discriminated? && value.is_a?(::Hash) && coerced.is_a?(Model)
|
|
141
|
+
discriminant_value = value.fetch(@discriminant, nil) || value.fetch(@discriminant.to_s, nil)
|
|
142
|
+
if discriminant_value
|
|
143
|
+
coerced.instance_variable_set(:@_fern_union_discriminant_key, @discriminant.to_s)
|
|
144
|
+
coerced.instance_variable_set(:@_fern_union_discriminant_value, discriminant_value)
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
coerced
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# Parse JSON string and coerce to the correct union member type
|
|
152
|
+
#
|
|
153
|
+
# @param str [String] JSON string to parse
|
|
154
|
+
# @return [Object] Coerced value matching a union member
|
|
155
|
+
def load(str)
|
|
156
|
+
coerce(::JSON.parse(str, symbolize_names: true))
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
end
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Peal
|
|
4
|
+
module Internal
|
|
5
|
+
module Types
|
|
6
|
+
# Utilities for dealing with and checking types
|
|
7
|
+
module Utils
|
|
8
|
+
# Wraps a type into a type function
|
|
9
|
+
#
|
|
10
|
+
# @param type [Proc, Object]
|
|
11
|
+
# @return [Proc]
|
|
12
|
+
def self.wrap_type(type)
|
|
13
|
+
case type
|
|
14
|
+
when Proc
|
|
15
|
+
type
|
|
16
|
+
else
|
|
17
|
+
-> { type }
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Resolves a type or type function into a type
|
|
22
|
+
#
|
|
23
|
+
# @param type [Proc, Object]
|
|
24
|
+
# @return [Object]
|
|
25
|
+
def self.unwrap_type(type)
|
|
26
|
+
type.is_a?(Proc) ? type.call : type
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
EXACT_SCALAR_TYPES = [String, Integer, Float].freeze
|
|
30
|
+
private_constant :EXACT_SCALAR_TYPES
|
|
31
|
+
|
|
32
|
+
def self.coerce(target, value, strict: false)
|
|
33
|
+
type = unwrap_type(target)
|
|
34
|
+
|
|
35
|
+
# Fast path: exact String/Integer/Float instances are returned as-is, as the branches below would.
|
|
36
|
+
# Subclasses still go through their `to_s`/`to_i`/`to_f` conversion.
|
|
37
|
+
return value if EXACT_SCALAR_TYPES.include?(type) && value.instance_of?(type)
|
|
38
|
+
|
|
39
|
+
case type
|
|
40
|
+
in Array
|
|
41
|
+
case value
|
|
42
|
+
when ::Array
|
|
43
|
+
return type.coerce(value, strict: strict)
|
|
44
|
+
when Set, ::Hash
|
|
45
|
+
return coerce(type, value.to_a)
|
|
46
|
+
end
|
|
47
|
+
in Hash
|
|
48
|
+
case value
|
|
49
|
+
when ::Hash
|
|
50
|
+
return type.coerce(value, strict: strict)
|
|
51
|
+
when ::Array
|
|
52
|
+
return coerce(type, value.to_h)
|
|
53
|
+
end
|
|
54
|
+
in Class if type <= NilClass
|
|
55
|
+
return nil
|
|
56
|
+
in Class if type <= String
|
|
57
|
+
case value
|
|
58
|
+
when String, Symbol, Numeric, TrueClass, FalseClass
|
|
59
|
+
return value.to_s
|
|
60
|
+
end
|
|
61
|
+
in Class if type <= Symbol
|
|
62
|
+
case value
|
|
63
|
+
when Symbol, String
|
|
64
|
+
return value.to_sym
|
|
65
|
+
end
|
|
66
|
+
in Class if type <= Integer
|
|
67
|
+
case value
|
|
68
|
+
when Numeric, String, Time
|
|
69
|
+
return value.to_i
|
|
70
|
+
when Symbol
|
|
71
|
+
# JSON object keys are parsed as symbols, so numeric map keys arrive as e.g. :"1"
|
|
72
|
+
parsed = Integer(value.to_s, 10, exception: false)
|
|
73
|
+
return parsed unless parsed.nil?
|
|
74
|
+
end
|
|
75
|
+
in Class if type <= Float
|
|
76
|
+
case value
|
|
77
|
+
when Numeric, Time, String
|
|
78
|
+
return value.to_f
|
|
79
|
+
when Symbol
|
|
80
|
+
parsed = Float(value.to_s, exception: false)
|
|
81
|
+
return parsed unless parsed.nil?
|
|
82
|
+
end
|
|
83
|
+
in Class if type <= Model
|
|
84
|
+
case value
|
|
85
|
+
when type
|
|
86
|
+
return value
|
|
87
|
+
when ::Hash
|
|
88
|
+
return type.coerce(value, strict: strict)
|
|
89
|
+
end
|
|
90
|
+
in Module
|
|
91
|
+
case type
|
|
92
|
+
in Enum | Union
|
|
93
|
+
return type.coerce(value, strict: strict)
|
|
94
|
+
else
|
|
95
|
+
value # rubocop:disable Lint/Void
|
|
96
|
+
end
|
|
97
|
+
else
|
|
98
|
+
value # rubocop:disable Lint/Void
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
raise Errors::TypeError, "cannot coerce value of type `#{value.class}` to `#{target}`" if strict
|
|
102
|
+
|
|
103
|
+
value
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def self.symbolize_keys(hash)
|
|
107
|
+
hash.transform_keys(&:to_sym)
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# Converts camelCase keys to snake_case symbols
|
|
111
|
+
# This allows SDK methods to accept both snake_case and camelCase keys
|
|
112
|
+
# e.g., { refundMethod: ... } becomes { refund_method: ... }
|
|
113
|
+
#
|
|
114
|
+
# @param hash [Hash]
|
|
115
|
+
# @return [Hash]
|
|
116
|
+
def self.normalize_keys(hash)
|
|
117
|
+
hash.transform_keys do |key|
|
|
118
|
+
key_str = key.to_s
|
|
119
|
+
# Convert camelCase to snake_case
|
|
120
|
+
snake_case = key_str.gsub(/([a-z\d])([A-Z])/, '\1_\2').downcase
|
|
121
|
+
snake_case.to_sym
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
# Converts Time values (including ActiveSupport::TimeWithZone), recursively within hashes and arrays, to
|
|
126
|
+
# RFC 3339 strings with millisecond precision. `Time#to_s` (e.g. "2026-10-16 01:40:16 UTC") is not RFC 3339.
|
|
127
|
+
# Date and DateTime values are left unchanged because their `to_s` output is already ISO 8601.
|
|
128
|
+
#
|
|
129
|
+
# @param value [Object]
|
|
130
|
+
# @return [Object]
|
|
131
|
+
def self.serialize_times(value)
|
|
132
|
+
case value
|
|
133
|
+
when ::Hash
|
|
134
|
+
value.transform_values { |item| serialize_times(item) }
|
|
135
|
+
when ::Array
|
|
136
|
+
value.map { |item| serialize_times(item) }
|
|
137
|
+
else
|
|
138
|
+
value.is_a?(::Time) ? value.iso8601(3) : value
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
end
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Peal
|
|
4
|
+
module Invitations
|
|
5
|
+
class Client
|
|
6
|
+
# @param client [Peal::Internal::Http::RawClient]
|
|
7
|
+
#
|
|
8
|
+
# @return [void]
|
|
9
|
+
def initialize(client:)
|
|
10
|
+
@client = client
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Lists the workspace's pending invitations, oldest first, expired ones included. Needs invitation:create, as an
|
|
14
|
+
# invitation's id opens its link, and a member rather than an API key; invitations to the owner role are listed to
|
|
15
|
+
# owners only.
|
|
16
|
+
#
|
|
17
|
+
# @param request_options [Hash]
|
|
18
|
+
# @param params [Hash]
|
|
19
|
+
# @option request_options [String] :base_url
|
|
20
|
+
# @option request_options [Hash{String => Object}] :additional_headers
|
|
21
|
+
# @option request_options [Hash{String => Object}] :additional_query_parameters
|
|
22
|
+
# @option request_options [Hash{String => Object}] :additional_body_parameters
|
|
23
|
+
# @option request_options [Integer] :timeout_in_seconds
|
|
24
|
+
# @option params [String] :workspace_id
|
|
25
|
+
#
|
|
26
|
+
# @example
|
|
27
|
+
# client.invitations.list(workspace_id: "workspaceId")
|
|
28
|
+
#
|
|
29
|
+
# @return [Array[Peal::Types::Invitation]]
|
|
30
|
+
def list(request_options: {}, **params)
|
|
31
|
+
params = Peal::Internal::Types::Utils.normalize_keys(params)
|
|
32
|
+
request = Peal::Internal::JSON::Request.new(
|
|
33
|
+
base_url: request_options[:base_url],
|
|
34
|
+
method: "GET",
|
|
35
|
+
path: "api/workspaces/#{URI.encode_uri_component(params[:workspace_id].to_s)}/invitations",
|
|
36
|
+
request_options: request_options
|
|
37
|
+
)
|
|
38
|
+
begin
|
|
39
|
+
response = @client.send(request)
|
|
40
|
+
rescue Net::HTTPRequestTimeout
|
|
41
|
+
raise Peal::Errors::TimeoutError
|
|
42
|
+
end
|
|
43
|
+
code = response.code.to_i
|
|
44
|
+
if code.between?(200, 299)
|
|
45
|
+
Peal::Internal::Types::Utils.coerce(Internal::Types::Array[Peal::Types::Invitation], (response.body.to_s.empty? ? nil : JSON.parse(response.body, symbolize_names: true)))
|
|
46
|
+
else
|
|
47
|
+
error_class = Peal::Errors::ResponseError.subclass_for_code(code)
|
|
48
|
+
error_types = {
|
|
49
|
+
401 => Peal::Types::UnauthenticatedEncoded,
|
|
50
|
+
403 => Peal::Types::ForbiddenEncoded
|
|
51
|
+
}
|
|
52
|
+
error_body = Peal::Errors::ResponseError.load_error_body(code, response.body, error_types)
|
|
53
|
+
raise error_class.new(response.body, code: code, body: error_body, headers: response.to_hash)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Invites someone to the workspace with a role: Peal emails them a link that works for 7 days, in their language
|
|
58
|
+
# when they have an account, in the inviter's otherwise. A pending invitation to the same address is revoked, and
|
|
59
|
+
# its link stops working. Only owners invite owners. On a server that bills, the members and the other pending
|
|
60
|
+
# invitations must leave room in the workspace's plan (PlanLimitReached). Needs invitation:create, and a member in
|
|
61
|
+
# person: not an API key, nor staff impersonating one.
|
|
62
|
+
#
|
|
63
|
+
# @param request_options [Hash]
|
|
64
|
+
# @param params [Peal::Invitations::Types::NewInvitation]
|
|
65
|
+
# @option request_options [String] :base_url
|
|
66
|
+
# @option request_options [Hash{String => Object}] :additional_headers
|
|
67
|
+
# @option request_options [Hash{String => Object}] :additional_query_parameters
|
|
68
|
+
# @option request_options [Hash{String => Object}] :additional_body_parameters
|
|
69
|
+
# @option request_options [Integer] :timeout_in_seconds
|
|
70
|
+
# @option params [String] :workspace_id
|
|
71
|
+
#
|
|
72
|
+
# @example
|
|
73
|
+
# client.invitations.create(
|
|
74
|
+
# workspace_id: "workspaceId",
|
|
75
|
+
# email: "email",
|
|
76
|
+
# role: "owner"
|
|
77
|
+
# )
|
|
78
|
+
#
|
|
79
|
+
# @return [Peal::Types::Invitation]
|
|
80
|
+
def create(request_options: {}, **params)
|
|
81
|
+
params = Peal::Internal::Types::Utils.normalize_keys(params)
|
|
82
|
+
request_data = Peal::Invitations::Types::NewInvitation.new(params).to_h
|
|
83
|
+
non_body_param_names = %w[workspaceId]
|
|
84
|
+
body = request_data.except(*non_body_param_names)
|
|
85
|
+
|
|
86
|
+
request = Peal::Internal::JSON::Request.new(
|
|
87
|
+
base_url: request_options[:base_url],
|
|
88
|
+
method: "POST",
|
|
89
|
+
path: "api/workspaces/#{URI.encode_uri_component(params[:workspace_id].to_s)}/invitations",
|
|
90
|
+
body: body,
|
|
91
|
+
request_options: request_options,
|
|
92
|
+
max_retries: 0
|
|
93
|
+
)
|
|
94
|
+
begin
|
|
95
|
+
response = @client.send(request)
|
|
96
|
+
rescue Net::HTTPRequestTimeout
|
|
97
|
+
raise Peal::Errors::TimeoutError
|
|
98
|
+
end
|
|
99
|
+
code = response.code.to_i
|
|
100
|
+
if code.between?(200, 299)
|
|
101
|
+
(response.body.to_s.empty? ? nil : Peal::Types::Invitation.load(response.body))
|
|
102
|
+
else
|
|
103
|
+
error_class = Peal::Errors::ResponseError.subclass_for_code(code)
|
|
104
|
+
error_types = {
|
|
105
|
+
401 => Peal::Types::UnauthenticatedEncoded,
|
|
106
|
+
402 => Peal::Types::PlanLimitReachedEncoded,
|
|
107
|
+
403 => Peal::Types::ForbiddenEncoded
|
|
108
|
+
}
|
|
109
|
+
error_body = Peal::Errors::ResponseError.load_error_body(code, response.body, error_types)
|
|
110
|
+
raise error_class.new(response.body, code: code, body: error_body, headers: response.to_hash)
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# Revokes a pending invitation of the workspace: its link stops working at once. Needs invitation:cancel, and a
|
|
115
|
+
# member in person: not an API key, nor staff impersonating one.
|
|
116
|
+
#
|
|
117
|
+
# @param request_options [Hash]
|
|
118
|
+
# @param params [Hash]
|
|
119
|
+
# @option request_options [String] :base_url
|
|
120
|
+
# @option request_options [Hash{String => Object}] :additional_headers
|
|
121
|
+
# @option request_options [Hash{String => Object}] :additional_query_parameters
|
|
122
|
+
# @option request_options [Hash{String => Object}] :additional_body_parameters
|
|
123
|
+
# @option request_options [Integer] :timeout_in_seconds
|
|
124
|
+
# @option params [String] :workspace_id
|
|
125
|
+
# @option params [String] :invitation_id
|
|
126
|
+
#
|
|
127
|
+
# @example
|
|
128
|
+
# client.invitations.revoke(
|
|
129
|
+
# workspace_id: "workspaceId",
|
|
130
|
+
# invitation_id: "invitationId"
|
|
131
|
+
# )
|
|
132
|
+
#
|
|
133
|
+
# @return [untyped]
|
|
134
|
+
def revoke(request_options: {}, **params)
|
|
135
|
+
params = Peal::Internal::Types::Utils.normalize_keys(params)
|
|
136
|
+
request = Peal::Internal::JSON::Request.new(
|
|
137
|
+
base_url: request_options[:base_url],
|
|
138
|
+
method: "DELETE",
|
|
139
|
+
path: "api/workspaces/#{URI.encode_uri_component(params[:workspace_id].to_s)}/invitations/#{URI.encode_uri_component(params[:invitation_id].to_s)}",
|
|
140
|
+
request_options: request_options
|
|
141
|
+
)
|
|
142
|
+
begin
|
|
143
|
+
response = @client.send(request)
|
|
144
|
+
rescue Net::HTTPRequestTimeout
|
|
145
|
+
raise Peal::Errors::TimeoutError
|
|
146
|
+
end
|
|
147
|
+
code = response.code.to_i
|
|
148
|
+
return if code.between?(200, 299)
|
|
149
|
+
|
|
150
|
+
error_class = Peal::Errors::ResponseError.subclass_for_code(code)
|
|
151
|
+
error_types = {
|
|
152
|
+
401 => Peal::Types::UnauthenticatedEncoded,
|
|
153
|
+
403 => Peal::Types::ForbiddenEncoded
|
|
154
|
+
}
|
|
155
|
+
error_body = Peal::Errors::ResponseError.load_error_body(code, response.body, error_types)
|
|
156
|
+
raise error_class.new(response.body, code: code, body: error_body, headers: response.to_hash)
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Peal
|
|
4
|
+
module Invitations
|
|
5
|
+
module Types
|
|
6
|
+
class ListInvitationsRequest < Internal::Types::Model
|
|
7
|
+
field :workspace_id, -> { String }, optional: false, nullable: false, api_name: "workspaceId"
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Peal
|
|
4
|
+
module Invitations
|
|
5
|
+
module Types
|
|
6
|
+
class NewInvitation < Internal::Types::Model
|
|
7
|
+
field :workspace_id, -> { String }, optional: false, nullable: false, api_name: "workspaceId"
|
|
8
|
+
|
|
9
|
+
field :email, -> { String }, optional: false, nullable: false
|
|
10
|
+
|
|
11
|
+
field :role, -> { Peal::Types::Role }, optional: false, nullable: false
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Peal
|
|
4
|
+
module Invitations
|
|
5
|
+
module Types
|
|
6
|
+
class RevokeInvitationsRequest < Internal::Types::Model
|
|
7
|
+
field :workspace_id, -> { String }, optional: false, nullable: false, api_name: "workspaceId"
|
|
8
|
+
|
|
9
|
+
field :invitation_id, -> { String }, optional: false, nullable: false, api_name: "invitationId"
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|