Sha256: 1dae3705d46d1c145d45284b2431eace36eb08699e59c8887732a21ce5810f48
Contents?: true
Size: 1.69 KB
Versions: 6
Compression:
Stored size: 1.69 KB
Contents
# frozen_string_literal: true require "net/http" require "json" module GetXkcd # Class that exposes methods for fetching XKCD comic data class Comic # Get the json for the most recent xkcd comic def self.fetch_latest_issue_data uri = URI("https://xkcd.com/info.0.json") req = Net::HTTP::Get.new(uri) req["Accept"] = "application/json" res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http| http.request(req) end JSON.parse(res.body) end # Get the json for the xkcd comic of a specific issue def self.fetch_specific_issue_data(issue_number) uri = URI("https://xkcd.com/#{issue_number}/info.0.json") req = Net::HTTP::Get.new(uri) req["Accept"] = "application/json" res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http| http.request(req) end JSON.parse(res.body) end # Get the json for the xkcd comic of a random issue def self.fetch_random_issue_data fetch_specific_issue_data(generate_random_issue_number) end # Generate a random number up to the latest issue number (excluding 404) def self.generate_random_issue_number latest_issue_number = fetch_latest_issue_data["num"] generate_random_number_excluding_404(latest_issue_number) end # Generate a random number from 1 up to input argument (excluding 404) def self.generate_random_number_excluding_404(max) number = rand(max) + 1 return number unless number == 404 generate_random_number_excluding_404(max) end private_class_method :generate_random_issue_number, :generate_random_number_excluding_404 end end
Version data entries
6 entries across 6 versions & 1 rubygems