class MyPreciousPython

Public Class Methods

update() click to toggle source
# File lib/myprecious_python.rb, line 9
def self.update
  g = Git.open(Dir.pwd)
  repo_name = g.repo.path.split(".git")[0].split("/").last
  repo_name = repo_name + "-dependency-tracking"
  gem_lines = {}
  gem_name_pos = 0
  gem_version_pos = 1
  gem_latest_pos = 2
  gem_date_pos = 3
  gem_age_pos = 4
  gem_change_pos = 5
  default_length = 6

  if File.file?(repo_name+'.md')
    puts "reading the dependency file...."
    File.open(repo_name+".md", "r").each_with_index do |line, line_number|
      #puts line + " dds " + line_number.to_s
      word_array = line.split('|')
      if line_number == 0
        default_length = word_array.size
        word_array.each_with_index do |word, index|
          if word.strip == 'Dependency'
            gem_name_pos = index
          elsif word.strip == 'Our Version'
            gem_version_pos = index
          elsif word.strip == 'Latest Version'
            gem_latest_pos = index
          elsif word.strip == 'Date available'
            gem_date_pos = index
          elsif word.strip == 'Age (in days)'
            gem_age_pos = index
          elsif word.strip == 'Change Log'
            gem_change_pos = index
          end
        end
      elsif line_number > 1
        gem_name_index = word_array[gem_name_pos].strip
        #extract just the name of the gem from the first column
        #since that column contains a markdown-formatted hyperlink
        gem_name_index = gem_name_index[/\[(.*?)\]/,1]
        gem_lines[gem_name_index] = line_number
      end

    end
    #puts gem_lines
  else
    puts "creating the dependency file...."
    File.open(repo_name+'.md', 'w') { |write_file|
      write_file.puts "Last updated:" + Date.today.to_s + "; Use for directional purposes only, this data is not real time and might be slightly inaccurate" + "\n\n"
      write_file.puts "Dependency | Our Version | Latest Version | Date available | Age (in days) | Change Log"
      write_file.puts "--- | --- | --- | --- | --- | ---"
    }
  end

  file = File.new("Packages", "r")

  final_write = File.readlines(repo_name+'.md')

  while (line = file.gets)
    gem_line = line.strip
    
    if !gem_line.start_with?('#') && !gem_line.start_with?("https://")
      begin
        if gem_line.include? "=="
          name = gem_line.split('==')[0]
          current_version = gem_line.split('==')[1] 
        elsif gem_line.include? ">="
          name = gem_line.split('>=')[0]
          current_version = gem_line.split('>=')[1] 
        elsif gem_line.include? "<="
          name = gem_line.split('<=')[0]
          current_version = gem_line.split('<=')[1] 
        end
        if !current_version.index(';').nil?
          current_version = current_version.split(';')[0]
        end  

        api_url = "https://pypi.python.org/pypi/" + name + "/" + "json"
        response = RestClient.get(api_url)
        puts name.to_s + ": gathering info @ " + api_url
        begin
          current_build_date = JSON.parse(response)['releases'][current_version][0]['upload_time']
          if !current_build_date.nil?
            current_build_date = current_build_date
          else
            current_build_date = ""
          end
        rescue Exception => e
          puts e
          current_build_date = ""
        end
        
        begin
          latest_version = JSON.parse(response)['info']['version']
        rescue
          puts e
          latest_version = ""
        end          
                  
        begin
          latest_build_date = JSON.parse(response)['releases'][latest_version][0]['upload_time']
          if !latest_build_date.nil?
            latest_build_date = latest_build_date
          else
            latest_build_date = ""
          end
        rescue Exception => e
          puts e
          latest_build_date = ""
        end

        begin
          documentation = JSON.parse(response)['info']['project_url']
        rescue Exception => e
          puts e
          documentation = ""
        end

        begin
          homepage_uri = JSON.parse(response)['info']['home_page']
        rescue Exception => e
          puts e
          homepage_uri = ""
        end

        begin
          days_complete = Date.parse(latest_build_date) - Date.parse(current_build_date)
        rescue Exception => e
          days_complete = 0
        end 
         
        if gem_lines[name].nil?
          array_to_write = Array.new(default_length) { |i| "" }
        else
          array_to_write = final_write[gem_lines[name]].split('|')
        end
        array_to_write[gem_name_pos] = "[" + name + "]" + "(" + homepage_uri.to_s  + ")"
        array_to_write[gem_version_pos] = current_version.to_s
        array_to_write[gem_latest_pos] = latest_version.to_s
        array_to_write[gem_date_pos] = (latest_build_date).to_s
        array_to_write[gem_age_pos] = days_complete.to_i.to_s

        array_to_write[gem_change_pos] = documentation.to_s.to_s + "\n"
        if !gem_lines[name].nil?
          final_write[gem_lines[name]] = array_to_write.join("|")
        else
          final_write << array_to_write.join("|")
        end
      rescue Exception => e
        puts e
      end
    end
  end
  File.open(repo_name+'.md', 'w') { |f| f.write(final_write.join) }
  file.close
end