class GemnasiumClient

Public Class Methods

new(logger: SimpleLogger.new) click to toggle source
# File lib/gem_checks/gemnasium_client.rb, line 7
def initialize(logger: SimpleLogger.new)
  @logger = set_log_level(logger)
end

Public Instance Methods

logger=(logger) click to toggle source
# File lib/gem_checks/gemnasium_client.rb, line 17
def logger=(logger)
  @logger = set_log_level(logger)
end
vulnerable?(gem_name:, version:) click to toggle source
# File lib/gem_checks/gemnasium_client.rb, line 11
def vulnerable?(gem_name:, version:)
  uri = client_url(gem_name, version)
  log_analysis(gem_name, version)
  query_gemnasium(uri)
end

Private Instance Methods

client_url(gem_name, version) click to toggle source
# File lib/gem_checks/gemnasium_client.rb, line 49
def client_url(gem_name, version)
  "https://gemnasium.com/gems/#{gem_name}/versions/#{version}"
end
gem_vulnerable?(doc) click to toggle source
# File lib/gem_checks/gemnasium_client.rb, line 34
def gem_vulnerable?(doc)
  doc.css('div.accordion.advisory.affected').count >= 1
end
log_analysis(gem_name, version) click to toggle source
# File lib/gem_checks/gemnasium_client.rb, line 23
def log_analysis(gem_name, version)
  @logger.info("Analysing: #{gem_name}, version: #{version}")
end
query_gemnasium(uri) click to toggle source
# File lib/gem_checks/gemnasium_client.rb, line 38
def query_gemnasium(uri)
  open(uri) do |gemnasium_raw|
    doc = Nokogiri::HTML(gemnasium_raw)
    gem_vulnerable?(doc)
  end
rescue OpenURI::HTTPError
  false
rescue Errno::ECONNRESET
  query_gemnasium(uri)
end
set_log_level(logger) click to toggle source
# File lib/gem_checks/gemnasium_client.rb, line 27
def set_log_level(logger)
  level = ENV.fetch('LOG_LEVEL') { Logger::INFO }.to_i
  logger.tap do |l|
    l.level = level
  end
end