/rails-param-validation

Declarative parameter definition and validation for Rails

Primary LanguageRubyMIT LicenseMIT

RailsParamValidation

This gem provides parameter validation for Rails using a declarative parameter definition and makes the automatic validation of complex parameters very easy. It also supports an export of the definition as an OpenAPI document.

Quick Example

Let's take a look at a very simple example: a controller with a sample action, which gets a list of floats, rounds them to the nearest integer and returns it in a json encoded form.

class ExampleController
  desc "Show the functionality of this gem"

  action "Round float values" do
    # Expect a parameter with the name "values" which contains an array of floats
    query_param :values, ArrayType(Float), "Values to round"
    # Document the response of http status 200, which is an array of integers
    response 200, :success, ArrayType(Integer), "Rounded values response"
  end
  def sample_action
    render json: params[:values].map(&:round)
  end

  # We assume GET /round to be mapped to this action
end

Sending a valid request, the parameters are validated and casted correctly and we get the response one would expect:

$ curl -H "Accept: application/json" "http://localhost:3000/round?values[]=1.5&values[]=2.0&values[]=-0.777"
[2,2,-1]

When a request with invalid parameters is sent, we get an error response which also describes the error.

$ curl -H "Accept: application/json" "http://localhost:3000/round?values[]=1.5&values[]=2.0&values[]=XYZ"
{"status":"fail","errors":[{"path":"values/2","message":"Expected a float"}]}

Installation

Add this line to your application's Gemfile:

gem 'rails-param-validation'

And then execute:

$ bundle install

Or install it yourself as:

$ gem install rails-param-validator