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