class Pakyow::Actions::Normalizer

Normalizes request uris, issuing a 301 redirect to the normalized uri.

Constants

TAIL_SLASH_REGEX

Public Instance Methods

call(connection) click to toggle source
# File lib/pakyow/actions/normalizer.rb, line 12
def call(connection)
  if strict_www? && require_www? && !www?(connection) && !subdomain?(connection)
    redirect!(connection, File.join(add_www(connection), connection.fullpath))
  elsif strict_www? && !require_www? && www?(connection)
    redirect!(connection, File.join(remove_www(connection), connection.fullpath))
  elsif strict_path? && slash?(connection)
    redirect!(connection, String.normalize_path(connection.fullpath))
  end
end

Private Instance Methods

add_www(connection) click to toggle source
# File lib/pakyow/actions/normalizer.rb, line 30
def add_www(connection)
  "www.#{connection.authority}"
end
double_slash?(connection) click to toggle source
# File lib/pakyow/actions/normalizer.rb, line 42
def double_slash?(connection)
  connection.path.include?("//")
end
redirect!(connection, location) click to toggle source
# File lib/pakyow/actions/normalizer.rb, line 24
def redirect!(connection, location)
  connection.status = 301
  connection.set_header("Location", location)
  connection.halt
end
remove_www(connection) click to toggle source
# File lib/pakyow/actions/normalizer.rb, line 34
def remove_www(connection)
  connection.authority.split(".", 2)[1]
end
require_www?() click to toggle source
# File lib/pakyow/actions/normalizer.rb, line 68
def require_www?
  Pakyow.config.normalizer.require_www == true
end
slash?(connection) click to toggle source
# File lib/pakyow/actions/normalizer.rb, line 38
def slash?(connection)
  double_slash?(connection) || tail_slash?(connection)
end
strict_path?() click to toggle source
# File lib/pakyow/actions/normalizer.rb, line 60
def strict_path?
  Pakyow.config.normalizer.strict_path == true
end
strict_www?() click to toggle source
# File lib/pakyow/actions/normalizer.rb, line 64
def strict_www?
  Pakyow.config.normalizer.strict_www == true
end
subdomain?(connection) click to toggle source
# File lib/pakyow/actions/normalizer.rb, line 52
def subdomain?(connection)
  connection.host.count(".") > 1
end
tail_slash?(connection) click to toggle source
# File lib/pakyow/actions/normalizer.rb, line 48
def tail_slash?(connection)
  !(TAIL_SLASH_REGEX =~ connection.path).nil?
end
www?(connection) click to toggle source
# File lib/pakyow/actions/normalizer.rb, line 56
def www?(connection)
  connection.subdomain == "www"
end