Ir a la documentación
Ruby

Utilidades y constantes

Lo que la gema define además del cliente.

Métodos de módulo

MétodoQué es
OpenEmail.init, OpenEmail.clientConfigura el cliente compartido una vez y luego accede a él desde cualquier sitio. Se construye solo a partir de OPENEMAIL_API_KEY si init nunca se ejecutó.
OpenEmail.emails, OpenEmail.threads y todos los demás espacios de nombresAtajos a los espacios de nombres del cliente compartido.
OpenEmail.reset_clientDescarta el cliente compartido, para que la siguiente llamada construya uno nuevo, que es lo que necesita una prueba entre casos.
OpenEmail.create_client, OpenEmail::Client.new, OpenEmail.newUn cliente aparte. create_client lee el entorno para todo lo que omitas, y Client.new (u OpenEmail.new) solo toma lo que le pasas.
OpenEmail.create_temp_mailUn cliente de buzón desechable que no lleva ninguna clave de API.
OpenEmail.verify_webhook_signatureComprueba la firma de una entrega en tiempo constante, con una ventana de repetición. Devuelve el evento analizado, y lanza OpenEmail::WebhookSignatureError ante cualquier fallo.
OpenEmail.to_base64Base64 para los bytes de un adjunto, a partir de una String binaria, un IO o un Pathname.
OpenEmail.api_key?Si una String tiene la forma oe_live_ u oe_test_. Es una comprobación de forma, no una prueba de que la clave siga funcionando.
OpenEmail.access_token?Si una String tiene la forma de un token de acceso OAuth: de 1 a 512 caracteres, sin empezar por oe_.
OpenEmail.sealed?Si el cuerpo de un mensaje es texto cifrado. Es false para los dos formatos firmados, cuyos cuerpos llegaron en claro.
OpenEmail.resolve_language, OpenEmail.language_by_code, OpenEmail.rtl_language?Las búsquedas que necesita un selector de idioma, sobre la tabla OpenEmail::LANGUAGES incluida.

Constantes

Cada conjunto de valores que exporta el SDK de TypeScript es un Hash congelado en OpenEmail, con los mismos nombres como claves, así que OpenEmail::WEBHOOK_EVENTS[:EMAIL_DELIVERED] es "email.delivered". Usa .values donde necesites la lista, y .value? para comprobar un valor que vino de fuera.

constants.rb
events = OpenEmail::WEBHOOK_EVENTS.values scopes = [OpenEmail::API_SCOPES[:EMAILS_SEND], OpenEmail::API_SCOPES[:THREADS_READ]] puts events.size, scopes.join(","), OpenEmail::PAGE_LIMITS[:MAX_LIMIT]
ConstanteQué contiene
OpenEmail::VERSIONLa versión de la gema.
OpenEmail::API_SCOPESEl vocabulario de ámbitos, para una pantalla de creación de claves.
OpenEmail::WEBHOOK_EVENTS, OpenEmail::WEBHOOK_SIGNATURE_HEADERSLos eventos a los que se puede suscribir un endpoint, y los nombres de las cabeceras que lleva una entrega.
OpenEmail::ERROR_TYPESEl vocabulario de errores que toma ApiError#type.
OpenEmail::PAGE_LIMITSEl limit: máximo y el predeterminado en la mayoría de las listas paginadas: 100 y 25. Unas pocas listas admiten más, y la referencia de cada método lo indica.
OpenEmail::RULE_FIELDS, OpenEmail::RULE_OPERATORS, OpenEmail::RULE_ACTIONSEl vocabulario con el que se construyen las condiciones y las acciones de una regla.
OpenEmail::MESSAGE_ENCRYPTION_FORMATSLos cinco sobres que puede nombrar la ingesta. Tres de ellos están sellados.
OpenEmail::CREDENTIAL_KINDS, OpenEmail::STEP_UP_METHODS, OpenEmail::STEP_UP_ERROR_CODESQué credencial describen me.get y me.ping, cómo se comprueba un código de verificación y los códigos con los que puede fallar una verificación.
OpenEmail::THREAD_SORTS, OpenEmail::PEOPLE_SORTS, OpenEmail::FILE_SORTS y los demás *_SORTSLos órdenes en los que se puede ordenar una lista.
OpenEmail::FORM_STATUSES, OpenEmail::BROADCAST_STATUSES, OpenEmail::SUPPRESSION_REASONS y los demás conjuntosLos valores que puede tomar un campo de un recurso. Cada conjunto se nombra según lo que contiene.

Objetos

Una respuesta es el JSON analizado como un Hash con claves Symbol. La gema solo construye un objeto propio donde da forma a la respuesta, y cada uno es un Data inmutable.

ClaseLo que lleva
OpenEmail::Pageitems, has_more? y next_cursor, de cada list paginado.
OpenEmail::PeoplePageLo mismo más seen, de contacts.list_people.
OpenEmail::TempMessagesPageLo mismo más expires_at, de temp_mail.list_messages.
OpenEmail::AddressBookPage, OpenEmail::AddressBookunrestricted, addresses y domains, de addresses.list (con has_more? y next_cursor) y de addresses.list_all.
OpenEmail::BatchResultitems, sent y failed, de emails.send_batch.
OpenEmail::TemplateSendsitems, total, page y page_size, de templates.list_sends.
OpenEmail::HttpRequest, OpenEmail::HttpResponseLo que recibe y devuelve un adapter:. Una solicitud imprime su cabecera Authorization como [redacted].

Todo error que la gema lanza a propósito hereda de OpenEmail::Error: ApiError y sus subclases, NetworkError y WebhookSignatureError. Un argumento incorrecto es en cambio un ArgumentError, porque es un error del código que llama y no algo que capturar.

Un endpoint que esto todavía no envuelve

Una versión de la gema nunca debería ser lo que te separa de un endpoint que ya funciona. client.raw.request recibe una ruta y opciones como argumentos nombrados y devuelve el cuerpo ya analizado, aplicando la credencial, la URL base, el tiempo de espera y la política de reintentos del cliente.

escape_hatch.rb
result = client.raw.request(  "/something-new",  method: :post,  query: {dryRun: true},  body: {name: "Invoices"},  repeatable: true) p result

Un GET se reintenta como cualquier otra lectura. Cualquier otro método se envía una sola vez salvo que pases repeatable: true, que es tu afirmación de que puede enviarse dos veces. query: omite los valores nil o vacíos, y api_key: funciona igual que en todos los demás métodos.

Lo que deliberadamente no hace

  • No valida ningún cuerpo de solicitud. El esquema del servidor es la única copia de las reglas, y una segunda copia aquí acabaría rechazando una dirección que un servidor más reciente acepta, en una versión que alguien fijó hace dos años.
  • No tiene dependencias en tiempo de ejecución, ni siquiera una gema de JSON o de HTTP aparte de la biblioteca estándar.
  • Solo cambia la forma de una respuesta de una manera: el array data de una colección se saca de su sobre y se coloca en uno de los objetos de arriba. Cualquier otra respuesta vuelve tal como la envió la API, con las claves en camelCase de la API.

La comprobación de paridad de la gema mantiene esto honesto. Hace fallar la compilación cuando un método de TypeScript no tiene gemelo en Ruby, acepta opciones distintas o envía una solicitud distinta.