class Issue
Public Class Methods
list()
click to toggle source
# File lib/gem-gratitude.rb, line 9 def self.list # Initializes a Markdown parser @markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, autolink: true, hard_wrap: true, fenced_code_blocks: true) # Load Gemfile gemfile_path="#{Dir.pwd}/Gemfile" if !File.exist?(gemfile_path) puts "Couldn't find a Gemfile in this directory" exit end # List of all gems @gem_list = [] # Characters to remove to get the pure gem name replacements = [ '\'', '"', ',' ] # Parse the gem names from the Gemfile puts 'Reading Gemfile...' File.open(gemfile_path).read.each_line do |line| parts = line.split if parts[0] == "gem" && parts[0].start_with?("gem") gem_name = parts[1] replacements.each {|r| gem_name.gsub!(r, '')} next if parts[2] =~ /github/ begin gem_spec = Gem::Specification.find_by_name(gem_name) @gem_list << {name: gem_name, homepage: gem_spec.homepage} if gem_spec.homepage rescue Gem::LoadError puts "Could not find gem '#{gem_name}'" next end end end # Not every gem_spec.homepage is a GitHub repo; try and find a GitHub link # Maybe via the GitHub Search API @gem_list.each do # if !(g[:homepage] =~ /https:\/\/github.com\//) end # Open HTML output file for writing tmp_html = '/tmp/giveback.html' file = File.open(tmp_html, 'w') # Find all open issues via the GitHub API puts 'Querying GitHub API for open issues...' @html_content = '' @issue_count = 0 @gem_list.each do |g| github_url = g[:homepage].split('/') response = HTTParty.get( "https://api.github.com/repos/#{github_url[-2]}/#{github_url[-1]}/issues?state=open", basic_auth: {username: 'd9eaac28045e8cc35c3f520c7e639caf22b1496e', password: 'x-oauth-basic'}, headers: { 'User-Agent' => "gem-gratitude" } ) json = JSON.parse(response.body) if response.code == 200 puts "#{g[:name]}: #{g[:homepage]} - #{json.count} open issues" json.each do |issue| @issue_count += 1 @labels = ''; issue['labels'].each do |label| @labels << "<span class='label' style='background-color:#{label['color']}'>#{label['name']}</span>" end @html_content << "<h3>[#{g[:name]}] #{issue['title']}</h3>"\ "<div><a class='github_link' href=\"#{issue['html_url']}\">View on GitHub: #{issue['title']}</a>"\ "<div>#{@labels}</div>"\ "#{@markdown.render(issue['body'].to_s)}</div>" end end end # Write to ERB template puts 'Generating HTML...' erb = ERB.new(File.read(File.expand_path(File.dirname(__FILE__)) + '/../template.erb')) file.write erb.result(binding) # Open up the resulting HTML file all cross-platform-like `xdg-open #{tmp_html} &` if OS.linux? `open #{tmp_html}` if OS.mac? end