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