Module: ReactEmailRails

Defined in:
lib/react_email_rails.rb,
lib/react_email_rails.rb,
lib/react_email_rails/version.rb,
lib/react_email_rails/rendered_email.rb,
lib/react_email_rails/render_protocol.rb,
lib/generators/react_email_rails/email_generator.rb,
lib/generators/react_email_rails/install_generator.rb

Defined Under Namespace

Modules: ActionMailer, Generators, RenderModes, RenderProtocol, Tasks Classes: Configuration, PropsResolver, Railtie, RenderError, RenderedEmail

Constant Summary collapse

VERSION =
"0.3.0"
RENDER_PROTOCOL_VERSION =
3

Class Method Summary collapse

Class Method Details

.compose(type:, document:, context: {}, preview: nil) ⇒ Object

Render an @react-email/editor document (Tiptap JSON) to HTML+text. The document is sent verbatim (its keys are structural); only context is key-transformed, like props.



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/react_email_rails.rb', line 53

def compose(type:, document:, context: {}, preview: nil)
  payload = {
    kind: "document",
    type:,
    document: document.as_json,
    context: serialized_props(context),
    preview:,
  }

  instrument(kind: "document", type:) do
    configuration.resolved_render_mode.new(payload:, label: type).render
  end
rescue ReactEmailRails::RenderError => e
  configuration.on_render_error&.call(e, kind: "document", type:)
  raise
end

.configurationObject



31
32
33
# File 'lib/react_email_rails.rb', line 31

def configuration
  @configuration ||= Configuration.default
end

.configure {|configuration| ... } ⇒ Object

Yields:



35
36
37
# File 'lib/react_email_rails.rb', line 35

def configure
  yield(configuration)
end

.healthy?Boolean

Returns:

  • (Boolean)


87
88
89
90
91
92
93
94
# File 'lib/react_email_rails.rb', line 87

def healthy?
  configuration.resolved_render_mode.healthy?(
    command: configuration.send(:resolved_render_command),
    timeout: configuration.render_timeout,
  )
rescue StandardError
  false
end

.parse(type:, html:, context: {}) ⇒ Object

Parse HTML into an editor document Hash using the renderer’s extensions.



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/react_email_rails.rb', line 71

def parse(type:, html:, context: {})
  payload = {
    kind: "parse",
    type:,
    html: html.to_s,
    context: serialized_props(context),
  }

  instrument(kind: "parse", type:) do
    configuration.resolved_render_mode.new(payload:, label: type, response: :document).render
  end
rescue ReactEmailRails::RenderError => e
  configuration.on_render_error&.call(e, kind: "parse", type:)
  raise
end

.render(component:, props:, render_options: configuration.resolve_render_options) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
# File 'lib/react_email_rails.rb', line 39

def render(component:, props:, render_options: configuration.resolve_render_options)
  payload = { component:, props: serialized_props(props) }
  payload[:renderOptions] = render_options if render_options.present?

  instrument(kind: "email", component:) do
    configuration.resolved_render_mode.new(payload:, label: component).render
  end
rescue ReactEmailRails::RenderError => e
  configuration.on_render_error&.call(e, kind: "email", component:)
  raise
end