No release in over a year
A Rails Engine that restricts the formats that your Rails controller actions are allowed to process.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Runtime

>= 7.1
 Project Readme

format_restricter_rails

format_restricter_rails provides a simple way to block Ruby on Rails controller actions from processing unsupported formats. If you've seen the following type of errors on your production site, format_restricter_rails can help:

ActionView::MissingTemplate (Missing template tasks/index, application/index with {:locale=>[:en], :formats=>[:json], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}

Why do these errors occur? If it's not a bug in the app code, it's usually because a person, or a bot, is sending requests to your app in a format you didn't anticipate.

When this happens, you could start defining respond_to calls in your actions to handle the new formats. Once you realize that's going to explode your code base, you might try to call respond_to :html, at the top of your controller class, in hopes that it will help. Sadly, it won't. That's where format_restricter_rails comes in. It provides a single controller class method called restrict_formats_to that does exactly what you want. When unallowed formats are requested, the controller halts execution and returns HTTP Error 406 Not acceptable.

Versioning Scheme

Releases are versioned using SemVer 2.0.0 with the following caveats:

  1. Support for a Ruby version, that reaches EOL, is removed in a major or minor release.
  2. Support for a Ruby on Rails version, that reaches EOL, is removed in a major or minor release.

Supported Ruby Versions

Ruby 3.1+

Supported Ruby on Rails Versions

Rails 7.1+

Installation

Add this line to your Rails application's Gemfile:

gem 'format_restricter_rails'

And then execute:

$ bundle

Usage

Add restrict_formats_to to the top of a controller to restrict all actions in the controller to the specified format(s).

Example 1: Restrict all actions

class MySnazzyController < ApplicationController
  restrict_formats_to :html, :json

  def my_action_1
  end

  def my_action_2
  end
end

You can also use only: and except: options to target specific actions.

Example 2: Using the only: option

class MySnazzyController < ApplicationController
  restrict_formats_to :html, only: :my_action_1
  restrict_formats_to :json, only: [:my_action_2, :my_action_3]

  def my_action_1
  end

  def my_action_2
  end

  def my_action_3
  end
end

Example 2: Using the except: Option

class MySnazzyController < ApplicationController
  restrict_formats_to :html, except: :my_action_1

  def my_action_1
  end

  def my_action_2
  end
end

Contributing

Bug reports and pull requests are welcome on the format_restricter_rails issues page.