Sha256: 5789843938bab8e8f33acbd43610d9c96a06476aaafdd7eaea9f66a09688168a

Contents?: true

Size: 1.33 KB

Versions: 1

Compression:

Stored size: 1.33 KB

Contents

require 'rack'
require 'sprockets'

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 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 'vendor/assets/stylesheets'
        env.append_path 'vendor/assets/javascripts'
        env.append_path 'app/assets'
        env.append_path 'app/views'
        env.append_path 'app/views'

        if defined? ::Sass
          ::Sass.load_paths.each { |path| env.append_path(path) }
          env.css_compressor = :scss
        end

        if defined? ::Uglifier
          env.js_compressor = :uglify
        end
      end
    end

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

      Rack::Builder.app do
        use Rack::Reloader
        map('/assets') { run assets_app }
        run app
      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.6.0 lib/pieces/server.rb