From bff5f4004a92bc5900ee05a4a5bec7f606a43bdc Mon Sep 17 00:00:00 2001 From: Alexis Ramis Date: Tue, 21 Apr 2026 12:02:29 -0400 Subject: [PATCH] fix: change MessageEmailContent `from` field from String to union type MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Knock API returns the `from` field in email message content as either a plain string or an object with `email` and `name` keys: { email: "sender@example.com", name: "Sender Name" } The current schema declares `from` as `required :from, String`, which causes a `ConversionError` when the union type resolver tries to match the email content variant — the Hash value doesn't match the String type, so no variant matches and the entire `content.data` call fails. This changes `from` to a union type (`From`) that accepts both a plain String and an `EmailObject` with `email` and `name` attributes, matching the actual API response shape. --- .../models/message_get_content_response.rb | 47 +++++++++++++++++-- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/lib/knockapi/models/message_get_content_response.rb b/lib/knockapi/models/message_get_content_response.rb index 28076a89..071506c6 100644 --- a/lib/knockapi/models/message_get_content_response.rb +++ b/lib/knockapi/models/message_get_content_response.rb @@ -68,10 +68,11 @@ class MessageEmailContent < Knockapi::Internal::Type::BaseModel required :_typename, String, api_name: :__typename # @!attribute from - # The sender's email address. + # The sender's email address. Can be a string email address or an object + # with email and name fields. # - # @return [String] - required :from, String + # @return [String, Knockapi::Models::MessageGetContentResponse::Data::MessageEmailContent::From] + required :from, union: -> { Knockapi::Models::MessageGetContentResponse::Data::MessageEmailContent::From } # @!attribute html_body # The HTML body of the email message. @@ -120,7 +121,7 @@ class MessageEmailContent < Knockapi::Internal::Type::BaseModel # # @param _typename [String] The typename of the schema. # - # @param from [String] The sender's email address. + # @param from [String, Knockapi::Models::MessageGetContentResponse::Data::MessageEmailContent::From::EmailObject] The sender's email address. Can be a string or an object with email and name fields. # # @param html_body [String] The HTML body of the email message. # @@ -135,6 +136,44 @@ class MessageEmailContent < Knockapi::Internal::Type::BaseModel # @param cc [String, nil] The CC email addresses. # # @param reply_to [String, nil] The reply-to email address. + + # The sender's email address. Can be a string email address or an object + # with email and name fields. + # + # @see Knockapi::Models::MessageGetContentResponse::Data::MessageEmailContent#from + module From + extend Knockapi::Internal::Type::Union + + # A simple string email address. + variant String + + # An object with email and name fields. + variant -> { Knockapi::Models::MessageGetContentResponse::Data::MessageEmailContent::From::EmailObject } + + class EmailObject < Knockapi::Internal::Type::BaseModel + # @!attribute email + # The sender's email address. + # + # @return [String] + required :email, String + + # @!attribute name + # The sender's display name. + # + # @return [String, nil] + optional :name, String, nil?: true + + # @!method initialize(email:, name: nil) + # The sender's email address as an object. + # + # @param email [String] The sender's email address. + # + # @param name [String, nil] The sender's display name. + end + + # @!method self.variants + # @return [Array(String, Knockapi::Models::MessageGetContentResponse::Data::MessageEmailContent::From::EmailObject)] + end end class MessageSMSContent < Knockapi::Internal::Type::BaseModel