clerk-sdk-ruby 5.1.1 → 5.1.3
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/lib/clerk/actortokens.rb +12 -4
- data/lib/clerk/agenttasks.rb +335 -0
- data/lib/clerk/allowlistidentifiers.rb +16 -5
- data/lib/clerk/api_keys.rb +39 -13
- data/lib/clerk/betafeatures.rb +17 -9
- data/lib/clerk/billing.rb +46 -14
- data/lib/clerk/blocklistidentifiers.rb +16 -5
- data/lib/clerk/clients.rb +18 -7
- data/lib/clerk/domains.rb +21 -7
- data/lib/clerk/emailaddresses.rb +23 -9
- data/lib/clerk/emailandsmstemplates.rb +10 -5
- data/lib/clerk/emailsmstemplates.rb +28 -14
- data/lib/clerk/instancesettings.rb +306 -15
- data/lib/clerk/invitations.rb +22 -8
- data/lib/clerk/jwks.rb +7 -2
- data/lib/clerk/jwttemplates.rb +25 -8
- data/lib/clerk/m2m.rb +32 -14
- data/lib/clerk/machines.rb +43 -14
- data/lib/clerk/miscellaneous.rb +7 -2
- data/lib/clerk/models/components/action.rb +20 -0
- data/lib/clerk/models/components/action.rbi +11 -0
- data/lib/clerk/models/components/actortoken.rb +4 -4
- data/lib/clerk/models/components/adjustcreditbalancerequest.rb +48 -0
- data/lib/clerk/models/components/adjustcreditbalancerequest.rbi +21 -0
- data/lib/clerk/models/components/agenttask.rb +47 -0
- data/lib/clerk/models/components/agenttask.rbi +19 -0
- data/lib/clerk/models/components/agenttask_object.rb +19 -0
- data/lib/clerk/models/components/agenttask_object.rbi +11 -0
- data/lib/clerk/models/components/allowlistidentifier.rb +6 -6
- data/lib/clerk/models/components/allowlistidentifier_object.rb +1 -1
- data/lib/clerk/models/components/balance.rb +44 -0
- data/lib/clerk/models/components/balance.rbi +19 -0
- data/lib/clerk/models/components/billingpaymentattempt.rb +7 -3
- data/lib/clerk/models/components/billingpaymentattempt.rbi +2 -0
- data/lib/clerk/models/components/billingpaymentattempt_credits.rb +40 -0
- data/lib/clerk/models/components/billingpaymentattempt_credits.rbi +17 -0
- data/lib/clerk/models/components/billingpaymentattempt_payer.rb +36 -0
- data/lib/clerk/models/components/billingpaymentattempt_payer.rbi +15 -0
- data/lib/clerk/models/components/billingpaymentattempt_proration.rb +44 -0
- data/lib/clerk/models/components/billingpaymentattempt_proration.rbi +19 -0
- data/lib/clerk/models/components/billingpaymentattempt_totals.rb +52 -0
- data/lib/clerk/models/components/billingpaymentattempt_totals.rbi +23 -0
- data/lib/clerk/models/components/billingpriceresponse.rb +6 -2
- data/lib/clerk/models/components/billingpriceresponse.rbi +2 -0
- data/lib/clerk/models/components/billingstatement.rb +3 -3
- data/lib/clerk/models/components/{totals.rb → billingstatement_totals.rb} +6 -2
- data/lib/clerk/models/components/{totals.rbi → billingstatement_totals.rbi} +4 -2
- data/lib/clerk/models/components/blocklistidentifier.rb +6 -6
- data/lib/clerk/models/components/blocklistidentifier_object.rb +1 -1
- data/lib/clerk/models/components/blocklistidentifiers.rb +1 -1
- data/lib/clerk/models/components/client.rb +7 -7
- data/lib/clerk/models/components/client_object.rb +1 -1
- data/lib/clerk/models/components/cnametarget.rb +1 -1
- data/lib/clerk/models/components/commercecreditbalanceresponse.rb +36 -0
- data/lib/clerk/models/components/commercecreditbalanceresponse.rbi +15 -0
- data/lib/clerk/models/components/commercecreditledgerresponse.rb +64 -0
- data/lib/clerk/models/components/commercecreditledgerresponse.rbi +29 -0
- data/lib/clerk/models/components/commercepayerresponse.rb +1 -1
- data/lib/clerk/models/components/commercepaymentmethodresponse.rb +3 -3
- data/lib/clerk/models/components/commerceperunittotal.rb +40 -0
- data/lib/clerk/models/components/commerceperunittotal.rbi +17 -0
- data/lib/clerk/models/components/commerceperunittotaltier.rb +40 -0
- data/lib/clerk/models/components/commerceperunittotaltier.rbi +17 -0
- data/lib/clerk/models/components/commerceplan.rb +8 -4
- data/lib/clerk/models/components/commerceplan.rbi +2 -0
- data/lib/clerk/models/components/commerceplanunitprice.rb +40 -0
- data/lib/clerk/models/components/commerceplanunitprice.rbi +17 -0
- data/lib/clerk/models/components/commerceplanunitpricetier.rb +40 -0
- data/lib/clerk/models/components/commerceplanunitpricetier.rbi +17 -0
- data/lib/clerk/models/components/commercepricetransitiondetails.rb +2 -2
- data/lib/clerk/models/components/commercepricetransitionresponse.rb +1 -1
- data/lib/clerk/models/components/commercesubscription.rb +2 -2
- data/lib/clerk/models/components/commercesubscriptionitem.rb +17 -5
- data/lib/clerk/models/components/commercesubscriptionitem.rbi +6 -0
- data/lib/clerk/models/components/commercesubscriptionitem_credits.rb +40 -0
- data/lib/clerk/models/components/commercesubscriptionitem_credits.rbi +17 -0
- data/lib/clerk/models/components/commercesubscriptionitem_payer.rb +36 -0
- data/lib/clerk/models/components/commercesubscriptionitem_payer.rbi +15 -0
- data/lib/clerk/models/components/commercesubscriptionitem_plan.rb +8 -4
- data/lib/clerk/models/components/commercesubscriptionitem_plan.rbi +2 -0
- data/lib/clerk/models/components/commercesubscriptionitem_proration.rb +44 -0
- data/lib/clerk/models/components/commercesubscriptionitem_proration.rbi +19 -0
- data/lib/clerk/models/components/commercesubscriptionitem_totals.rb +52 -0
- data/lib/clerk/models/components/commercesubscriptionitem_totals.rbi +23 -0
- data/lib/clerk/models/components/commercesubscriptionitem_totals_credits.rb +40 -0
- data/lib/clerk/models/components/commercesubscriptionitem_totals_credits.rbi +17 -0
- data/lib/clerk/models/components/commercesubscriptionitem_totals_payer.rb +36 -0
- data/lib/clerk/models/components/commercesubscriptionitem_totals_payer.rbi +15 -0
- data/lib/clerk/models/components/commercesubscriptionitem_totals_proration.rb +44 -0
- data/lib/clerk/models/components/commercesubscriptionitem_totals_proration.rbi +19 -0
- data/lib/clerk/models/components/cookies.rb +1 -1
- data/lib/clerk/models/components/creator_role.rb +1 -1
- data/lib/clerk/models/components/default_role.rb +1 -1
- data/lib/clerk/models/components/domain.rb +2 -2
- data/lib/clerk/models/components/domains.rb +1 -1
- data/lib/clerk/models/components/emailaddress.rb +5 -5
- data/lib/clerk/models/components/emailaddress_admin.rb +3 -3
- data/lib/clerk/models/components/emailaddress_object.rb +1 -1
- data/lib/clerk/models/components/emailaddress_otp.rb +3 -3
- data/lib/clerk/models/components/emailaddress_saml.rb +3 -3
- data/lib/clerk/models/components/emailaddress_ticket.rb +3 -3
- data/lib/clerk/models/components/emaillink.rb +3 -3
- data/lib/clerk/models/components/enterpriseaccount.rb +5 -5
- data/lib/clerk/models/components/enterpriseaccount_oauth.rb +2 -2
- data/lib/clerk/models/components/enterpriseaccount_object.rb +1 -1
- data/lib/clerk/models/components/enterpriseaccount_saml.rb +3 -3
- data/lib/clerk/models/components/enterpriseaccount_ticket.rb +3 -3
- data/lib/clerk/models/components/enterpriseconnection_1.rb +3 -3
- data/lib/clerk/models/components/enterpriseconnection_2.rb +3 -3
- data/lib/clerk/models/components/extendfreetrialrequest.rb +1 -1
- data/lib/clerk/models/components/externalaccountwithverification.rb +7 -7
- data/lib/clerk/models/components/externalaccountwithverification_oauth.rb +2 -2
- data/lib/clerk/models/components/featureresponse.rb +1 -1
- data/lib/clerk/models/components/fromoauth.rb +2 -2
- data/lib/clerk/models/components/googleonetap.rb +3 -3
- data/lib/clerk/models/components/group.rb +1 -1
- data/lib/clerk/models/components/instance.rb +1 -1
- data/lib/clerk/models/components/instanceprotect.rb +1 -1
- data/lib/clerk/models/components/instancerestrictions.rb +1 -1
- data/lib/clerk/models/components/instancesettings.rb +1 -1
- data/lib/clerk/models/components/invitation.rb +5 -5
- data/lib/clerk/models/components/invitation_revoked.rb +5 -5
- data/lib/clerk/models/components/jwttemplate.rb +3 -3
- data/lib/clerk/models/components/machine.rb +1 -1
- data/lib/clerk/models/components/machine_created.rb +1 -1
- data/lib/clerk/models/components/machine_deleted.rb +1 -1
- data/lib/clerk/models/components/machine_secretkey.rb +1 -1
- data/lib/clerk/models/components/machinescope.rb +1 -1
- data/lib/clerk/models/components/machinescope_deleted.rb +1 -1
- data/lib/clerk/models/components/machinewithoutscopedmachines.rb +1 -1
- data/lib/clerk/models/components/oauthaccesstoken.rb +1 -1
- data/lib/clerk/models/components/oauthapplication.rb +6 -6
- data/lib/clerk/models/components/oauthapplications.rb +1 -1
- data/lib/clerk/models/components/oauthapplicationsettings.rb +40 -0
- data/lib/clerk/models/components/oauthapplicationsettings.rbi +17 -0
- data/lib/clerk/models/components/oauthapplicationsettings_object.rb +19 -0
- data/lib/clerk/models/components/oauthapplicationsettings_object.rbi +11 -0
- data/lib/clerk/models/components/oauthapplicationwithsecret.rb +7 -7
- data/lib/clerk/models/components/organization.rb +5 -5
- data/lib/clerk/models/components/organizationdomain.rb +3 -3
- data/lib/clerk/models/components/organizationdomain_object.rb +1 -1
- data/lib/clerk/models/components/organizationdomain_verification.rb +1 -1
- data/lib/clerk/models/components/organizationdomains.rb +1 -1
- data/lib/clerk/models/components/organizationinvitation.rb +2 -2
- data/lib/clerk/models/components/organizationinvitation_object.rb +1 -1
- data/lib/clerk/models/components/organizationinvitations.rb +1 -1
- data/lib/clerk/models/components/organizationinvitationswithpublicorganizationdata.rb +1 -1
- data/lib/clerk/models/components/organizationinvitationwithpublicorganizationdata.rb +2 -2
- data/lib/clerk/models/components/organizationinvitationwithpublicorganizationdata_object.rb +1 -1
- data/lib/clerk/models/components/organizationmembership.rb +2 -2
- data/lib/clerk/models/components/organizationmembership_object.rb +1 -1
- data/lib/clerk/models/components/organizationmembership_organization.rb +5 -5
- data/lib/clerk/models/components/organizationmembershippublicuserdata.rb +1 -1
- data/lib/clerk/models/components/organizationmemberships.rb +1 -1
- data/lib/clerk/models/components/organizations.rb +1 -1
- data/lib/clerk/models/components/organizationsettings.rb +3 -3
- data/lib/clerk/models/components/organizationwithlogo.rb +6 -6
- data/lib/clerk/models/components/passkey.rb +3 -3
- data/lib/clerk/models/components/passkey_object.rb +1 -1
- data/lib/clerk/models/components/payment_source.rb +3 -3
- data/lib/clerk/models/components/permission.rb +3 -3
- data/lib/clerk/models/components/permissions.rb +1 -1
- data/lib/clerk/models/components/phonenumber.rb +4 -4
- data/lib/clerk/models/components/phonenumber_admin.rb +3 -3
- data/lib/clerk/models/components/phonenumber_object.rb +1 -1
- data/lib/clerk/models/components/phonenumber_otp.rb +3 -3
- data/lib/clerk/models/components/protocol.rb +1 -1
- data/lib/clerk/models/components/proxycheck.rb +4 -4
- data/lib/clerk/models/components/redirecturl.rb +3 -3
- data/lib/clerk/models/components/role.rb +3 -3
- data/lib/clerk/models/components/role_set_migration.rb +1 -1
- data/lib/clerk/models/components/roles.rb +1 -1
- data/lib/clerk/models/components/roleset.rb +2 -2
- data/lib/clerk/models/components/rolesetitem.rb +1 -1
- data/lib/clerk/models/components/samlaccount.rb +3 -3
- data/lib/clerk/models/components/samlaccount_object.rb +1 -1
- data/lib/clerk/models/components/samlaccount_saml.rb +3 -3
- data/lib/clerk/models/components/samlaccount_ticket.rb +3 -3
- data/lib/clerk/models/components/samlconnection_1.rb +3 -3
- data/lib/clerk/models/components/samlconnection_2.rb +3 -3
- data/lib/clerk/models/components/samlconnections.rb +1 -1
- data/lib/clerk/models/components/schemas_commerceplan.rb +1 -1
- data/lib/clerk/models/components/schemas_commercesubscriptionitem.rb +4 -4
- data/lib/clerk/models/components/{payer.rb → schemas_commercesubscriptionitem_payer.rb} +2 -2
- data/lib/clerk/models/components/{payer.rbi → schemas_commercesubscriptionitem_payer.rbi} +2 -2
- data/lib/clerk/models/components/schemas_commercesubscriptionitem_plan.rb +1 -1
- data/lib/clerk/models/components/schemas_featureresponse.rb +1 -1
- data/lib/clerk/models/components/schemas_samlconnection_samlconnection_1.rb +4 -4
- data/lib/clerk/models/components/schemas_samlconnection_samlconnection_2.rb +4 -4
- data/lib/clerk/models/components/seats.rb +32 -0
- data/lib/clerk/models/components/seats.rbi +13 -0
- data/lib/clerk/models/components/session.rb +7 -7
- data/lib/clerk/models/components/session_object.rb +1 -1
- data/lib/clerk/models/components/signintoken.rb +4 -4
- data/lib/clerk/models/components/signup.rb +5 -5
- data/lib/clerk/models/components/signup_external_account.rb +1 -1
- data/lib/clerk/models/components/signupverification.rb +2 -2
- data/lib/clerk/models/components/template.rb +4 -4
- data/lib/clerk/models/components/template_object.rb +1 -1
- data/lib/clerk/models/components/testingtoken.rb +2 -2
- data/lib/clerk/models/components/token.rb +3 -3
- data/lib/clerk/models/components/token_object.rb +1 -1
- data/lib/clerk/models/components/totalcount.rb +2 -2
- data/lib/clerk/models/components/totalcount_object.rb +1 -1
- data/lib/clerk/models/components/user.rb +18 -18
- data/lib/clerk/models/components/user_object.rb +1 -1
- data/lib/clerk/models/components/verification_passkey_passkey.rb +4 -4
- data/lib/clerk/models/components/waitlistentry.rb +5 -5
- data/lib/clerk/models/components/waitlistentry_invitation.rb +5 -5
- data/lib/clerk/models/components/web3signature.rb +3 -3
- data/lib/clerk/models/components/web3wallet.rb +4 -4
- data/lib/clerk/models/components/web3wallet_admin.rb +3 -3
- data/lib/clerk/models/components/web3wallet_object.rb +1 -1
- data/lib/clerk/models/components.rb +27 -2
- data/lib/clerk/models/operations/actor.rb +1 -1
- data/lib/clerk/models/operations/adjustorganizationbillingcreditbalance_request.rb +36 -0
- data/lib/clerk/models/operations/adjustorganizationbillingcreditbalance_request.rbi +15 -0
- data/lib/clerk/models/operations/adjustorganizationbillingcreditbalance_response.rb +44 -0
- data/lib/clerk/models/operations/adjustorganizationbillingcreditbalance_response.rbi +19 -0
- data/lib/clerk/models/operations/adjustuserbillingcreditbalance_request.rb +36 -0
- data/lib/clerk/models/operations/adjustuserbillingcreditbalance_request.rbi +15 -0
- data/lib/clerk/models/operations/adjustuserbillingcreditbalance_response.rb +44 -0
- data/lib/clerk/models/operations/adjustuserbillingcreditbalance_response.rbi +19 -0
- data/lib/clerk/models/operations/clerkidpoauthaccesstoken.rb +1 -1
- data/lib/clerk/models/operations/createagenttask_request.rb +60 -0
- data/lib/clerk/models/operations/createagenttask_request.rbi +23 -0
- data/lib/clerk/models/operations/createagenttask_response.rb +44 -0
- data/lib/clerk/models/operations/createagenttask_response.rbi +19 -0
- data/lib/clerk/models/operations/createapikey_responsebody.rb +1 -1
- data/lib/clerk/models/operations/createbulkinvitations_requestbody.rb +1 -1
- data/lib/clerk/models/operations/createinvitation_request.rb +1 -1
- data/lib/clerk/models/operations/createm2mtoken_request.rb +5 -1
- data/lib/clerk/models/operations/createm2mtoken_request.rbi +2 -0
- data/lib/clerk/models/operations/createm2mtoken_responsebody.rb +1 -1
- data/lib/clerk/models/operations/createoauthapplication_request.rb +2 -2
- data/lib/clerk/models/operations/createroleset_request.rb +1 -1
- data/lib/clerk/models/operations/createsamlconnection_requestbody_1.rb +3 -3
- data/lib/clerk/models/operations/createsamlconnection_requestbody_2.rb +3 -3
- data/lib/clerk/models/operations/createsessiontoken_responsebody.rb +1 -1
- data/lib/clerk/models/operations/createsessiontokenfromtemplate_responsebody.rb +1 -1
- data/lib/clerk/models/operations/createuser_request.rb +5 -5
- data/lib/clerk/models/operations/data.rb +1 -1
- data/lib/clerk/models/operations/deleteapikey_responsebody.rb +1 -1
- data/lib/clerk/models/operations/getapikey_responsebody.rb +1 -1
- data/lib/clerk/models/operations/getinstanceoauthapplicationsettings_response.rb +44 -0
- data/lib/clerk/models/operations/getinstanceoauthapplicationsettings_response.rbi +19 -0
- data/lib/clerk/models/operations/getorganizationbillingcreditbalance_request.rb +32 -0
- data/lib/clerk/models/operations/getorganizationbillingcreditbalance_request.rbi +13 -0
- data/lib/clerk/models/operations/getorganizationbillingcreditbalance_response.rb +44 -0
- data/lib/clerk/models/operations/getorganizationbillingcreditbalance_response.rbi +19 -0
- data/lib/clerk/models/operations/getpublicinterstitial_request.rb +2 -2
- data/lib/clerk/models/operations/getuserbillingcreditbalance_request.rb +32 -0
- data/lib/clerk/models/operations/getuserbillingcreditbalance_request.rbi +13 -0
- data/lib/clerk/models/operations/getuserbillingcreditbalance_response.rb +44 -0
- data/lib/clerk/models/operations/getuserbillingcreditbalance_response.rbi +19 -0
- data/lib/clerk/models/operations/getuserlist_request.rb +2 -2
- data/lib/clerk/models/operations/getuserscount_request.rb +2 -2
- data/lib/clerk/models/operations/listallorganizationdomains_request.rb +3 -3
- data/lib/clerk/models/operations/listinstanceorganizationinvitations_status.rb +1 -0
- data/lib/clerk/models/operations/listorganizationinvitations_status.rb +1 -0
- data/lib/clerk/models/operations/listwaitlistentries_request.rb +1 -1
- data/lib/clerk/models/operations/m2m_token.rb +1 -1
- data/lib/clerk/models/operations/on_behalf_of.rb +37 -0
- data/lib/clerk/models/operations/on_behalf_of.rbi +15 -0
- data/lib/clerk/models/operations/permissions.rb +19 -0
- data/lib/clerk/models/operations/permissions.rbi +11 -0
- data/lib/clerk/models/operations/refreshsession_requestbody.rb +1 -1
- data/lib/clerk/models/operations/revokeagenttask_request.rb +32 -0
- data/lib/clerk/models/operations/revokeagenttask_request.rbi +13 -0
- data/lib/clerk/models/operations/revokeagenttask_response.rb +44 -0
- data/lib/clerk/models/operations/revokeagenttask_response.rbi +19 -0
- data/lib/clerk/models/operations/revokeapikey_responsebody.rb +1 -1
- data/lib/clerk/models/operations/revokem2mtoken_responsebody.rb +1 -1
- data/lib/clerk/models/operations/token_format.rb +20 -0
- data/lib/clerk/models/operations/token_format.rbi +11 -0
- data/lib/clerk/models/operations/updateapikey_responsebody.rb +1 -1
- data/lib/clerk/models/operations/updateinstance_request.rb +2 -2
- data/lib/clerk/models/operations/updateinstanceoauthapplicationsettings_request.rb +36 -0
- data/lib/clerk/models/operations/updateinstanceoauthapplicationsettings_request.rbi +15 -0
- data/lib/clerk/models/operations/updateinstanceoauthapplicationsettings_response.rb +44 -0
- data/lib/clerk/models/operations/updateinstanceoauthapplicationsettings_response.rbi +19 -0
- data/lib/clerk/models/operations/updateoauthapplication_requestbody.rb +2 -2
- data/lib/clerk/models/operations/updateroleset_requestbody.rb +1 -1
- data/lib/clerk/models/operations/updatesamlconnection_requestbody.rb +2 -2
- data/lib/clerk/models/operations/updateuser_requestbody.rb +2 -2
- data/lib/clerk/models/operations/updateusermetadata_requestbody.rb +1 -1
- data/lib/clerk/models/operations/usersgetorganizationinvitations_status.rb +1 -0
- data/lib/clerk/models/operations/verifyapikey_responsebody.rb +1 -1
- data/lib/clerk/models/operations/verifym2mtoken_responsebody.rb +1 -1
- data/lib/clerk/models/operations/verifyoauthaccesstoken_request.rb +2 -2
- data/lib/clerk/models/operations/verifytotp_responsebody.rb +1 -1
- data/lib/clerk/models/operations.rb +18 -0
- data/lib/clerk/oauthaccesstokens.rb +8 -3
- data/lib/clerk/oauthapplications.rb +29 -9
- data/lib/clerk/openapiclient.rb +4 -2
- data/lib/clerk/organizationdomains.rb +27 -10
- data/lib/clerk/organizationinvitations.rb +43 -20
- data/lib/clerk/organizationmemberships.rb +27 -10
- data/lib/clerk/organizationpermissions.rb +25 -8
- data/lib/clerk/organizationroles.rb +33 -10
- data/lib/clerk/organizations.rb +379 -16
- data/lib/clerk/phonenumbers.rb +21 -7
- data/lib/clerk/proxy.rb +1 -1
- data/lib/clerk/proxychecks.rb +10 -5
- data/lib/clerk/redirecturls.rb +20 -6
- data/lib/clerk/rolesets.rb +36 -13
- data/lib/clerk/samlconnections.rb +25 -8
- data/lib/clerk/sdkconfiguration.rb +3 -3
- data/lib/clerk/sessions.rb +40 -14
- data/lib/clerk/signintokens.rb +12 -4
- data/lib/clerk/signups.rb +12 -4
- data/lib/clerk/templates.rb +10 -5
- data/lib/clerk/testingtokens.rb +7 -2
- data/lib/clerk/users.rb +475 -49
- data/lib/clerk/utils/request_bodies.rb +8 -3
- data/lib/clerk/utils/security.rb +10 -0
- data/lib/clerk/utils/url.rb +11 -5
- data/lib/clerk/utils/utils.rb +33 -3
- data/lib/clerk/waitlistentries.rb +32 -12
- data/lib/clerk/webhooks.rb +15 -4
- data/lib/clerk_sdk_ruby.rb +1 -0
- data/lib/crystalline/metadata_fields.rb +66 -9
- data/lib/crystalline/module.rb +3 -3
- data/lib/crystalline/types.rb +11 -3
- metadata +107 -6
|
@@ -26,8 +26,6 @@ module Clerk
|
|
|
26
26
|
|
|
27
27
|
return serialize_content_type(SERIALIZATION_METHOD_TO_CONTENT_TYPE[serialization_method], request) if !request.respond_to?(:fields) || !request.respond_to?(request_field_name)
|
|
28
28
|
|
|
29
|
-
request_val = request.send(request_field_name)
|
|
30
|
-
|
|
31
29
|
request_metadata = nil
|
|
32
30
|
request.fields.each do |f|
|
|
33
31
|
if f.name == request_field_name
|
|
@@ -35,7 +33,14 @@ module Clerk
|
|
|
35
33
|
break
|
|
36
34
|
end
|
|
37
35
|
end
|
|
38
|
-
|
|
36
|
+
if request_metadata.nil?
|
|
37
|
+
# Field name collision: model has a field matching request_field_name but without :request metadata.
|
|
38
|
+
# Serialize the entire object as the request body.
|
|
39
|
+
return serialize_content_type(SERIALIZATION_METHOD_TO_CONTENT_TYPE[serialization_method], request)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
request_val = request.send(request_field_name)
|
|
43
|
+
return ['', nil, nil] if request_val.nil?
|
|
39
44
|
|
|
40
45
|
serialize_content_type(
|
|
41
46
|
request_metadata.fetch(:media_type, 'application/octet-stream'), request_val
|
data/lib/clerk/utils/security.rb
CHANGED
|
@@ -37,6 +37,16 @@ module Clerk
|
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
def self._parse_security_option(req, option)
|
|
40
|
+
# Check if this option uses basic auth (needs the whole object, not individual fields)
|
|
41
|
+
first_field = option.fields.first
|
|
42
|
+
if first_field
|
|
43
|
+
first_meta = first_field.metadata[:security]
|
|
44
|
+
if first_meta && first_meta[:type] == 'http' && first_meta[:sub_type] == 'basic'
|
|
45
|
+
_parse_security_scheme(req, first_meta, option)
|
|
46
|
+
return
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
40
50
|
option.fields.each do |opt_field|
|
|
41
51
|
metadata = opt_field.metadata[:security]
|
|
42
52
|
next if metadata.nil? || !metadata.include?(:scheme)
|
data/lib/clerk/utils/url.rb
CHANGED
|
@@ -24,7 +24,7 @@ module Clerk
|
|
|
24
24
|
if serialization != ''
|
|
25
25
|
serialized_params = _get_serialized_params(param_metadata, f_name, param)
|
|
26
26
|
serialized_params.each do |k, v|
|
|
27
|
-
path = path.
|
|
27
|
+
path = path.gsub("{#{k}}", v.join(', '))
|
|
28
28
|
end
|
|
29
29
|
else
|
|
30
30
|
if param.is_a? Array
|
|
@@ -32,7 +32,7 @@ module Clerk
|
|
|
32
32
|
param.each do |pp_val|
|
|
33
33
|
pp_vals.append(pp_val.to_s)
|
|
34
34
|
end
|
|
35
|
-
path = path.
|
|
35
|
+
path = path.gsub("{#{param_metadata.fetch(:field_name, f.name)}}", pp_vals.join(','))
|
|
36
36
|
elsif param.is_a? Hash
|
|
37
37
|
pp_vals = []
|
|
38
38
|
param.each do |pp_key, pp_val|
|
|
@@ -44,7 +44,7 @@ module Clerk
|
|
|
44
44
|
pp_vals.append("#{pp_key},#{value}")
|
|
45
45
|
end
|
|
46
46
|
end
|
|
47
|
-
path = path.
|
|
47
|
+
path = path.gsub("{#{param_metadata.fetch(:field_name, f.name)}}", pp_vals.join(','))
|
|
48
48
|
elsif param.class.include?(::Crystalline::MetadataFields)
|
|
49
49
|
pp_vals = []
|
|
50
50
|
attrs = param.fields.filter { |field| field.name && param.respond_to?(field.name.to_sym) }.map(&:name)
|
|
@@ -72,9 +72,9 @@ module Clerk
|
|
|
72
72
|
pp_vals.append("#{parm_name},#{param_field_val}")
|
|
73
73
|
end
|
|
74
74
|
end
|
|
75
|
-
path = path.
|
|
75
|
+
path = path.gsub("{#{param_metadata.fetch(:field_name, f.name)}}", pp_vals.join(','))
|
|
76
76
|
else
|
|
77
|
-
path = path.
|
|
77
|
+
path = path.gsub("{#{param_metadata.fetch(:field_name, f.name)}}", _encode_path_param(val_to_string(param)))
|
|
78
78
|
end
|
|
79
79
|
end
|
|
80
80
|
end
|
|
@@ -82,6 +82,12 @@ module Clerk
|
|
|
82
82
|
server_url.delete_suffix('/') + path
|
|
83
83
|
end
|
|
84
84
|
|
|
85
|
+
# Percent-encode characters that are invalid in URI path segments
|
|
86
|
+
|
|
87
|
+
def self._encode_path_param(value)
|
|
88
|
+
value.gsub(/[<>{}\[\]|\\^`\s?#%]/) { |c| format('%%%02X', c.ord) }
|
|
89
|
+
end
|
|
90
|
+
|
|
85
91
|
|
|
86
92
|
def self.template_url(url_with_params, params)
|
|
87
93
|
params.each do |key, value|
|
data/lib/clerk/utils/utils.rb
CHANGED
|
@@ -19,13 +19,43 @@ module Clerk
|
|
|
19
19
|
if val.class.respond_to?(:enums)
|
|
20
20
|
val.serialize.to_s
|
|
21
21
|
elsif val.is_a? DateTime
|
|
22
|
-
val.strftime('%Y-%m-%dT%H:%M:%S.%NZ')
|
|
22
|
+
val.strftime('%Y-%m-%dT%H:%M:%S.%NZ').sub(/(\.\d*[1-9])0+Z\z/, '\1Z').sub(/\.0+Z\z/, 'Z')
|
|
23
23
|
else
|
|
24
24
|
val.to_s
|
|
25
25
|
|
|
26
26
|
end
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
+
MIME_TYPES = {
|
|
30
|
+
'.json' => 'application/json',
|
|
31
|
+
'.xml' => 'application/xml',
|
|
32
|
+
'.pdf' => 'application/pdf',
|
|
33
|
+
'.zip' => 'application/zip',
|
|
34
|
+
'.gz' => 'application/gzip',
|
|
35
|
+
'.csv' => 'text/csv',
|
|
36
|
+
'.txt' => 'text/plain',
|
|
37
|
+
'.html' => 'text/html',
|
|
38
|
+
'.htm' => 'text/html',
|
|
39
|
+
'.css' => 'text/css',
|
|
40
|
+
'.js' => 'application/javascript',
|
|
41
|
+
'.png' => 'image/png',
|
|
42
|
+
'.jpg' => 'image/jpeg',
|
|
43
|
+
'.jpeg' => 'image/jpeg',
|
|
44
|
+
'.gif' => 'image/gif',
|
|
45
|
+
'.svg' => 'image/svg+xml',
|
|
46
|
+
'.webp' => 'image/webp',
|
|
47
|
+
'.mp3' => 'audio/mpeg',
|
|
48
|
+
'.mp4' => 'video/mp4',
|
|
49
|
+
'.yaml' => 'application/yaml',
|
|
50
|
+
'.yml' => 'application/yaml',
|
|
51
|
+
}.freeze
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def self.mime_type_for_filename(filename)
|
|
55
|
+
ext = File.extname(filename).downcase
|
|
56
|
+
MIME_TYPES.fetch(ext, 'application/octet-stream')
|
|
57
|
+
end
|
|
58
|
+
|
|
29
59
|
|
|
30
60
|
def self._get_serialized_params(metadata, field_name, obj)
|
|
31
61
|
params = {}
|
|
@@ -143,7 +173,7 @@ module Clerk
|
|
|
143
173
|
# Handle file uploads
|
|
144
174
|
file_part = Faraday::Multipart::FilePart.new(
|
|
145
175
|
StringIO.new(field[1]),
|
|
146
|
-
|
|
176
|
+
mime_type_for_filename(field[0]),
|
|
147
177
|
field[0]
|
|
148
178
|
)
|
|
149
179
|
|
|
@@ -158,7 +188,7 @@ module Clerk
|
|
|
158
188
|
end
|
|
159
189
|
end
|
|
160
190
|
elsif field.length == 3
|
|
161
|
-
param_part = Faraday::Multipart::ParamPart.new(field[1]
|
|
191
|
+
param_part = Faraday::Multipart::ParamPart.new(field[1], field[2])
|
|
162
192
|
|
|
163
193
|
# Handle multiple values for the same field name (arrays)
|
|
164
194
|
if payload.key?(field_name)
|
|
@@ -38,8 +38,10 @@ module Clerk
|
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
|
|
41
|
+
|
|
42
|
+
|
|
41
43
|
|
|
42
|
-
def list(request:, retries: nil, timeout_ms: nil)
|
|
44
|
+
def list(request:, retries: nil, timeout_ms: nil, http_headers: nil)
|
|
43
45
|
# list - List all waitlist entries
|
|
44
46
|
# Retrieve a list of waitlist entries for the instance.
|
|
45
47
|
# Entries are ordered by creation date in descending order by default.
|
|
@@ -93,6 +95,9 @@ module Clerk
|
|
|
93
95
|
req.options.timeout = timeout unless timeout.nil?
|
|
94
96
|
req.params = query_params
|
|
95
97
|
Utils.configure_request_security(req, security)
|
|
98
|
+
http_headers&.each do |key, value|
|
|
99
|
+
req.headers[key.to_s] = value
|
|
100
|
+
end
|
|
96
101
|
|
|
97
102
|
@sdk_configuration.hooks.before_request(
|
|
98
103
|
hook_ctx: SDKHooks::BeforeRequestHookContext.new(
|
|
@@ -161,7 +166,7 @@ module Clerk
|
|
|
161
166
|
|
|
162
167
|
|
|
163
168
|
|
|
164
|
-
def create(request: nil, retries: nil, timeout_ms: nil)
|
|
169
|
+
def create(request: nil, retries: nil, timeout_ms: nil, http_headers: nil)
|
|
165
170
|
# create - Create a waitlist entry
|
|
166
171
|
# Creates a new waitlist entry for the given email address.
|
|
167
172
|
# If the email address is already on the waitlist, no new entry will be created and the existing waitlist entry will be returned.
|
|
@@ -173,7 +178,7 @@ module Clerk
|
|
|
173
178
|
req_content_type, data, form = Utils.serialize_request_body(request, false, true, :request, :json)
|
|
174
179
|
headers['content-type'] = req_content_type
|
|
175
180
|
|
|
176
|
-
if form
|
|
181
|
+
if form && !form.empty?
|
|
177
182
|
body = Utils.encode_form(form)
|
|
178
183
|
elsif Utils.match_content_type(req_content_type, 'application/x-www-form-urlencoded')
|
|
179
184
|
body = URI.encode_www_form(data)
|
|
@@ -223,6 +228,9 @@ module Clerk
|
|
|
223
228
|
req.headers.merge!(headers)
|
|
224
229
|
req.options.timeout = timeout unless timeout.nil?
|
|
225
230
|
Utils.configure_request_security(req, security)
|
|
231
|
+
http_headers&.each do |key, value|
|
|
232
|
+
req.headers[key.to_s] = value
|
|
233
|
+
end
|
|
226
234
|
|
|
227
235
|
@sdk_configuration.hooks.before_request(
|
|
228
236
|
hook_ctx: SDKHooks::BeforeRequestHookContext.new(
|
|
@@ -306,15 +314,15 @@ module Clerk
|
|
|
306
314
|
|
|
307
315
|
|
|
308
316
|
|
|
309
|
-
def bulk_create(request: nil, retries: nil, timeout_ms: nil)
|
|
317
|
+
def bulk_create(request: nil, retries: nil, timeout_ms: nil, http_headers: nil)
|
|
310
318
|
# bulk_create - Create multiple waitlist entries
|
|
311
319
|
# Creates multiple waitlist entries for the provided email addresses.
|
|
312
320
|
# You can choose whether to send confirmation emails by setting the `notify` parameter to `true` or `false` for each entry.
|
|
313
321
|
# If the `notify` parameter is omitted, it defaults to `true`.
|
|
314
|
-
#
|
|
322
|
+
#
|
|
315
323
|
# If an email address is already on the waitlist, no new entry will be created and the existing waitlist entry will be returned.
|
|
316
324
|
# Duplicate email addresses within the same request are not allowed.
|
|
317
|
-
#
|
|
325
|
+
#
|
|
318
326
|
# This endpoint is limited to a maximum of 50 entries per API call. If you need to add more entries, please make multiple requests.
|
|
319
327
|
url, params = @sdk_configuration.get_server_details
|
|
320
328
|
base_url = Utils.template_url(url, params)
|
|
@@ -324,7 +332,7 @@ module Clerk
|
|
|
324
332
|
req_content_type, data, form = Utils.serialize_request_body(request, false, true, :request, :json)
|
|
325
333
|
headers['content-type'] = req_content_type
|
|
326
334
|
|
|
327
|
-
if form
|
|
335
|
+
if form && !form.empty?
|
|
328
336
|
body = Utils.encode_form(form)
|
|
329
337
|
elsif Utils.match_content_type(req_content_type, 'application/x-www-form-urlencoded')
|
|
330
338
|
body = URI.encode_www_form(data)
|
|
@@ -374,6 +382,9 @@ module Clerk
|
|
|
374
382
|
req.headers.merge!(headers)
|
|
375
383
|
req.options.timeout = timeout unless timeout.nil?
|
|
376
384
|
Utils.configure_request_security(req, security)
|
|
385
|
+
http_headers&.each do |key, value|
|
|
386
|
+
req.headers[key.to_s] = value
|
|
387
|
+
end
|
|
377
388
|
|
|
378
389
|
@sdk_configuration.hooks.before_request(
|
|
379
390
|
hook_ctx: SDKHooks::BeforeRequestHookContext.new(
|
|
@@ -457,7 +468,7 @@ module Clerk
|
|
|
457
468
|
|
|
458
469
|
|
|
459
470
|
|
|
460
|
-
def delete(waitlist_entry_id:, retries: nil, timeout_ms: nil)
|
|
471
|
+
def delete(waitlist_entry_id:, retries: nil, timeout_ms: nil, http_headers: nil)
|
|
461
472
|
# delete - Delete a pending waitlist entry
|
|
462
473
|
# Delete a pending waitlist entry.
|
|
463
474
|
request = Models::Operations::DeleteWaitlistEntryRequest.new(
|
|
@@ -515,6 +526,9 @@ module Clerk
|
|
|
515
526
|
req.headers.merge!(headers)
|
|
516
527
|
req.options.timeout = timeout unless timeout.nil?
|
|
517
528
|
Utils.configure_request_security(req, security)
|
|
529
|
+
http_headers&.each do |key, value|
|
|
530
|
+
req.headers[key.to_s] = value
|
|
531
|
+
end
|
|
518
532
|
|
|
519
533
|
@sdk_configuration.hooks.before_request(
|
|
520
534
|
hook_ctx: SDKHooks::BeforeRequestHookContext.new(
|
|
@@ -598,7 +612,7 @@ module Clerk
|
|
|
598
612
|
|
|
599
613
|
|
|
600
614
|
|
|
601
|
-
def invite(waitlist_entry_id:, body: nil, retries: nil, timeout_ms: nil)
|
|
615
|
+
def invite(waitlist_entry_id:, body: nil, retries: nil, timeout_ms: nil, http_headers: nil)
|
|
602
616
|
# invite - Invite a waitlist entry
|
|
603
617
|
# Send an invite to the email address in a waitlist entry.
|
|
604
618
|
request = Models::Operations::InviteWaitlistEntryRequest.new(
|
|
@@ -618,7 +632,7 @@ module Clerk
|
|
|
618
632
|
req_content_type, data, form = Utils.serialize_request_body(request, false, false, :body, :json)
|
|
619
633
|
headers['content-type'] = req_content_type
|
|
620
634
|
|
|
621
|
-
if form
|
|
635
|
+
if form && !form.empty?
|
|
622
636
|
body = Utils.encode_form(form)
|
|
623
637
|
elsif Utils.match_content_type(req_content_type, 'application/x-www-form-urlencoded')
|
|
624
638
|
body = URI.encode_www_form(data)
|
|
@@ -668,6 +682,9 @@ module Clerk
|
|
|
668
682
|
req.headers.merge!(headers)
|
|
669
683
|
req.options.timeout = timeout unless timeout.nil?
|
|
670
684
|
Utils.configure_request_security(req, security)
|
|
685
|
+
http_headers&.each do |key, value|
|
|
686
|
+
req.headers[key.to_s] = value
|
|
687
|
+
end
|
|
671
688
|
|
|
672
689
|
@sdk_configuration.hooks.before_request(
|
|
673
690
|
hook_ctx: SDKHooks::BeforeRequestHookContext.new(
|
|
@@ -751,7 +768,7 @@ module Clerk
|
|
|
751
768
|
|
|
752
769
|
|
|
753
770
|
|
|
754
|
-
def reject(waitlist_entry_id:, retries: nil, timeout_ms: nil)
|
|
771
|
+
def reject(waitlist_entry_id:, retries: nil, timeout_ms: nil, http_headers: nil)
|
|
755
772
|
# reject - Reject a waitlist entry
|
|
756
773
|
# Reject a waitlist entry.
|
|
757
774
|
request = Models::Operations::RejectWaitlistEntryRequest.new(
|
|
@@ -809,6 +826,9 @@ module Clerk
|
|
|
809
826
|
req.headers.merge!(headers)
|
|
810
827
|
req.options.timeout = timeout unless timeout.nil?
|
|
811
828
|
Utils.configure_request_security(req, security)
|
|
829
|
+
http_headers&.each do |key, value|
|
|
830
|
+
req.headers[key.to_s] = value
|
|
831
|
+
end
|
|
812
832
|
|
|
813
833
|
@sdk_configuration.hooks.before_request(
|
|
814
834
|
hook_ctx: SDKHooks::BeforeRequestHookContext.new(
|
|
@@ -889,5 +909,5 @@ module Clerk
|
|
|
889
909
|
|
|
890
910
|
end
|
|
891
911
|
end
|
|
892
|
-
|
|
912
|
+
end
|
|
893
913
|
end
|
data/lib/clerk/webhooks.rb
CHANGED
|
@@ -38,8 +38,10 @@ module Clerk
|
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
|
|
41
|
+
|
|
42
|
+
|
|
41
43
|
|
|
42
|
-
def create_svix_app(retries: nil, timeout_ms: nil)
|
|
44
|
+
def create_svix_app(retries: nil, timeout_ms: nil, http_headers: nil)
|
|
43
45
|
# create_svix_app - Create a Svix app
|
|
44
46
|
# Create a Svix app and associate it with the current instance
|
|
45
47
|
url, params = @sdk_configuration.get_server_details
|
|
@@ -89,6 +91,9 @@ module Clerk
|
|
|
89
91
|
req.headers.merge!(headers)
|
|
90
92
|
req.options.timeout = timeout unless timeout.nil?
|
|
91
93
|
Utils.configure_request_security(req, security)
|
|
94
|
+
http_headers&.each do |key, value|
|
|
95
|
+
req.headers[key.to_s] = value
|
|
96
|
+
end
|
|
92
97
|
|
|
93
98
|
@sdk_configuration.hooks.before_request(
|
|
94
99
|
hook_ctx: SDKHooks::BeforeRequestHookContext.new(
|
|
@@ -172,7 +177,7 @@ module Clerk
|
|
|
172
177
|
|
|
173
178
|
|
|
174
179
|
|
|
175
|
-
def delete_svix_app(retries: nil, timeout_ms: nil)
|
|
180
|
+
def delete_svix_app(retries: nil, timeout_ms: nil, http_headers: nil)
|
|
176
181
|
# delete_svix_app - Delete a Svix app
|
|
177
182
|
# Delete a Svix app and disassociate it from the current instance
|
|
178
183
|
url, params = @sdk_configuration.get_server_details
|
|
@@ -222,6 +227,9 @@ module Clerk
|
|
|
222
227
|
req.headers.merge!(headers)
|
|
223
228
|
req.options.timeout = timeout unless timeout.nil?
|
|
224
229
|
Utils.configure_request_security(req, security)
|
|
230
|
+
http_headers&.each do |key, value|
|
|
231
|
+
req.headers[key.to_s] = value
|
|
232
|
+
end
|
|
225
233
|
|
|
226
234
|
@sdk_configuration.hooks.before_request(
|
|
227
235
|
hook_ctx: SDKHooks::BeforeRequestHookContext.new(
|
|
@@ -296,7 +304,7 @@ module Clerk
|
|
|
296
304
|
|
|
297
305
|
|
|
298
306
|
|
|
299
|
-
def generate_svix_auth_url(retries: nil, timeout_ms: nil)
|
|
307
|
+
def generate_svix_auth_url(retries: nil, timeout_ms: nil, http_headers: nil)
|
|
300
308
|
# generate_svix_auth_url - Create a Svix Dashboard URL
|
|
301
309
|
# Generate a new URL for accessing the Svix's management dashboard for that particular instance
|
|
302
310
|
url, params = @sdk_configuration.get_server_details
|
|
@@ -346,6 +354,9 @@ module Clerk
|
|
|
346
354
|
req.headers.merge!(headers)
|
|
347
355
|
req.options.timeout = timeout unless timeout.nil?
|
|
348
356
|
Utils.configure_request_security(req, security)
|
|
357
|
+
http_headers&.each do |key, value|
|
|
358
|
+
req.headers[key.to_s] = value
|
|
359
|
+
end
|
|
349
360
|
|
|
350
361
|
@sdk_configuration.hooks.before_request(
|
|
351
362
|
hook_ctx: SDKHooks::BeforeRequestHookContext.new(
|
|
@@ -426,5 +437,5 @@ module Clerk
|
|
|
426
437
|
|
|
427
438
|
end
|
|
428
439
|
end
|
|
429
|
-
|
|
440
|
+
end
|
|
430
441
|
end
|
data/lib/clerk_sdk_ruby.rb
CHANGED
|
@@ -37,6 +37,7 @@ module Clerk
|
|
|
37
37
|
autoload :OauthApplications, 'clerk/oauthapplications'
|
|
38
38
|
autoload :SamlConnections, 'clerk/samlconnections'
|
|
39
39
|
autoload :TestingTokens, 'clerk/testingtokens'
|
|
40
|
+
autoload :AgentTasks, 'clerk/agenttasks'
|
|
40
41
|
autoload :WaitlistEntries, 'clerk/waitlistentries'
|
|
41
42
|
autoload :Billing, 'clerk/billing'
|
|
42
43
|
autoload :OrganizationPermissions, 'clerk/organizationpermissions'
|
|
@@ -37,19 +37,30 @@ module Crystalline
|
|
|
37
37
|
def unmarshal_single(field_type, value, format_metadata = nil)
|
|
38
38
|
decoder = format_metadata.fetch(:decoder, nil)
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
# Delegate complex Crystalline types to unmarshal_json
|
|
41
|
+
if field_type.is_a?(Crystalline::DiscriminatedUnion) ||
|
|
42
|
+
Crystalline::Utils.arr?(field_type) ||
|
|
43
|
+
Crystalline::Utils.hash?(field_type) ||
|
|
44
|
+
Crystalline::Utils.union?(field_type)
|
|
45
|
+
return Crystalline.unmarshal_json(value, field_type)
|
|
46
|
+
elsif field_type.instance_of?(Class) && field_type.include?(::Crystalline::MetadataFields)
|
|
41
47
|
return field_type.from_dict(value)
|
|
42
48
|
elsif field_type.to_s == 'Date'
|
|
43
49
|
return Date.parse(value)
|
|
44
50
|
elsif field_type.to_s == 'DateTime'
|
|
45
51
|
return DateTime.parse(value)
|
|
46
52
|
elsif field_type.to_s == 'Object'
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
53
|
+
if value.is_a?(::String)
|
|
54
|
+
trimmed = value.lstrip
|
|
55
|
+
if trimmed.start_with?('{') || trimmed.start_with?('[')
|
|
56
|
+
# rubocop:disable Lint/SuppressedException
|
|
57
|
+
begin
|
|
58
|
+
value = JSON.parse(value)
|
|
59
|
+
rescue TypeError, JSON::ParserError
|
|
60
|
+
end
|
|
61
|
+
# rubocop:enable Lint/SuppressedException
|
|
62
|
+
end
|
|
51
63
|
end
|
|
52
|
-
# rubocop:enable Lint/SuppressedException
|
|
53
64
|
return value
|
|
54
65
|
elsif field_type.to_s == 'Float'
|
|
55
66
|
return value.to_f
|
|
@@ -65,12 +76,27 @@ module Crystalline
|
|
|
65
76
|
def from_dict(d)
|
|
66
77
|
to_build = {}
|
|
67
78
|
|
|
79
|
+
# Collect lookup keys for regular fields so we can identify additional properties later
|
|
80
|
+
known_keys = {}
|
|
81
|
+
additional_props_fields = []
|
|
68
82
|
fields.each do |field|
|
|
83
|
+
format_metadata = field.metadata.fetch(:format_json, {})
|
|
84
|
+
if format_metadata.fetch(:additional_properties, false)
|
|
85
|
+
additional_props_fields << field
|
|
86
|
+
else
|
|
87
|
+
lookup = format_metadata.fetch(:letter_case, nil).call
|
|
88
|
+
known_keys[lookup] = true
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# Process regular fields
|
|
93
|
+
(fields - additional_props_fields).each do |field|
|
|
69
94
|
key = field.name
|
|
70
95
|
format_metadata = field.metadata.fetch(:format_json, {})
|
|
96
|
+
field_type = field.type
|
|
97
|
+
|
|
71
98
|
lookup = format_metadata.fetch(:letter_case, nil).call
|
|
72
99
|
value = d[lookup]
|
|
73
|
-
field_type = field.type
|
|
74
100
|
if ::Crystalline::Utils.nilable? field_type
|
|
75
101
|
if value == 'null'
|
|
76
102
|
to_build[key] = nil
|
|
@@ -78,7 +104,7 @@ module Crystalline
|
|
|
78
104
|
end
|
|
79
105
|
field_type = ::Crystalline::Utils.nilable_of(field_type)
|
|
80
106
|
end
|
|
81
|
-
|
|
107
|
+
|
|
82
108
|
# If field is not nilable, and the value is not in the dict, raise a KeyError
|
|
83
109
|
raise KeyError, "key #{lookup} not found in hash" if value.nil? && !::Crystalline::Utils.nilable?(field.type)
|
|
84
110
|
# If field is nilable, and the value is not in the dict, just move to the next field
|
|
@@ -137,6 +163,32 @@ module Crystalline
|
|
|
137
163
|
to_build[key] = unmarshal_single(field_type, value, format_metadata)
|
|
138
164
|
end
|
|
139
165
|
end
|
|
166
|
+
|
|
167
|
+
# Process additional properties fields: collect remaining keys from the dict
|
|
168
|
+
additional_props_fields.each do |field|
|
|
169
|
+
key = field.name
|
|
170
|
+
format_metadata = field.metadata.fetch(:format_json, {})
|
|
171
|
+
field_type = field.type
|
|
172
|
+
|
|
173
|
+
remaining = d.reject { |k, _| known_keys.key?(k) }
|
|
174
|
+
if remaining.empty?
|
|
175
|
+
next if ::Crystalline::Utils.nilable?(field.type)
|
|
176
|
+
|
|
177
|
+
raise KeyError, 'no additional properties found in hash'
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
inner_field_type = field_type
|
|
181
|
+
inner_field_type = ::Crystalline::Utils.nilable_of(inner_field_type) if ::Crystalline::Utils.nilable?(inner_field_type)
|
|
182
|
+
if Crystalline::Utils.hash?(inner_field_type)
|
|
183
|
+
val_type = Crystalline::Utils.hash_of(inner_field_type)
|
|
184
|
+
# rubocop:disable Style/HashTransformValues
|
|
185
|
+
to_build[key] = remaining.map { |k, v| [k, unmarshal_single(val_type, v, format_metadata)] }.to_h
|
|
186
|
+
# rubocop:enable Style/HashTransformValues
|
|
187
|
+
else
|
|
188
|
+
to_build[key] = remaining
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
|
|
140
192
|
new(**to_build)
|
|
141
193
|
end
|
|
142
194
|
end
|
|
@@ -178,6 +230,8 @@ module Crystalline
|
|
|
178
230
|
fields.sort_by(&:name).each do |field|
|
|
179
231
|
format_json_meta = field.metadata[:format_json]
|
|
180
232
|
required = !format_json_meta.nil? && format_json_meta.include?(:required)
|
|
233
|
+
is_additional_props = !format_json_meta.nil? && format_json_meta.fetch(:additional_properties, false)
|
|
234
|
+
|
|
181
235
|
if !format_json_meta.nil? && format_json_meta.include?(:letter_case)
|
|
182
236
|
key = format_json_meta[:letter_case].call(field.name)
|
|
183
237
|
else
|
|
@@ -188,7 +242,10 @@ module Crystalline
|
|
|
188
242
|
next if f.nil? && !required
|
|
189
243
|
result[key] = nil if f.nil? && required
|
|
190
244
|
|
|
191
|
-
|
|
245
|
+
# Flatten additional properties into the parent object
|
|
246
|
+
if is_additional_props && f.is_a?(::Hash)
|
|
247
|
+
f.each { |k, v| result[k] = marshal_single(v) }
|
|
248
|
+
elsif f.is_a? ::Array
|
|
192
249
|
result[key] = f.map { |o| marshal_single(o) }
|
|
193
250
|
elsif f.is_a? ::Hash
|
|
194
251
|
result[key] = f.transform_values { |v| marshal_single(v) }
|
data/lib/crystalline/module.rb
CHANGED
|
@@ -11,9 +11,9 @@ module Crystalline
|
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
def self.to_dict(complex)
|
|
14
|
-
if complex.is_a? Array
|
|
14
|
+
if complex.is_a? ::Array
|
|
15
15
|
complex.map { |v| Crystalline.to_dict(v) }
|
|
16
|
-
elsif complex.is_a? Hash
|
|
16
|
+
elsif complex.is_a? ::Hash
|
|
17
17
|
complex.transform_values { |v| Crystalline.to_dict(v) }
|
|
18
18
|
elsif complex.respond_to?(:class) && complex.class.include?(::Crystalline::MetadataFields)
|
|
19
19
|
complex.to_dict
|
|
@@ -66,7 +66,7 @@ module Crystalline
|
|
|
66
66
|
if val.class.respond_to? :enums
|
|
67
67
|
val.serialize
|
|
68
68
|
elsif val.is_a? DateTime
|
|
69
|
-
val.strftime('%Y-%m-%dT%H:%M:%S.%NZ')
|
|
69
|
+
val.strftime('%Y-%m-%dT%H:%M:%S.%NZ').sub(/(\.\d*[1-9])0+Z\z/, '\1Z').sub(/\.0+Z\z/, 'Z')
|
|
70
70
|
elsif val.nil?
|
|
71
71
|
nil
|
|
72
72
|
elsif primitives
|
data/lib/crystalline/types.rb
CHANGED
|
@@ -14,7 +14,7 @@ module Crystalline
|
|
|
14
14
|
|
|
15
15
|
class Hash
|
|
16
16
|
attr_accessor :key_type, :value_type
|
|
17
|
-
|
|
17
|
+
|
|
18
18
|
def initialize(key_type, value_type)
|
|
19
19
|
@key_type = key_type
|
|
20
20
|
@value_type = value_type
|
|
@@ -23,7 +23,7 @@ module Crystalline
|
|
|
23
23
|
|
|
24
24
|
class Union
|
|
25
25
|
attr_accessor :types
|
|
26
|
-
|
|
26
|
+
|
|
27
27
|
def initialize(*types)
|
|
28
28
|
@types = types
|
|
29
29
|
end
|
|
@@ -31,7 +31,7 @@ module Crystalline
|
|
|
31
31
|
|
|
32
32
|
class Nilable
|
|
33
33
|
attr_accessor :inner_type
|
|
34
|
-
|
|
34
|
+
|
|
35
35
|
def initialize(inner_type)
|
|
36
36
|
@inner_type = inner_type
|
|
37
37
|
end
|
|
@@ -142,6 +142,14 @@ module Crystalline
|
|
|
142
142
|
@val
|
|
143
143
|
end
|
|
144
144
|
|
|
145
|
+
def to_s
|
|
146
|
+
serialize.to_s
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def inspect
|
|
150
|
+
"#<#{self.class} #{serialize.inspect}>"
|
|
151
|
+
end
|
|
152
|
+
|
|
145
153
|
def known?
|
|
146
154
|
self.class.instance_variable_get(:@mapping)&.value?(self) || false
|
|
147
155
|
end
|