class Rgversion::Spider
Public Class Methods
new(gems, selector)
click to toggle source
# File lib/rgversion/spider.rb, line 6 def initialize(gems, selector) raise NoArguments, error_messages(:arguments) if gems.blank? @gems = gems @selector = selector @gems.sort! end
Public Instance Methods
walk()
click to toggle source
# File lib/rgversion/spider.rb, line 13 def walk lines = [] errors = [] @gems.each do |gem| begin lines << grab_version(gem) rescue OpenURI::HTTPError, GemNotHosted errors << "#{gem} not found" end end { gems: lines, errors: errors } end
Private Instance Methods
error_messages(key)
click to toggle source
# File lib/rgversion/spider.rb, line 28 def error_messages(key) { arguments: "No gems passed as arguments. Try to use like this:\nrgversion rails sinatra", selector: "Selector #{@selector} doesn't exists on the page.\nRgversion should be updated." }[key].red end
grab_version(gem)
click to toggle source
# File lib/rgversion/spider.rb, line 35 def grab_version(gem) gem_url = "https://rubygems.org/gems/#{gem}" gem_page = Nokogiri::HTML(open(gem_url)) if gem_page.at(@selector).nil? raise GemNotHosted if gem_page.at("#markup").text().include? "This gem is not currently hosted on" raise WrongSelector, error_messages(:selector) end gem_page.at(@selector)["value"] end