Class: ReactEmailRails::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/react_email_rails/configuration.rb

Constant Summary collapse

BUNDLE_PATH =

Must match OUT_DIR/BUNDLE_FILE in vite/src/index.ts (check_version_sync.rb asserts it).

"tmp/react-email-rails/emails.js"
BUILD_BIN =
"node_modules/.bin/react-email-rails-build"
CONFIG_BIN =
"node_modules/.bin/react-email-rails-config"
DEV_RENDER_BIN =
"node_modules/.bin/react-email-rails-dev"
DEFAULT_RENDER_TIMEOUT =
10
DEFAULT_RENDER_PROCESS_MAX_REQUESTS =
1_000
RENDER_MODES =
{
  subprocess: ReactEmailRails::RenderModes::Subprocess,
  persistent: ReactEmailRails::RenderModes::Persistent,
}.freeze
KEY_TRANSFORMS =
{
  camel: ->(key) { key.to_s.camelize },
  lower_camel: ->(key) { key.to_s.camelize(:lower) },
  dash: ->(key) { key.to_s.underscore.dasherize },
  snake: ->(key) { key.to_s.underscore },
  none: ->(key) { key },
}.freeze
DEFAULT_RENDER_COMMAND =
lambda do
  if Rails.env.development?
    [Rails.root.join(DEV_RENDER_BIN).to_s]
  else
    ["node", Rails.root.join(BUNDLE_PATH).to_s]
  end
end

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#component_path_resolverObject

Returns the value of attribute component_path_resolver.



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

def component_path_resolver
  @component_path_resolver
end

#render_modeObject

Returns the value of attribute render_mode.



39
40
41
# File 'lib/react_email_rails/configuration.rb', line 39

def render_mode
  @render_mode
end

#render_optionsObject

Returns the value of attribute render_options.



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

def render_options
  @render_options
end

#render_timeoutObject

Returns the value of attribute render_timeout.



39
40
41
# File 'lib/react_email_rails/configuration.rb', line 39

def render_timeout
  @render_timeout
end

#transform_propsObject

Returns the value of attribute transform_props.



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

def transform_props
  @transform_props
end

Class Method Details

.defaultObject



46
47
48
49
50
51
52
53
54
55
56
# File 'lib/react_email_rails/configuration.rb', line 46

def default
  new.tap do |config|
    config.component_path_resolver = ->(mailer:, action:) { "#{mailer}/#{action}" }
    config.render_mode = :subprocess
    config.render_options = {}
    config.render_timeout = DEFAULT_RENDER_TIMEOUT
    config.render_process_max_requests = DEFAULT_RENDER_PROCESS_MAX_REQUESTS
    config.transform_props = :lower_camel
    config.on_render_error = nil
  end
end

Instance Method Details

#render_process_max_requests=(value) ⇒ Object



73
74
75
76
77
78
79
# File 'lib/react_email_rails/configuration.rb', line 73

def render_process_max_requests=(value)
  unless value.nil? || (value.is_a?(Integer) && value.positive?)
    raise(ArgumentError, "react-email-rails render_process_max_requests must be a positive integer or nil")
  end

  @render_process_max_requests = value
end

#resolve_render_options(context = nil) ⇒ Object

A callable render_options is instance_exec’d against ‘context` (the mailer) when given, so it can use per-mail helpers; otherwise it’s called or returned as-is.



91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/react_email_rails/configuration.rb', line 91

def resolve_render_options(context = nil)
  value =
    if render_options.respond_to?(:call) && context
      context.instance_exec(&render_options)
    elsif render_options.respond_to?(:call)
      render_options.call
    else
      render_options
    end

  deep_transform_keys(value.as_json, KEY_TRANSFORMS.fetch(:lower_camel))
end

#resolved_render_modeObject



81
82
83
84
85
86
87
# File 'lib/react_email_rails/configuration.rb', line 81

def resolved_render_mode
  return render_mode unless render_mode.is_a?(Symbol) || render_mode.is_a?(String)

  RENDER_MODES.fetch(render_mode.to_sym) do
    raise(ArgumentError, "Unknown react-email-rails render mode: #{render_mode.inspect}")
  end
end