class Pannier::Package

Attributes

app[R]
input_assets[R]
input_path[R]
middlewares[R]
name[R]
output_assets[R]
output_path[R]
processors[R]

Public Class Methods

new(name, app) click to toggle source
# File lib/pannier/package.rb, line 19
def initialize(name, app)
  @name, @app = name, app
  @input_assets, @output_assets = SortedSet.new, SortedSet.new
  @middlewares, @processors = [], []
end

Public Instance Methods

add_concatenator(concat_name, concatenator = Concatenator.new) click to toggle source
# File lib/pannier/package.rb, line 60
def add_concatenator(concat_name, concatenator = Concatenator.new)
  @processors << [:concat!, concat_name, concatenator]
end
add_input_assets(assets) click to toggle source
# File lib/pannier/package.rb, line 48
def add_input_assets(assets)
  @input_assets.merge(assets)
end
add_middleware(middleware, *args, &block) click to toggle source
# File lib/pannier/mounted/package.rb, line 7
def add_middleware(middleware, *args, &block)
  @middlewares << proc { |app| middleware.new(app, *args, &block) }
end
add_modifiers(modifiers) click to toggle source
# File lib/pannier/package.rb, line 56
def add_modifiers(modifiers)
  @processors += modifiers.map { |m| [:modify!, m] }
end
add_output_assets(assets) click to toggle source
# File lib/pannier/package.rb, line 52
def add_output_assets(assets)
  @output_assets.merge(assets)
end
assets(*patterns) click to toggle source
# File lib/pannier/package.rb, line 136
def assets(*patterns)
  patterns.each do |pattern|
    paths = Dir[File.join(full_input_path, pattern)]
    assets = build_assets_from_paths(paths)
    add_input_assets(assets)
  end
end
behave(*names) click to toggle source
# File lib/pannier/package.rb, line 128
def behave(*names)
  names.each do |name|
    behavior = self.app.behaviors[name]
    raise MissingBehavior.new(name) if behavior.nil?
    self.instance_eval(&behavior)
  end
end
build_assets_from_paths(paths) click to toggle source
# File lib/pannier/package.rb, line 41
def build_assets_from_paths(paths)
  paths.map do |path|
    pathname = Pathname.new(path)
    Asset.new(pathname.basename.to_s, pathname.dirname.to_s, self)
  end
end
build_handler_path(handler_path) click to toggle source
# File lib/pannier/mounted/package.rb, line 19
def build_handler_path(handler_path)
  hp = handler_path || '/'
  hp.insert(0, '/') unless hp[0] == '/'
  hp
end
clobber!() click to toggle source
# File lib/pannier/package.rb, line 72
def clobber!
  copy!
  FileUtils.rm_f(@output_assets.map(&:path))
end
concat(*args) click to toggle source
# File lib/pannier/package.rb, line 149
def concat(*args)
  add_concatenator(*args)
end
concat!(concat_name, concatenator) click to toggle source
# File lib/pannier/package.rb, line 93
def concat!(concat_name, concatenator)
  asset = Asset.new(concat_name, full_output_path, self)
  asset.content = concatenator.call(@output_assets.map(&:content))
  @output_assets.replace([asset])
end
copy!() click to toggle source
# File lib/pannier/package.rb, line 99
def copy!
  assets = @input_assets.map do |asset|
    asset.copy_to(full_output_path)
  end
  @output_assets.replace(assets)
end
env() click to toggle source
# File lib/pannier/package.rb, line 112
def env
  self.app.env
end
env?(expression, &block) click to toggle source
# File lib/pannier/package.rb, line 116
def env?(expression, &block)
  self.instance_eval(&block) if env.matches?(expression)
end
full_input_path() click to toggle source
# File lib/pannier/package.rb, line 33
def full_input_path
  File.expand_path(File.join(*[@app.input_path, @input_path].compact))
end
full_output_path() click to toggle source
# File lib/pannier/package.rb, line 37
def full_output_path
  File.expand_path(File.join(*[@app.output_path, @output_path].compact))
end
handler() click to toggle source
# File lib/pannier/mounted/package.rb, line 11
def handler
  handler_with_middlewares(output_assets.map(&:path), full_output_path)
end
handler_path() click to toggle source
# File lib/pannier/mounted/package.rb, line 15
def handler_path
  build_handler_path(output_path)
end
handler_with_middlewares(paths, full_path) click to toggle source
# File lib/pannier/mounted/package.rb, line 25
def handler_with_middlewares(paths, full_path)
  handler = FileHandler.new(paths, full_path)
  return handler if @middlewares.empty?
  @middlewares.reverse.reduce(handler) { |app, proc| proc.call(app) }
end
input(path) click to toggle source
# File lib/pannier/package.rb, line 120
def input(path)
  set_input(path)
end
modify(*modifiers, &block) click to toggle source
# File lib/pannier/package.rb, line 144
def modify(*modifiers, &block)
  modifiers << block if block_given?
  add_modifiers(modifiers)
end
modify!(modifier) click to toggle source
# File lib/pannier/package.rb, line 87
def modify!(modifier)
  @output_assets.each do |asset|
    asset.modify!(modifier)
  end
end
output(path) click to toggle source
# File lib/pannier/package.rb, line 124
def output(path)
  set_output(path)
end
owns_any?(*paths) click to toggle source
# File lib/pannier/package.rb, line 64
def owns_any?(*paths)
  @input_assets.any? { |a| paths.include?(a.path) }
end
package_logger() click to toggle source
# File lib/pannier/package.rb, line 68
def package_logger
  @package_logger ||= Logger::PackageLogger.new(@app.logger, self)
end
process!() click to toggle source
# File lib/pannier/package.rb, line 77
def process!
  package_logger.wrap do
    copy!
    !@processors.empty? && @processors.each do |instructions|
      send(*instructions)
    end
    write_files!
  end
end
set_input(path) click to toggle source
# File lib/pannier/package.rb, line 25
def set_input(path)
  @input_path = path
end
set_output(path) click to toggle source
# File lib/pannier/package.rb, line 29
def set_output(path)
  @output_path = path
end
use(*args, &block) click to toggle source
# File lib/pannier/mounted/package.rb, line 33
def use(*args, &block)
  add_middleware(*args, &block) 
end
write_files!() click to toggle source
# File lib/pannier/package.rb, line 106
def write_files!
  @output_assets.each(&:write_file!)
end