Sha256: de49aca7db5a139924df381fa05a86aa1a994a9ef49caa5414458dd324f37775

Contents?: true

Size: 1.04 KB

Versions: 1

Compression:

Stored size: 1.04 KB

Contents

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

module Pieces
  class Server < Rack::Server
    attr_reader :path

    def initialize(options = {})
      @path = options[:path] || Dir.pwd
      super
    end

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

    def sprockets_env
      Sprockets::Environment.new.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(path)
      build_path = "#{path}/build"
      assets_app = sprockets_env

      Rack::Builder.app do
        use Rack::Reloader
        use Rack::Static, urls: 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["#{path}/build/**/*"].map { |file| file.sub("#{path}/build", '') }
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

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