Project

gate

0.01
No commit activity in last 3 years
No release in over 3 years
Validate and coerce user input against defined structure.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 1.16
~> 5.11
~> 0.11
~> 5.2
~> 12.0

Runtime

 Project Readme

Gate

Gem Version Circle CI Code Climate Test Coverage

Gate is a small wrapper on dry-validation that integrates it with Ruby on Rails and replaces Strong Params.

Installation

Add this line to your application's Gemfile:

gem 'gate'

And then execute:

$ bundle

Or install it yourself as:

$ gem install gate

Usage

Define contract per action with controller DSL...

class ExampleController < ActionController::Base
  include Gate::Rails

  before_action :verify_contract, if: { |c| c.contract_registered? }

  # Define contract just before action method
  contract(handler: :handle_invalid_params) do
    params do
      required(:id).filled
      required(:message).hash do
        required(:title).filled
        optional(:value).maybe(:decimal?)
      end
    end
  end

  def foo
    # you can access Dry::Validation result with:
    claimed_params
  end

  # handler for invalid params
  def handle_invalid_params(_errors)
    # errors is Dry::Validation messages hash

    head :bad_request
  end
end

... or as a separate class:

class ExampleFooContract < Dry::Validation::Contract
  params do
    required(:id).filled
    required(:message).hash do
      required(:title).filled
      optional(:value).maybe(:decimal?)
    end
  end
end

class ExampleController < ActionController::Base
  include Gate::Rails

  before_action :verify_contract, if: { |c| c.contract_registered? }

  contract(ExampleFooContract)
  def foo
    # you can access Dry::Validation result with:
    claimed_params
  end

  # just use default handler
  def handle_invalid_params(_errors)
    # errors is Dry::Validation messages hash

    head :bad_request
  end
end

Configuration

TODO

Development

After checking out the repo, run bin/setup to install dependencies. Then, run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release to create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

  1. Fork it ( https://github.com/[my-github-username]/gate/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request