Class: ReactEmailRails::Configuration

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

Constant Summary collapse

BUNDLE_PATH =
"tmp/react-email-rails/emails.js"
BUILD_BIN =
"node_modules/.bin/react-email-rails-build"
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
DEFAULT_VERIFY_RENDER_ON_BOOT =
false

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

#on_render_errorObject

Returns the value of attribute on_render_error.



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

def on_render_error
  @on_render_error
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
57
# 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
    config.verify_render_on_boot = DEFAULT_VERIFY_RENDER_ON_BOOT
  end
end

Instance Method Details

#render_process_max_requests=(value) ⇒ Object



78
79
80
81
82
83
84
# File 'lib/react_email_rails/configuration.rb', line 78

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



94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/react_email_rails/configuration.rb', line 94

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_camelize_keys(value.as_json)
end

#resolved_render_modeObject



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

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

#verify_render_on_boot?Boolean

Returns:

  • (Boolean)


60
61
62
# File 'lib/react_email_rails/configuration.rb', line 60

def verify_render_on_boot?
  verify_render_on_boot.respond_to?(:call) ? !!verify_render_on_boot.call : !!verify_render_on_boot
end