class WssAgent::GemSha1
Attributes
spec[R]
Public Class Methods
new(spec)
click to toggle source
# File lib/wss_agent/gem_sha1.rb, line 7 def initialize(spec) @spec = spec check_version! unless @spec.version > Gem::Version.new('0') end
Public Instance Methods
check_version!()
click to toggle source
check version if version isn't found get latest version
# File lib/wss_agent/gem_sha1.rb, line 15 def check_version! conn = Faraday.new(url: 'https://rubygems.org') do |h| h.headers[:content_type] = 'application/x-www-form-urlencoded' h.request :url_encoded h.adapter :excon end response = conn.get("/api/v1/versions/#{spec.name}.json") versions = MultiJson.load(response.body) unless versions.detect { |j| j['number'] == spec.version } spec.version = versions.first['number'] end rescue end
remote_file(retry_request = false)
click to toggle source
download gem from rubygems
# File lib/wss_agent/gem_sha1.rb, line 55 def remote_file(retry_request = false) response = Net::HTTP.get_response(remote_file_url) case response.code when '200' # ok Digest::SHA1.hexdigest(response.body) when '302' # redirect response = Net::HTTP.get_response(URI(response['location'])) return Digest::SHA1.hexdigest(response.body) if response.code == '200' else # gem isn't found '' end rescue Timeout::Error retry_request ? nil : remote_file(true) end
remote_file_url()
click to toggle source
# File lib/wss_agent/gem_sha1.rb, line 49 def remote_file_url URI("http://rubygems.org/gems/#{spec.file_name}") end
sha1()
click to toggle source
# File lib/wss_agent/gem_sha1.rb, line 30 def sha1 case when spec.source.is_a?(Bundler::Source::Rubygems) path = spec.source.send(:cached_gem, spec).to_s Digest::SHA1.hexdigest(File.binread(path)) when spec.source.is_a?(Bundler::Source::Git) # ??? when spec.source.is_a?(Bundler::Source::Path) # ???? when spec.source.nil? remote_file end rescue => ex WssAgent.logger.debug "#{ex.message}" WssAgent.logger.debug "#{spec}" remote_file end