An ordered multi-value mapped collection representing generic URI parameters.
Returns an empty URI::Params.
Parses an URI query string into a URI::Params
Builds an url-encoded URI form/query.
Builds an url-encoded URI form/query.
Appends the given key value pairs as a url-encoded URI form/query to the given io.
Appends the given key value pairs as a url-encoded URI form/query to the given io.
Returns the given key value pairs as a url-encoded URI form/query.
Returns the given key value pairs as a url-encoded URI form/query.
Parses an URI query and yields each key-value pair.
Returns first value for specified param name.
Sets the name key to value.
Returns first value or nil for specified param name.
Appends new value for specified param name.
Returns a copy of this URI::Params instance.
Deletes first value for provided param name.
Deletes all values for provided param name.
Returns a copy of this URI::Params instance.
Allows to iterate over all name-value pairs.
Returns true if params is empty.
Returns true if params is empty.
Returns first value for specified param name.
Returns first value for specified param name.
Returns all values for specified param name.
Returns true if param with provided name exists.
Returns true if param with provided name exists.
Appends this struct's name and instance variables names and values to the given IO.
Merges params and self into a new instance.
Merges params into self.
Sets all values for specified param name at once.
Serializes to string representation as http url-encoded form.
Serializes to string representation as http url-encoded form.
Enumerable({String, String})
Enumerable({String, String})
Struct
Struct
Value
Object
Object
Object
Returns an empty URI::Params.
Parses an URI query string into a URI::Params
require "uri/params"
URI::Params.parse("foo=bar&foo=baz&qux=zoo")
# => #<URI::Params @raw_params = {"foo" => ["bar", "baz"], "qux" => ["zoo"]}> Builds an url-encoded URI form/query.
The yielded object has an #add method that accepts two arguments, a key (String) and a value (String or Nil). Keys and values are escaped using URI.encode_www_form.
require "uri/params" params = URI::Params.build do |form| form.add "color", "black" form.add "name", "crystal" form.add "year", "2012 - today" end params # => "color=black&name=crystal&year=2012+-+today"
By default spaces are outputted as +. If space_to_plus is false then they are outputted as %20:
require "uri/params" params = URI::Params.build(space_to_plus: false) do |form| form.add "year", "2012 - today" end params # => "year=2012%20-%20today"
Builds an url-encoded URI form/query.
The yielded object has an #add method that accepts two arguments, a key (String) and a value (String or Nil). Keys and values are escaped using URI.encode_www_form.
require "uri/params" params = URI::Params.build do |form| form.add "color", "black" form.add "name", "crystal" form.add "year", "2012 - today" end params # => "color=black&name=crystal&year=2012+-+today"
By default spaces are outputted as +. If space_to_plus is false then they are outputted as %20:
require "uri/params" params = URI::Params.build(space_to_plus: false) do |form| form.add "year", "2012 - today" end params # => "year=2012%20-%20today"
Appends the given key value pairs as a url-encoded URI form/query to the given io.
require "uri/params"
io = IO::Memory.new
URI::Params.encode(io, {"foo" => "bar", "baz" => ["quux", "quuz"]})
io.to_s # => "foo=bar&baz=quux&baz=quuz" Appends the given key value pairs as a url-encoded URI form/query to the given io.
require "uri/params"
io = IO::Memory.new
URI::Params.encode(io, {foo: "bar", baz: ["quux", "quuz"]})
io.to_s # => "foo=bar&baz=quux&baz=quuz" Returns the given key value pairs as a url-encoded URI form/query.
require "uri/params"
URI::Params.encode({"foo" => "bar", "baz" => ["quux", "quuz"]}) # => "foo=bar&baz=quux&baz=quuz" Returns the given key value pairs as a url-encoded URI form/query.
require "uri/params"
URI::Params.encode({foo: "bar", baz: ["quux", "quuz"]}) # => "foo=bar&baz=quux&baz=quuz" Parses an URI query and yields each key-value pair.
require "uri/params" query = "foo=bar&foo=baz&qux=zoo" URI::Params.parse(query) do |key, value| # ... end
Returns first value for specified param name.
require "uri/params"
params = URI::Params.parse("[email protected]")
params["email"] # => "[email protected]"
params["non_existent_param"] # KeyError Sets the name key to value.
require "uri/params"
params = URI::Params{"a" => ["b", "c"]}
params["a"] = "d"
params["a"] # => "d"
params.fetch_all("a") # => ["d"]
params["a"] = ["e", "f"]
params["a"] # => "e"
params.fetch_all("a") # => ["e", "f"] Returns first value or nil for specified param name.
params["email"]? # => "[email protected]" params["non_existent_param"]? # nil
Appends new value for specified param name. Creates param when there was no such param.
params.add("item", "keychain")
params.fetch_all("item") # => ["pencil", "book", "workbook", "keychain"] Returns a copy of this URI::Params instance.
require "uri/params"
original = URI::Params{"name" => "Jamie"}
updated = original.clone
updated["name"] = "Ary"
original["name"] # => "Jamie" Identical to #dup.
Deletes first value for provided param name. If there are no values left, deletes param itself. Returns deleted value.
params.delete("item") # => "keychain"
params.fetch_all("item") # => ["keynote"]
params.delete("item") # => "keynote"
params["item"] # KeyError
params.delete("non_existent_param") # KeyError Deletes all values for provided param name. Returns array of deleted values.
params.set_all("comments", ["hello, world!", ":+1:"])
params.delete_all("comments") # => ["hello, world!", ":+1:"]
params.has_key?("comments") # => false Returns a copy of this URI::Params instance.
require "uri/params"
original = URI::Params{"name" => "Jamie"}
updated = original.dup
updated["name"] = "Ary"
original["name"] # => "Jamie" Identical to #clone.
Allows to iterate over all name-value pairs.
params.each do |name, value|
puts "#{name} => #{value}"
end
# Outputs:
# email => [email protected]
# item => keychain
# item => keynote Returns true if params is empty.
URI::Params.new.empty? # => true
URI::Params.parse("foo=bar&foo=baz&qux=zoo").empty? # => false Returns true if params is empty.
URI::Params.new.empty? # => true
URI::Params.parse("foo=bar&foo=baz&qux=zoo").empty? # => false Returns first value for specified param name. Falls back to provided default value when there is no such param.
params["email"] = "[email protected]" params.fetch("email", "[email protected]") # => "[email protected]" params.fetch("non_existent_param", "default value") # => "default value"
Returns first value for specified param name. Falls back to return value of provided block when there is no such param.
params.delete("email")
params.fetch("email") { raise "Email is missing" } # raises "Email is missing"
params.fetch("non_existent_param") { "default computed value" } # => "default computed value" Returns all values for specified param name.
params.set_all("item", ["pencil", "book", "workbook"])
params.fetch_all("item") # => ["pencil", "book", "workbook"] Returns true if param with provided name exists.
params.has_key?("email") # => true
params.has_key?("garbage") # => false Returns true if param with provided name exists.
params.has_key?("email") # => true
params.has_key?("garbage") # => false Appends this struct's name and instance variables names and values to the given IO.
struct Point def initialize(@x : Int32, @y : Int32) end end p1 = Point.new 1, 2 p1.to_s # "Point(@x=1, @y=2)" p1.inspect # "Point(@x=1, @y=2)"
Merges params and self into a new instance. If replace is false values with the same key are concatenated. Otherwise the value in params overrides the one in self.
params = URI::Params.parse("foo=bar&foo=baz&qux=zoo")
other_params = URI::Params.parse("foo=buzz&foo=extra")
params.merge(other_params).to_s # => "foo=buzz&foo=extra&qux=zoo"
params.merge(other_params, replace: false).to_s # => "foo=bar&foo=baz&foo=buzz&foo=extra&qux=zoo" See #merge! for a mutating alternative
Merges params into self.
params = URI::Params.parse("foo=bar&foo=baz&qux=zoo")
other_params = URI::Params.parse("foo=buzz&foo=extra")
params.merge!(other_params).to_s # => "foo=buzz&foo=extra&qux=zoo"
params.fetch_all("foo") # => ["buzz", "extra"] See #merge for a non-mutating alternative
Sets all values for specified param name at once.
params.set_all("item", ["keychain", "keynote"])
params.fetch_all("item") # => ["keychain", "keynote"] Serializes to string representation as http url-encoded form.
require "uri/params"
params = URI::Params.parse("item=keychain&greeting=hello+world&[email protected]")
params.to_s # => "item=keychain&greeting=hello+world&email=john%40example.org" By default spaces are outputted as +. If space_to_plus is false then they are outputted as %20:
require "uri/params"
params = URI::Params.parse("item=keychain&greeting=hello+world&[email protected]")
params.to_s(space_to_plus: false) # => "item=keychain&greeting=hello%20world&email=john%40example.org" Serializes to string representation as http url-encoded form.
require "uri/params"
params = URI::Params.parse("item=keychain&greeting=hello+world&[email protected]")
params.to_s # => "item=keychain&greeting=hello+world&email=john%40example.org" By default spaces are outputted as +. If space_to_plus is false then they are outputted as %20:
require "uri/params"
params = URI::Params.parse("item=keychain&greeting=hello+world&[email protected]")
params.to_s(space_to_plus: false) # => "item=keychain&greeting=hello%20world&email=john%40example.org"
© 2012–2026 Manas Technology Solutions.
Licensed under the Apache License, Version 2.0.
https://crystal-lang.org/api/1.19.0/URI/Params.html