class SimpleEmailPreview::ViewHooks
Add hooks before, after, or replacing a UI element
Constants
- POSITIONS
- SCHEMA
All valid hooks and their argument names
Public Class Methods
new()
click to toggle source
# File lib/simple_email_preview/view_hooks.rb, line 24 def initialize @hooks = Hooks.new end
Public Instance Methods
add(id, pos, &block)
click to toggle source
@param [Symbol] id @param [:before, :replace, :after] pos @example
view_hooks.add :headers_content, :after do |mail:, preview:| raw "<b>ID</b>: #{h mail.header['X-APP-EMAIL-ID']}" end
# 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)
click to toggle source
@param [Symbol] id @param [:before, :replace, :after] pos @example
view_hooks.add_render :list, :before, partial: 'shared/hello'
# 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) { |locals| ... }
click to toggle source
# 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
Private Instance Methods
render_providers(providers, locals, template)
click to toggle source
# File lib/simple_email_preview/view_hooks.rb, line 69 def render_providers(providers, locals, template) template.safe_join providers.map { |provider| template.instance_exec(locals, &provider) }, '' end
validate_locals!(hook_id, locals)
click to toggle source
# File lib/simple_email_preview/view_hooks.rb, line 73 def validate_locals!(hook_id, locals) if locals.keys.sort != SCHEMA[hook_id].sort raise ArgumentError, "Invalid arguments #{locals.keys}. Valid: #{SCHEMA[hook_id]}" end end