class Middleman::Condenser

Public Class Methods

new(app, options_hash={}, &block) click to toggle source
Calls superclass method
# File lib/middleman/condenser.rb, line 26
def initialize(app, options_hash={}, &block)
  # Call super to build options from the options_hash
  super

  # Require libraries only when activated
  require 'condenser'
  require 'condenser/server'

  cache = Condenser::Cache::FileStore.new(File.join(app.root, 'tmp/cache'))
  @condenser = Condenser.new(app.root, cache: cache)
  app.use(Middleware, app)
  
  Middleman::Application.send(:attr_reader, :condenser)
  app.instance_variable_set(:@condenser, @condenser)
  
  options[:path].each { |p| @condenser.append_path(p) }
  
  # Append sources
  asset_dir = File.join(app.source_dir, 'assets')
  if File.exist?(asset_dir) && File.directory?(asset_dir)
    Dir.each_child(asset_dir).each do |child|
      child = File.join(asset_dir, child)
      @condenser.append_path(child) if File.directory?(child)
    end
  end
  
  # Append npm sources
  asset_dir = File.join(app.root, 'node_modules')
  if File.exist?(asset_dir) && File.directory?(asset_dir)
    @condenser.append_npm_path(asset_dir)
  end
end

Public Instance Methods

after_build(b) click to toggle source
# File lib/middleman/condenser.rb, line 72
def after_build(b)
  @required_assets.each do |asset|
    puts @condenser.find_export(asset).write(File.join(app.config[:build_dir], options[:prefix]))
  end
end
after_configuration() click to toggle source
# File lib/middleman/condenser.rb, line 68
def after_configuration
  # Do something
end
asset_path(kind, source=nil, options={}) click to toggle source
# File lib/middleman/condenser.rb, line 96
def asset_path(kind, source=nil, options={})
  accept = case kind
  when :css
    source << ".#{kind}" if !source.end_with?(kind.to_s)
    'text/css'
  when :js
    source << ".#{kind}" if !source.end_with?(kind.to_s)
    'application/javascript'
  end
  
  source = kind if source.nil?
  
  asset = app.condenser.find_export(source, accept: accept)
  app.extensions[:condenser].export(source)
  "/#{app.extensions[:condenser].options[:prefix].gsub(/^\//, '')}/#{asset.path}"
end
before_build(builder) click to toggle source
# File lib/middleman/condenser.rb, line 59
def before_build(builder)
  builder.instance_variable_set(:@parallel, false)
  @required_assets = []
end
before_clean(builder) click to toggle source
# File lib/middleman/condenser.rb, line 84
def before_clean(builder)
  build_dir = File.join(app.config[:build_dir], options[:prefix])
  
  manifest = Condenser::Manifest.new(@condenser, build_dir)
  puts @required_assets.inspect
  manifest.compile(@required_assets).each do |a|
    builder.instance_variable_get(:@to_clean).delete_if! { |x| a.to_s == a }
  end
end
export(file) click to toggle source
# File lib/middleman/condenser.rb, line 64
def export(file)
  @required_assets << file if @required_assets
end
extract_dimensions(size) click to toggle source
# File lib/middleman/condenser.rb, line 124
def extract_dimensions(size)
  size = size.to_s
  if /\A\d+x\d+\z/.match?(size)
    size.split("x")
  elsif /\A\d+\z/.match?(size)
    [size, size]
  end
end
image_tag(source, options = {}) click to toggle source
# File lib/middleman/condenser.rb, line 113
def image_tag(source, options = {})
  if options[:size] && (options[:height] || options[:width])
    raise ArgumentError, "Cannot pass a :size option with a :height or :width option"
  end

  src = options[:src] = asset_path(source)

  options[:width], options[:height] = extract_dimensions(options.delete(:size)) if options[:size]
  tag("img", options)
end
manipulate_resource_list(resources) click to toggle source
# File lib/middleman/condenser.rb, line 78
def manipulate_resource_list resources
  resources.reject do |resource|
    resource.path.start_with?(options[:prefix].sub(/^\//, ''))
  end
end