class Middleman::Directory

def execute!

def execute!
  lookup = config[:recursive] ? File.join(source, '**') : source
  lookup = File.join(lookup, '{*,.[a-z]*}')
  
  Dir[lookup].sort.each do |file_source|
    next if File.directory?(file_source)
    next if file_source.include?('layout')
    next unless file_source.split('/').select { |p| p[0,1] == '_' }.empty?
    
    file_extension = File.extname(file_source)
    file_destination = File.join(given_destination, file_source.gsub(source, '.'))
    file_destination.gsub!('/./', '/')
    
    handled_by_tilt = ::Tilt.mappings.keys.include?(file_extension.gsub(/^\./, ""))
    if handled_by_tilt
      file_destination.gsub!(file_extension, "")
      destination = base.tilt_template(file_source, file_destination, config, &@block)
    else  
      destination = base.copy_file(file_source, file_destination, config, &@block)
    end
  end
end

def initialize(base, source, destination=nil, config={}, &block)

def initialize(base, source, destination=nil, config={}, &block)
  @source = File.expand_path(base.find_in_source_paths(source.to_s))
  @block  = block
  super(base, destination, { :recursive => true }.merge(config))
end

def invoke!

def invoke!
  base.empty_directory given_destination, config
  execute!
end

def revoke!

def revoke!
  execute!
end