Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

route_downcaser

Package Overview
Dependencies
Maintainers
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

route_downcaser

  • 2.0.0
  • Rubygems
  • Socket score

Version published
Maintainers
2
Created
Source

= RouteDowncaser

Makes routing in Rails case-insensitive (and other Rack-servers like Sinatra)

This gem hooks into the Rack middleware of Rails. This way all paths are downcased before dispatching to Rails' routing mechanism. Querystring parameters and asset paths are not changed in any way.

== Requirements

This gem is tested with 5.2.x, 6.x, 7.x. It reportedly also works with Sinatra, although I do not use Sinatra myself. Sinatra test-cases will be most welcome.

It has previously worked - and I presume still works - in Rails 5.0.x and 5.1.x.

If you want this functionality in a Rails 2.x-3.0 application, please refer to {this blog post}[http://gehling.dk/2010/02/how-to-make-rails-routing-case-insensitive]. If you need it for Rails 3.1.x or 4.x version 1.2.2 should serve you just fine.

Note: from version 1.2.0, route_downcaser depends on ActiveSupport 3.2 or later. This was necessary to enable support for multibyte characters.

== Installing

=== Rails

Just add the gem to your gemfile and run bundle

  gem 'route_downcaser'

Then restart your Rails server. No configuration is needed. The gem simply hooks itself into the Rack middleware call stack.

If you have a controller named app/controllers/foo_controller.rb and the action index, you can now call it with:

  http://localhost:3000/foo
  http://localhost:3000/Foo
  http://localhost:3000/FOO
  http://localhost:3000/foo/index
  http://localhost:3000/Foo/INDEX
  http://localhost:3000/FOO/IndeX

All the above are valid.

=== Sinatra

In your Gemfile you add the gem:

  gem 'route_downcaser'

In your application.rb you add the following (after loading Sinatra)

  require 'route_downcaser'
  use RouteDowncaser::DowncaseRouteMiddleware

Now this statement

  get '/foo' do
    "Hello"
  end

will respond to all these requests:

  http://localhost:4567/foo
  http://localhost:4567/Foo
  http://localhost:4567/FOO

== Configuration Options

Configuration options can be set using an initializer in your application like so:

  # config/initializers/route_downcaser.rb

  RouteDowncaser.configuration do |config|
    config.redirect = true

    config.exclude_patterns = [
      /assets\//i,
      /fonts\//i,
      /some\/important\/path/i
    ]
  end

=== redirect

With this configuration option set to true, the middleware will 301 redirect all routes to their downcased version. Example: http://localhost:3000/Foo will redirect to http://localhost:3000/foo.

=== exclude_patterns

Array of regular expressions. If the requested path matches one of these expressions, RouteDowncaser will not change anything.

== Background information

Sometimes you may wish to market a url which contains a controller name - like www.myshop.com/specialoffer. If this is done on offline media it will cause potential customers trouble, if they don't use the correct casing. If, for some reason, the user types www.myshop.com/Specialoffer (with capital S), your Rails app will return a 404 not found.

The strange thing is, that {the W3C specification}[http://www.w3.org/TR/WD-html40-970708/htmlweb.html] states:

  URLs in general are case-sensitive (with the exception of machine names). There may be URLs, or parts of URLs, where case doesn't matter, but identifying these may not be easy. Users should always consider that URLs are case-sensitive.

So www.myshop.com is case-insensitive and can be written as WWW.MYSHOP.COM, but the path (/specialoffer) is not.

It may make perfect sense for the W3C guys, but not for the average user.

When Rails introduced Rack middleware, it suddenly became possible to hook into the call-stack before the URL is used for action dispatching.

At first I just made this code as a snippet and published it {on my blog}[http://gehling.dk/2010/02/how-to-make-rails-routing-case-insensitive]. But since I found out that many people are actually using this, I finally decided to convert it into a gem.

All it really does is to take the path and downcase it before dispatching. Querystring parameters are NOT touched, they keep their casing, since it may have some contextual meaning.

FAQs

Package last updated on 01 Dec 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc