Ortuna/padrino-pipeline

View on GitHub
lib/padrino-pipeline/pipelines/asset_pack.rb

Summary

Maintainability
A
25 mins
Test Coverage
require 'padrino-pipeline/pipelines/base'

module Padrino
  module Pipeline
    class AssetPack < Base
      REQUIRED_LIBRARIES = { 'sinatra-assetpack' => ['sinatra/assetpack'] }

      def packages
        @config.packages  || []
      end

      private

      def require_libraries
        super
        require 'padrino-pipeline/ext/asset-pack/helpers'
      end

      def setup_enviroment
        @app.set :serve_assets, true
        @app.register Sinatra::AssetPack
      end

      def setup_pipeline
        js_prefix, css_prefix, image_prefix, font_prefix = @config.js_prefix, @config.css_prefix, @config.image_prefix, @config.font_prefix
        js_assets, css_assets, image_assets, font_assets = @config.js_assets, @config.css_assets, @config.image_assets, @config.font_assets
        packages            = self.packages
        compression_enabled = @config.serve_compressed?

        @app.assets do
          def mount_asset(prefix, assets)
            [*assets].flatten.each do |asset|
              serve(prefix, :from => asset) if File.exists? asset
            end
          end

          mount_asset(js_prefix,    js_assets)
          mount_asset(css_prefix,   css_assets)
          mount_asset(image_prefix, image_assets)
          mount_asset(font_prefix,  font_assets)

          packages.each { |package| send(package.shift, *package) }
          if compression_enabled
            js_compression  :jsmin
            css_compression :sass
          end
        end 
      end
    end
  end
end