Class: LogStruct::Log::ActionMailer

Inherits:
T::Struct
  • Object
show all
Extended by:
T::Sig
Includes:
Interfaces::AdditionalDataField, Interfaces::CommonFields, MergeAdditionalDataFields, SerializeCommon
Defined in:
lib/log_struct/log/action_mailer.rb

Overview

Email log entry for structured logging

Constant Summary collapse

ActionMailerEvent =
T.type_alias {
  T.any(Event::Delivery, Event::Delivered)
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from MergeAdditionalDataFields

#merge_additional_data_fields

Methods included from SerializeCommon

#as_json, #serialize_common

Constructor Details

#initialize(source: T.let(Source::Mailer, Source::Mailer), event:, timestamp:, level: T.let(Level::Info, Level), to: nil, from: nil, subject: nil, additional_data: {}) ⇒ void

Parameters:

  • source (Source::Mailer) (defaults to: T.let(Source::Mailer, Source::Mailer))

    Common fields

  • event (ActionMailerEvent)
  • timestamp (Time)
  • level (Level) (defaults to: T.let(Level::Info, Level))
  • to (String, Array<String>, nil) (defaults to: nil)

    Email-specific fields

  • from (String, nil) (defaults to: nil)
  • subject (String, nil) (defaults to: nil)
  • additional_data (Hash{Symbol => T.untyped}) (defaults to: {})


# File ''

const :source, Source::Mailer, default: T.let(Source::Mailer, Source::Mailer)
const :event, ActionMailerEvent
const :timestamp, Time, factory: -> { Time.now }
const :level, Level, default: T.let(Level::Info, Level)
const :to, T.nilable(T.any(String, T::Array[String])), default: nil
const :from, T.nilable(String), default: nil
const :subject, T.nilable(String), default: nil
const :additional_data, T::Hash[Symbol, T.untyped], default: {}

Instance Attribute Details

#additional_dataHash{Symbol => T.untyped} (readonly)

Returns the value of prop additional_data.

Returns:

  • (Hash{Symbol => T.untyped})


# File ''

const :additional_data, T::Hash[Symbol, T.untyped], default: {}

#eventActionMailerEvent (readonly)

Returns the value of prop event.

Returns:



# File ''

const :event, ActionMailerEvent

#fromString? (readonly)

Returns the value of prop from.

Returns:

  • (String, nil)


# File ''

const :from, T.nilable(String), default: nil

#levelLevel (readonly)

Returns the value of prop level.

Returns:



# File ''

const :level, Level, default: T.let(Level::Info, Level)

#sourceSource::Mailer (readonly)

Common fields

Returns:



# File ''

const :source, Source::Mailer, default: T.let(Source::Mailer, Source::Mailer)

#subjectString? (readonly)

Returns the value of prop subject.

Returns:

  • (String, nil)


# File ''

const :subject, T.nilable(String), default: nil

#timestampTime (readonly)

Returns the value of prop timestamp.

Returns:

  • (Time)


# File ''

const :timestamp, Time, factory: -> { Time.now }

#toString, ... (readonly)

Email-specific fields

Returns:

  • (String, Array<String>, nil)


# File ''

const :to, T.nilable(T.any(String, T::Array[String])), default: nil

Instance Method Details

#serialize(strict = true) ⇒ Hash{Symbol => T.untyped}

Convert the log entry to a hash for serialization

Parameters:

  • strict (Boolean) (defaults to: true)

Returns:

  • (Hash{Symbol => T.untyped})


42
43
44
45
46
47
48
49
50
51
52
# File 'lib/log_struct/log/action_mailer.rb', line 42

def serialize(strict = true)
  hash = serialize_common(strict)
  merge_additional_data_fields(hash)

  # Add email-specific fields if they're present
  hash[LOG_KEYS.fetch(:to)] = to if to
  hash[LOG_KEYS.fetch(:from)] = from if from
  hash[LOG_KEYS.fetch(:subject)] = subject if subject

  hash
end