Sha256: 1eae30df37a6e17237e9617a95f9de8b3643e5c3516c517b2204b71468f499fc

Contents?: true

Size: 1.62 KB

Versions: 1

Compression:

Stored size: 1.62 KB

Contents

require "linner/version"
require "linner/command"
require "linner/asset"
require "linner/helper"
require "linner/environment"
require "linner/wrapper"
require "linner/template"
require "linner/notifier"
require "linner/compressor"

module Linner
  extend self

  def root
    @root ||= Pathname('.').expand_path
  end

  def environment
    @env ||= Environment.new root.join("config.yml")
  end

  def perform(compile: false)
    environment.files.each do |config|
      Thread.new {concat(config).each {|asset| asset.compress if compile; asset.write}}.join
      Thread.new {copy(config)}.join
    end
  end

  private
  def concat(config)
    assets = []
    config["concat"].each do |dist, regex|
      Thread.new do
        dist = Asset.new(File.join environment.public_folder, dist)
        dist.content = ""
        matches = Dir.glob(File.join root, regex).uniq
        matches.sort_by_before_and_after(config["order"]["before"], config["order"]["after"]).each do |m|
          asset = Asset.new(m)
          content = asset.content
          if asset.wrappable?
            content = asset.wrap
          end
          dist.content << content
        end
        assets << dist
      end.join
    end
    assets
  end

  def copy(config)
    config["copy"].each do |dist, regex|
      Thread.new do
        matches = Dir.glob(File.join root, regex)
        matches.each do |path|
          asset = Asset.new(path)
          asset.path = File.join(environment.public_folder, dist, asset.logical_path)
          next if File.exist?(asset.path) and FileUtils.uptodate?(path, [asset.path])
          asset.write
        end
      end.join
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
linner-0.1.1 lib/linner.rb