Sha256: 24a739866326ebbcbf6d1c39e0e664a94accdb0b1e01fd793b881d32ab0e7d5c

Contents?: true

Size: 1.51 KB

Versions: 14

Compression:

Stored size: 1.51 KB

Contents

require 'sinatra'
require 'json'
require_relative '../../presenters'
require_relative 'router'

module Voom
  module Presenters
    module Api
      # This is the Rest API for voom services/component commands
      class App < Sinatra::Base
        set :root, File.expand_path('../../../..', __FILE__)
        set :router_, Router
        set :bind, '0.0.0.0'

        get '/:_presenter_.pom' do
          render_presenter
        end

        private

        def render_presenter
          # puts "/presenters/api/#{params[:version]}/#{params[:presenter]}/"
          # puts "Parameters: #{params.inspect}"
          presenter = Voom::Presenters::App[params[:_presenter_]].call
          pom = presenter.expand(router: router, context: prepare_context)
          content_type :json
          JSON.dump(pom.to_hash)
        end

        def router
          settings.router_.new(base_url: "#{request.base_url}#{env['SCRIPT_NAME']}")
        end

        def prepare_context
          prepare_context = Presenters::Settings.config.presenters.web_client.prepare_context.dup
          prepare_context.push(method(:scrub_context))
          context = params.dup
          prepare_context.reduce(context) do |params, context_proc|
            context_proc.call(params, session, env)
          end
          context
        end

        def scrub_context(params, _session, _env)
          %i(splat captures _presenter_ grid_nesting).each do |key|
            params.delete(key)
          end
          params
        end
      end
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
voom-presenters-0.1.13 lib/voom/presenters/api/app.rb
voom-presenters-0.1.12 lib/voom/presenters/api/app.rb
voom-presenters-0.1.11 lib/voom/presenters/api/app.rb
voom-presenters-0.1.10 lib/voom/presenters/api/app.rb
voom-presenters-0.1.9 lib/voom/presenters/api/app.rb
voom-presenters-0.1.8 lib/voom/presenters/api/app.rb
voom-presenters-0.1.7 lib/voom/presenters/api/app.rb
voom-presenters-0.1.6 lib/voom/presenters/api/app.rb
voom-presenters-0.1.5 lib/voom/presenters/api/app.rb
voom-presenters-0.1.4 lib/voom/presenters/api/app.rb
voom-presenters-0.1.3 lib/voom/presenters/api/app.rb
voom-presenters-0.1.2 lib/voom/presenters/api/app.rb
voom-presenters-0.1.1 lib/voom/presenters/api/app.rb
voom-presenters-0.1.0 lib/voom/presenters/api/app.rb