class Automatiek::Gem

Attributes

gem_name[RW]
namespace[RW]
prefix[RW]
require_entrypoint[W]
vendor_lib[RW]
version[RW]

Public Class Methods

new(gem_name, &block) click to toggle source
# File lib/automatiek/gem.rb, line 5
def initialize(gem_name, &block)
  @gem_name = gem_name
  @dependencies = []
  block.call(self) if block
end

Public Instance Methods

clean() click to toggle source
# File lib/automatiek/gem.rb, line 70
def clean
  files = Dir.glob("#{vendor_lib}/*", File::FNM_DOTMATCH).reject {|f| %(. .. lib).include? f.split("/").last }
  FileUtils.rm_r files
end
dependency(name, &block) click to toggle source
# File lib/automatiek/gem.rb, line 40
def dependency(name, &block)
  dep = self.class.new(name, &block)
  @dependencies << dep
end
download=(opts = {}, &block) click to toggle source
# File lib/automatiek/gem.rb, line 24
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
namespace_files(folder) click to toggle source
# File lib/automatiek/gem.rb, line 62
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
require_entrypoint() click to toggle source
# File lib/automatiek/gem.rb, line 56
def require_entrypoint
  @require_entrypoint ||= gem_name.tr("-", "/")
end
update(version) click to toggle source
# File lib/automatiek/gem.rb, line 51
def update(version)
  FileUtils.rm_rf vendor_lib
  @download.call(version)
end
vendor!(version = nil) click to toggle source
# File lib/automatiek/gem.rb, line 11
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

Private Instance Methods

process(files, regex, replacement = "") click to toggle source
# File lib/automatiek/gem.rb, line 77
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