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