class Middleman::Directory

def execute!

def execute!
  handle_directory(source)
end

def handle_directory(lookup)

def handle_directory(lookup)
  lookup = File.join(lookup, '{*,.[a-z]*}')
  
  Dir[lookup].sort.each do |file_source|
    if File.directory?(file_source)
      handle_directory(file_source)
      next
    end
    
    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_extension == ".js")
      new_file_extension = (file_extension == ".js") ? ".js" : ""
      next if file_source.split('/').last.split('.').length < 3
    
      file_destination.gsub!(file_extension, new_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