Class: SimpleEmailPreview::ViewHooks

Inherits:
Object
  • Object
show all
Defined in:
lib/simple_email_preview/view_hooks.rb

Overview

Add hooks before, after, or replacing a UI element

Defined Under Namespace

Classes: Hooks

Constant Summary collapse

SCHEMA =

All valid hooks and their argument names

{
  list:            args[:index],
  breadcrumb:      args[:show],
  breadcrumb_content: args[:show],
  headers_and_nav: args[:show],
  headers:         args[:show],
  headers_content: args[:show],
  nav:             args[:show],
  nav_i18n:        args[:show],
  nav_format:      args[:show],
  nav_send:        args[:show],
  email_body:      args[:show]
}.freeze
POSITIONS =
%i[before replace after].freeze

Instance Method Summary collapse

Constructor Details

#initializeViewHooks



24
25
26
# File 'lib/simple_email_preview/view_hooks.rb', line 24

def initialize
  @hooks = Hooks.new
end

Instance Method Details

#add(id, pos, &block) ⇒ Object

Examples:

view_hooks.add :headers_content, :after do |mail:, preview:|
  raw "<b>ID</b>: #{h mail.header['X-APP-EMAIL-ID']}"
end


48
49
50
# File 'lib/simple_email_preview/view_hooks.rb', line 48

def add(id, pos, &block)
  @hooks[id][pos] << block
end

#add_render(id, pos, *render_args) ⇒ Object

Examples:

view_hooks.add_render :list, :before, partial: 'shared/hello'


32
33
34
35
36
37
38
39
40
# File 'lib/simple_email_preview/view_hooks.rb', line 32

def add_render(id, pos, *render_args)
  render_args = render_args.dup
  render_opts = render_args.extract_options!.dup
  add id, pos do |locals = {}|
    render *render_args, render_opts.merge(
      locals: (render_opts[:locals] || {}).merge(locals)
    )
  end
end

#render(hook_id, locals, template) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/simple_email_preview/view_hooks.rb', line 52

def render(hook_id, locals, template)
  at = @hooks[hook_id]
  validate_locals! hook_id, locals
  parts = [
    render_providers(at[:before], locals, template),
    if at[:replace].present?
      render_providers(at[:replace], locals, template)
    else
      template.capture { yield(locals) }
    end,
    render_providers(at[:after], locals, template)
  ]
  template.safe_join(parts, '')
end