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