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

Version Path
get_xkcd-0.2.5 lib/get_xkcd/comic.rb
get_xkcd-0.2.4 lib/get_xkcd/comic.rb
get_xkcd-0.2.3 lib/get_xkcd/comic.rb
get_xkcd-0.2.2 lib/get_xkcd/comic.rb
get_xkcd-0.2.1 lib/get_xkcd/comic.rb
get_xkcd-0.2.0 lib/get_xkcd/comic.rb