Class: ActionDispatch::Journey::Router::Utils

Inherits:
Object
  • Object
show all
Defined in:
lib/action_dispatch/journey/router/utils.rb

Overview

:nodoc:

Defined Under Namespace

Classes: UriEncoder

Constant Summary collapse

ENCODER =
UriEncoder.new

Class Method Summary collapse

Class Method Details

.escape_fragment(fragment) ⇒ Object



85
86
87
# File 'lib/action_dispatch/journey/router/utils.rb', line 85

def self.escape_fragment(fragment)
  ENCODER.escape_fragment(fragment.to_s)
end

.escape_path(path) ⇒ Object



77
78
79
# File 'lib/action_dispatch/journey/router/utils.rb', line 77

def self.escape_path(path)
  ENCODER.escape_path(path.to_s)
end

.escape_segment(segment) ⇒ Object



81
82
83
# File 'lib/action_dispatch/journey/router/utils.rb', line 81

def self.escape_segment(segment)
  ENCODER.escape_segment(segment.to_s)
end

.normalize_path(path) ⇒ Object

Normalizes URI path.

Strips off trailing slash and ensures there is a leading slash. Also converts downcase url encoded string to uppercase.

normalize_path("/foo")  # => "/foo"
normalize_path("/foo/") # => "/foo"
normalize_path("foo")   # => "/foo"
normalize_path("")      # => "/"
normalize_path("/%ab")  # => "/%AB"


15
16
17
18
19
20
21
22
23
24
# File 'lib/action_dispatch/journey/router/utils.rb', line 15

def self.normalize_path(path)
  encoding = path.encoding
  path = "/#{path}"
  path.squeeze!("/".freeze)
  path.sub!(%r{/+\Z}, "".freeze)
  path.gsub!(/(%[a-f0-9]{2})/) { $1.upcase }
  path = "/" if path == "".freeze
  path.force_encoding(encoding)
  path
end

.unescape_uri(uri) ⇒ Object



89
90
91
# File 'lib/action_dispatch/journey/router/utils.rb', line 89

def self.unescape_uri(uri)
  ENCODER.unescape_uri(uri)
end