def bget(url, token) if token ret = Browser.get(url, header: { "Authorization" => "token #{token}"}) else ret = Browser.get(url) end JSON::parse(ret) end def mkdir_p(dir) Dir.mkdir(dir) unless File.exists?(dir) end def github_download(name, dir, token=nil) url = "https://api.github.com/repos/#{name}/git/trees/master?recursive=1" ret = bget(url, token) raise "truncated == true" if ret["truncated"] ret["tree"].each do |e| case e["type"] when "blob" puts e["path"] tree = bget(e["url"], token) raise unless tree["encoding"] == "base64" File.open(File.join(dir, e["path"]), "w") do |f| data = Base64.decode(tree["content"].gsub("\n", "")) # p tree["content"] # p data f.write(data) end when "tree" dst = File.join(dir, e["path"]) mkdir_p(dst) end end end # Initialize begin token = GITHUB_DOWNLOAD_TOKEN rescue NameError # token is nil end puts <