Sha256: 18a50fa54956c4a0bc1e56e186891fe945e2c0deb4281cb91671bce16279664e

Contents?: true

Size: 1.13 KB

Versions: 1

Compression:

Stored size: 1.13 KB

Contents

require 'rack'
require 'listen'
require 'sprockets'
require 'pieces/listener'

module Pieces
  class Server < Rack::Server
    def self.start(config = {})
      new(Config.new(config)).start
    end

    attr_reader :config

    def initialize(config)
      @config = config
      super({})
    end

    def start
      Pieces::Listener.new(config).listen
      super
    end

    def sprockets_env
      Sprockets::Environment.new(config.path).tap do |env|
        env.append_path 'app/assets/javascripts'
        env.append_path 'app/assets/stylesheets'
        env.append_path 'app/views'
      end
    end

    def app
      urls = files_to_serve(config.path)
      build_path = "#{config.path}/build"
      assets_app = sprockets_env

      Rack::Builder.app do
        use Rack::Reloader
        use Rack::Static, urls: [''], root: build_path, index: 'index.html'
        map('/assets') { run assets_app } unless defined? ::Rails
        run Proc.new { |env| [404, {}, ['Not found']] }
      end
    end

    private

    def files_to_serve(path)
      Dir["#{config.path}/build/**/*"].map { |file| file.sub("#{config.path}/build", '') }
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
pieces-0.5.0 lib/pieces/server.rb