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

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.



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

def component_path_resolver
  @component_path_resolver
end

#render_modeObject

Returns the value of attribute render_mode.



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

def render_mode
  @render_mode
end

#render_optionsObject

Returns the value of attribute render_options.



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

def render_options
  @render_options
end

#render_timeoutObject

Returns the value of attribute render_timeout.



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

def render_timeout
  @render_timeout
end

#transform_propsObject

Returns the value of attribute transform_props.



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

def transform_props
  @transform_props
end

Class Method Details

.defaultObject



43
44
45
46
47
48
49
50
51
52
53
# File 'lib/react_email_rails/configuration.rb', line 43

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



70
71
72
73
74
75
76
# File 'lib/react_email_rails/configuration.rb', line 70

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



86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/react_email_rails/configuration.rb', line 86

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



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

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