Class: SimpleEmailPreview::ViewHooks
- Inherits:
-
Object
- Object
- SimpleEmailPreview::ViewHooks
- 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
- #add(id, pos, &block) ⇒ Object
- #add_render(id, pos, *render_args) ⇒ Object
-
#initialize ⇒ ViewHooks
constructor
A new instance of ViewHooks.
- #render(hook_id, locals, template) ⇒ Object
Constructor Details
Instance Method Details
#add(id, pos, &block) ⇒ Object
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
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..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 |