class Automatiek::Gem

def clean

def clean
  files = Dir.glob("#{vendor_lib}/*", File::FNM_DOTMATCH).reject {|f| %(. .. lib).include? f.split("/").last }
  FileUtils.rm_r files
end

def dependency(name, &block)

def dependency(name, &block)
  dep = self.class.new(name, &block)
  @dependencies << dep
end

def download=(opts = {}, &block)

def download=(opts = {}, &block)
  if block
    @download = block
  elsif github = opts.delete(:github)
    @download = lambda do |version|
      Dir.chdir File.dirname(vendor_lib) do
        `curl -L #{github}/archive/#{version}.tar.gz | tar -xz`
        unless $?.success?
          raise "Downloading & untarring #{gem_name} (#{version}) failed"
        end
        FileUtils.mv "#{github.split("/").last}-#{version.sub(/^v/, "")}", gem_name
      end
    end
  end
end

def initialize(gem_name, &block)

def initialize(gem_name, &block)
  @gem_name = gem_name
  @dependencies = []
  block.call(self) if block
end

def namespace_files(folder)

def namespace_files(folder)
  files = Dir.glob("#{folder}/**/*.rb")
  require_target = vendor_lib.sub(%r{^(.+?/)?lib/}, "") << "/lib"
  process(files, namespace, "#{prefix}::#{namespace}")
  process(files, /require (["'])#{Regexp.escape require_entrypoint}/, "require \\1#{require_target}/#{require_entrypoint}")
  process(files, /(autoload\s+[:\w]+,\s+["'])(#{Regexp.escape require_entrypoint}[\w\/]+["'])/, "\\1#{require_target}/\\2")
end

def process(files, regex, replacement = "")

def process(files, regex, replacement = "")
  files.each do |file|
    contents = File.read(file)
    contents.gsub!(regex, replacement)
    File.open(file, "w") {|f| f << contents }
  end
end

def require_entrypoint

def require_entrypoint
  @require_entrypoint ||= gem_name.tr("-", "/")
end

def update(version)

def update(version)
  FileUtils.rm_rf vendor_lib
  @download.call(version)
end

def vendor!(version = nil)

def vendor!(version = nil)
  update(version || self.version)
  @dependencies.each do |dependency|
    dependency.vendor!
    dependency.namespace_files(vendor_lib)
  end
  namespace_files(vendor_lib)
  clean
end