Sha256: a9b7ecedcab99acb713b437f35d9c6007be946daa3f53e31ea5790156cc9be76

Contents?: true

Size: 1.91 KB

Versions: 1

Compression:

Stored size: 1.91 KB

Contents

require 'alephant/renderer'
require 'alephant/views'

require 'alephant/support/parser'

require 'alephant/preview/template/base'

require 'sinatra/base'
require "sinatra/reloader"
require 'faraday'
require 'json'
require 'uri'

module Alephant
  module Preview
    class Server < Sinatra::Base
      register Sinatra::Reloader
      also_reload 'components/*/models/*.rb'

      BASE_LOCATION = "#{(ENV['BASE_LOCATION'] || Dir.pwd)}/components"

      get '/preview/:id/:template/:region/?:fixture?' do
        render_preview
      end

      get '/component/:id/:template/?:fixture?' do
        render_component
      end

      get '/status' do
        'ok'
      end

      def render_preview
        Template::Base.new(
          { region => render_component },
          preview_template_location
        ).render
      end

      def render_component
        ::Alephant::Renderer.create(template, base_path, model).render
      end

      private
      def model
        require model_location
        ::Alephant::Views.get_registered_class(template).new(fixture_data)
      end

      def base_path
        File.join(BASE_LOCATION, id)
      end

      def model_location
        File.join(base_path, 'models', "#{template}.rb")
      end

      def template
        params['template']
      end

      def region
        params['region']
      end

      def id
        params['id']
      end

      def fixture
        params['fixture'] || id
      end

      def fixture_data
        msg = Struct.new(:body)
          .new(raw_fixture_data)
        parser.parse msg
      end

      def raw_fixture_data
        File.open(fixture_location).read
      end

      def parser
        @parser ||= ::Alephant::Support::Parser.new
      end

      def fixture_location
        "#{base_path}/fixtures/#{fixture}.json"
      end

      def preview_template_location
        "#{Template.path}/templates/preview.mustache"
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
alephant-preview-0.0.5.4 lib/alephant/preview/server.rb