class Gemat::Fetcher
Attributes
gems[RW]
Public Class Methods
new(dsl)
click to toggle source
# File lib/fetcher.rb, line 7 def initialize(dsl) @dsl = dsl @gems = [] end
Public Instance Methods
run()
click to toggle source
# File lib/fetcher.rb, line 12 def run pb = ProgressBar.create(total: @dsl.dependencies.length) @dsl.dependencies.each_with_index do |dependency, idx| pb.increment response = fetch_rubygems(dependency) next unless response create_gem(response, idx) sleep 0.2 end end
Private Instance Methods
create_gem(rubygems, idx)
click to toggle source
# File lib/fetcher.rb, line 27 def create_gem(rubygems, idx) gem = Gem.new(rubygems) gem.github = fetch_github(gem) gem.index = idx @gems << gem end
fetch(uri)
click to toggle source
rubocop:disable Metrics/MethodLength
# File lib/fetcher.rb, line 46 def fetch(uri) failed = [] client = HTTPClient.new request = client.get(uri) begin response = JSON.parse(request.body) rescue JSON::ParserError failed << gem.name return end print "#{failed.join(',')}: failed fetcing info." unless failed.empty? response end
fetch_github(gem, uri = nil)
click to toggle source
# File lib/fetcher.rb, line 38 def fetch_github(gem, uri = nil) uri ||= gem.repo_uri.gsub(/github.com/, 'api.github.com/repos') response = fetch(uri) response = fetch_github(gem, response['url']) if response['message'] == 'Moved Permanently' response end
fetch_rubygems(gem)
click to toggle source
# File lib/fetcher.rb, line 34 def fetch_rubygems(gem) fetch(rubygems_api(gem.name)) end
rubygems_api(name)
click to toggle source
rubocop:enable Metrics/MethodLength
# File lib/fetcher.rb, line 62 def rubygems_api(name) "https://rubygems.org/api/v1/gems/#{name}.json" end