Class: Absolutely::URI

Inherits:
Object
  • Object
show all
Defined in:
lib/absolutely/uri.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(base:, relative:) ⇒ URI

Create an Absolutely::URI from a base URI and a relative path.

Examples:

uri = Absolutely::URI.new(base: 'https://example.com', relative: '/foo')
puts uri.to_abs
#=> "https://example.com/foo"

Parameters:

  • base (String)

    an absolute URI used to resolve relative path

  • relative (String)

    a relative path

Raises:



18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/absolutely/uri.rb', line 18

def initialize(base:, relative:)
  raise ArgumentError, "base must be a String (given #{base.class.name})" unless base.is_a?(String)
  raise ArgumentError, "relative must be a String (given #{relative.class.name})" unless relative.is_a?(String)

  @base = base
  @relative = relative

  base_uri
  relative_uri

  raise ArgumentError, 'base must be an absolute URL (e.g. https://example.com)' unless base_uri.absolute?
rescue Addressable::URI::InvalidURIError => e
  raise InvalidURIError, e
end

Instance Attribute Details

#baseObject (readonly)

Returns the value of attribute base.



5
6
7
# File 'lib/absolutely/uri.rb', line 5

def base
  @base
end

#relativeObject (readonly)

Returns the value of attribute relative.



5
6
7
# File 'lib/absolutely/uri.rb', line 5

def relative
  @relative
end

Instance Method Details

#base_uriAddressable::URI

Returns:

  • (Addressable::URI)


34
35
36
# File 'lib/absolutely/uri.rb', line 34

def base_uri
  @base_uri ||= Addressable::URI.parse(base)
end

#inspectString

Returns:

  • (String)


39
40
41
# File 'lib/absolutely/uri.rb', line 39

def inspect
  format("#<#{self.class.name}:%#0x base: #{base.inspect}, relative: #{relative.inspect}>", object_id)
end

#relative_uriAddressable::URI

Returns:

  • (Addressable::URI)


44
45
46
# File 'lib/absolutely/uri.rb', line 44

def relative_uri
  @relative_uri ||= Addressable::URI.parse(relative)
end

#to_absString

Convert a relative path to an absolute URI.

Returns:

  • (String)


51
52
53
54
55
56
57
# File 'lib/absolutely/uri.rb', line 51

def to_abs
  return relative_uri.normalize.to_s if relative_uri.absolute?

  base_uri.path = base_uri.normalized_path

  (base_uri + relative_uri).to_s
end