Module: AssertUrl

Defined in:
lib/assert_url.rb

Constant Summary collapse

PARTS =
%W[scheme host port path query fragment].each do |part|
  const_set("#{part.capitalize}Error", Class.new(StandardError))
end

Instance Method Summary collapse

Instance Method Details

#assert_fragment_equal(expected, value) ⇒ Object

Examples:


assert_fragment_equal("fragment", "http://example.org/path#fragment")

Parameters:

  • expected (String)

    The fragment the url should have.

  • value (String or URI)

    The url you wish to validate.



82
83
84
85
86
# File 'lib/assert_url.rb', line 82

def assert_fragment_equal(expected, value)
  value = urify(value).fragment

  expected == value || raises(FragmentError, expected, value)
end

#assert_host_equal(expected, value) ⇒ Object

Examples:


assert_host_equal("example.org", "http://example.org")

Parameters:

  • expected (String)

    The host the url should have.

  • value (String or URI)

    The url you wish to validate.



29
30
31
32
33
# File 'lib/assert_url.rb', line 29

def assert_host_equal(expected, value)
  value = urify(value).host

  expected == value || raises(HostError, expected, value)
end

#assert_path_equal(expected, value) ⇒ Object

Examples:


assert_path_equal("/path", "http://example.org/path")

Parameters:

  • expected (String)

    The path the url should have.

  • value (String or URI)

    The url you wish to validate.



55
56
57
58
59
# File 'lib/assert_url.rb', line 55

def assert_path_equal(expected, value)
  value = urify(value).path

  expected == value || raises(PathError, expected, value)
end

#assert_port_equal(expected, value) ⇒ Object

Examples:


assert_port_equal(80, "http://example.org")

Parameters:

  • expected (Integer)

    The port the url should have.

  • value (String or URI)

    The url you wish to validate.



42
43
44
45
46
# File 'lib/assert_url.rb', line 42

def assert_port_equal(expected, value)
  value = urify(value).port

  expected == value || raises(PortError, expected, value)
end

#assert_query_equal(expected, value) ⇒ Object

Examples:


assert_query_equal({foo: "bar"}, "http://example.org/?foo=bar")

Parameters:

  • expected (Hash)

    The query the url should have.

  • value (String or URI)

    The url you wish to validate.



68
69
70
71
72
73
# File 'lib/assert_url.rb', line 68

def assert_query_equal(expected, value)
  value = urify(value).query
  expected = (URI.encode_www_form(expected) rescue expected)

  expected == value || raises(QueryError, expected, value)
end

#assert_query_include(expected, value) ⇒ Object

Examples:


assert_query_include({foo: "bar"}, "http://example.org/?foo=bar&baz=wat")

Parameters:

  • expected (String or Symbol)

    The key-value pairs that the url must include.

  • value (String or URI)

    The url you wish to validate.



110
111
112
113
114
# File 'lib/assert_url.rb', line 110

def assert_query_include(expected, value)
  value = Hash[URI.decode_www_form(urify(value).query)]

  includes?(expected.to_a, value) || (raise QueryError, "expected #{value} to include #{expected}")
end

#assert_scheme_equal(expected, value) ⇒ Object

Examples:


assert_scheme_equal(:http, "http://example.org")
assert_scheme_equal("http", "http://example.org")

Parameters:

  • expected (String or Symbol)

    The scheme the url should have.

  • value (String or URI)

    The url you wish to validate.



16
17
18
19
20
# File 'lib/assert_url.rb', line 16

def assert_scheme_equal(expected, value)
  value = urify(value).scheme

  expected.to_s == value || raises(SchemeError, expected, value)
end

#assert_url_equal(expected, value) ⇒ Object

#assert_url_equal runs all the validations above. It’s not a String comparison.

Examples:


assert_url_equal(URI("http://example.org"), "http://example.org")

Parameters:

  • expected (String or URI)

    The url you wish to have.

  • value (String or URI)

    The url you wish to validate.



97
98
99
100
101
# File 'lib/assert_url.rb', line 97

def assert_url_equal(expected, value)
  expected, value = urify(expected), urify(value)

  PARTS.map { |part| send(:"assert_#{part}_equal", expected.send(part.to_sym), value) }.reduce(:&)
end