Ruby's URI library breaks a URL string into parts without making a network request.

uri A `URI` object exposes pieces such as the scheme, host, path, and query string.

URI Parsing

raw_url
uri_parsing.rb
Replay: real traced execution (multi-file project)
require "uri"

raw_url = "https://example.com/docs?topic=ruby"
uri = URI.parse(raw_url)

scheme = uri.scheme
host = uri.host
path = uri.path
query = uri.query || "none"

puts "scheme=#{scheme}"
puts "host=#{host}"
puts "path=#{path}"
puts "query=#{query}"
require "uri"

raw_url = "https://example.com/search?q=set"
uri = URI.parse(raw_url)

scheme = uri.scheme
host = uri.host
path = uri.path
query = uri.query || "none"

puts "scheme=#{scheme}"
puts "host=#{host}"
puts "path=#{path}"
puts "query=#{query}"
require "uri"

raw_url = "https://example.org/guide"
uri = URI.parse(raw_url)

scheme = uri.scheme
host = uri.host
path = uri.path
query = uri.query || "none"

puts "scheme=#{scheme}"
puts "host=#{host}"
puts "path=#{path}"
puts "query=#{query}"
  1. raw_url ← https://example.com/docs?topic=ruby, uri ← https://example.com/docs?topic=ruby

    1require "uri"23raw_url→ https://example.com/docs?topic=ruby = "https://example.com/docs?topic=ruby"  #@raw_url="https://example.com/search?q=set", "https://example.org/guide"4uri→ https://example.com/docs?topic=ruby = URI.parse(raw_url)https://example.com/docs?topic=ruby56scheme→ https = uri.schemehttps7host→ example.com = uri.hostexample.com8path→ /docs = uri.path/docs9query→ topic=ruby = uri.querytopic=ruby || "none"1011puts "scheme=#{schemehttps}"12puts "host=#{hostexample.com}"13puts "path=#{path/docs}"14puts "query=#{querytopic=ruby}"
    outputscheme=https
    host=example.com
    path=/docs
    query=topic=ruby
  1. raw_url ← https://example.com/search?q=set, uri ← https://example.com/search?q=set

    1require "uri"23raw_url→ https://example.com/search?q=set = "https://example.com/search?q=set"4uri→ https://example.com/search?q=set = URI.parse(raw_url)https://example.com/search?q=set56scheme→ https = uri.schemehttps7host→ example.com = uri.hostexample.com8path→ /search = uri.path/search9query→ q=set = uri.queryq=set || "none"1011puts "scheme=#{schemehttps}"12puts "host=#{hostexample.com}"13puts "path=#{path/search}"14puts "query=#{queryq=set}"
    outputscheme=https
    host=example.com
    path=/search
    query=q=set
  1. raw_url ← https://example.org/guide, uri ← https://example.org/guide

    1require "uri"23raw_url→ https://example.org/guide = "https://example.org/guide"4uri→ https://example.org/guide = URI.parse(raw_url)https://example.org/guide56scheme→ https = uri.schemehttps7host→ example.org = uri.hostexample.org8path→ /guide = uri.path/guide9query→ none = uri.query(empty) || "none"1011puts "scheme=#{schemehttps}"12puts "host=#{hostexample.org}"13puts "path=#{path/guide}"14puts "query=#{querynone}"
    outputscheme=https
    host=example.org
    path=/guide
    query=none