class Voom::Presenters::Api::App

This is the Rest API for voom services/component commands

Private Instance Methods

prepare_context(base_params = params) click to toggle source
# File lib/voom/presenters/api/app.rb, line 67
def prepare_context(base_params = params)
  prepare_context = Presenters::Settings.config.presenters.web_client.prepare_context.dup
  prepare_context.push(method(:scrub_context))
  context = base_params.dup
  prepare_context.reduce(context) do |params, context_proc|
    context_proc.call(params, session, env)
  end
  context
end
render_presenter(presenter) click to toggle source

analogous to Voom::Presenters::WebClient::App#render_presenter

# File lib/voom/presenters/api/app.rb, line 34
def render_presenter(presenter)
  begin
    before_render = Presenters::Settings.config.presenters.before_render
    render_instead, ctx = before_render
                            .lazy
                            .map { |p| p.call(request) }
                            .detect(&:itself)

    if Presenters::App.registered?(render_instead)
      presenter = render_instead
    end

    p = params.merge(ctx || {})
    presenter = Voom::Presenters::App[presenter].call
    pom = presenter.expand(router: router, context: prepare_context(p))
    content_type :json
    JSON.dump(pom.to_hash)
  rescue StandardError => e
    presenter_name = presenter.respond_to?(:name) ? presenter.name : '(unknown)'
    Presenters::Settings.config.presenters.error_logger.call(
      @env['rack.errors'],
      e,
      params,
      presenter_name
    )
    raise e
  end
end
router() click to toggle source
# File lib/voom/presenters/api/app.rb, line 63
def router
  settings.router_.new(base_url: "#{request.base_url}#{env['SCRIPT_NAME']}")
end
scrub_context(params, _session, _env) click to toggle source
# File lib/voom/presenters/api/app.rb, line 77
def scrub_context(params, _session, _env)
  %i(splat captures _presenter_ grid_nesting).each do |key|
    params.delete(key)
  end
  params
end