Module: ShasumDemo
- Included in:
- DiscreteMathTopics::PreliminaryMath
- Defined in:
- lib/modules/topics/demos/shasum_demo.rb
Class Method Summary collapse
- .get_checksum_for_gem(gem_name, gem_version) ⇒ Object
- .is_gem?(gem_name, gem_version) ⇒ Boolean
- .run ⇒ Object
- .valid_shasum?(gem_name, gem_version) ⇒ Boolean
Class Method Details
.get_checksum_for_gem(gem_name, gem_version) ⇒ Object
26 27 28 29 30 31 32 33 |
# File 'lib/modules/topics/demos/shasum_demo.rb', line 26 def self.get_checksum_for_gem(gem_name, gem_version) puts "\nObtaining actual checksum SHA 256 for #{gem_name} gem version #{gem_version}" raw = RestClient::Request.execute( method: :get, url: "https://rubygems.org/downloads/#{gem_name}-#{gem_version}.gem", raw_response: true) Digest::SHA256.file(raw.file.path).hexdigest end |
.is_gem?(gem_name, gem_version) ⇒ Boolean
14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/modules/topics/demos/shasum_demo.rb', line 14 def self.is_gem?(gem_name, gem_version) puts "Please wait. Checking that given version exists for gem" response = %x[gem search '^#{gem_name}$' --all] if response != "\n" gem_versions_list = response[response.index('(')+1..response.index(')')-1].split(',').map {|ver| ver.strip } return (gem_versions_list.include? gem_version) ? true : false else puts "\nNo versions of the gem exist" return false end end |
.run ⇒ Object
5 6 7 8 9 10 11 12 |
# File 'lib/modules/topics/demos/shasum_demo.rb', line 5 def self.run puts "\nChoose a Gem from RubyGems to validate its the Checksum of its SHA-256" puts "- Enter name of Gem (i.e. rails): " gem_name = gets.chomp.downcase.strip puts "Enter version of Gem (i.e. 5.1.2): " gem_version = gets.chomp.strip valid_shasum?(gem_name, gem_version) end |
.valid_shasum?(gem_name, gem_version) ⇒ Boolean
35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/modules/topics/demos/shasum_demo.rb', line 35 def self.valid_shasum?(gem_name, gem_version) is_gem = is_gem?(gem_name, gem_version) return false if not is_gem expected_checksum = get_checksum_for_gem(gem_name, gem_version) puts "Please wait. Downloading gem into subfolder ./temp" %x[mkdir -p temp; cd temp; gem fetch #{gem_name} --version '#{gem_version}';] output = %x[cd temp; shasum -a 256 ./#{gem_name}-#{gem_version}.gem] actual_checksum = output.split[0] # split on space puts "Actual Checksum: #{actual_checksum}" puts "Expected Checksum: #{expected_checksum}" puts "Valid Checksum: #{actual_checksum == expected_checksum}" actual_checksum == expected_checksum end |