Sha256: 59961035c0a9a78fdd3f15970d81819c29f5643d27d4df5f01dbbaf6fddaf359

Contents?: true

Size: 1.7 KB

Versions: 1

Compression:

Stored size: 1.7 KB

Contents

require 'tempfile'

class Vendorer
  def initialize(options={})
    @options = options
    @sub_path = []
  end

  def parse(content)
    eval(content)
  end

  def file(path, url)
    path = complete_path(path)
    update_or_not path do
      run "mkdir -p #{File.dirname(path)}"
      run "curl '#{url}' -L -o #{path}"
      raise "Downloaded empty file" unless File.exist?(path)
      yield path if block_given?
    end
  end

  def folder(path, url=nil, options={})
    if url
      path = complete_path(path)
      update_or_not path do
        run "rm -rf #{path}"
        run "mkdir -p #{File.dirname(path)}"
        run "git clone '#{url}' #{path}"
        if commit = (options[:ref] || options[:tag] || options[:branch])
          run "cd #{path} && git checkout '#{commit}'"
        end
        run("cd #{path} && git submodule update --init --recursive")
        run "rm -rf #{path}/.git"
        yield path if block_given?
      end
    else
      @sub_path << path
      yield
      @sub_path.pop
    end
  end

  def rewrite(path)
    content = File.read(path)
    result = yield content
    File.open(path,'w'){|f| f.write(result) }
  end

  private

  def update_or_not(path)
    update_requested = (@options[:update] and (@options[:update] == true or path.start_with?(@options[:update]+'/') or path == @options[:update]))
    if update_requested or not File.exist?(path)
      puts "updating #{path}"
      yield
    else
      puts "keeping #{path}"
    end
  end

  def run(cmd)
    output = ''
    IO.popen(cmd + ' 2>&1') do |pipe|
      while line = pipe.gets
        output << line
      end
    end
    raise output unless $?.success?
  end

  def complete_path(path)
    (@sub_path + [path]).join('/')
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
vendorer-0.1.8 lib/vendorer.rb