# Sanitize-Rails - sanitize .. on Rails. [![Build Status](https://travis-ci.org/vjt/sanitize-rails.png)](https://travis-ci.org/vjt/sanitize-rails)
An easy bridge to integrate Ryan Grove's [HTML Whitelist Sanitizer][sanitize]
in your Rails application.
## Installation
`Gemfile`:
gem 'sanitize-rails', require: 'sanitize/rails'
## Configuration
Pass the configuration to `Sanitize` calling `Sanitize::Rails.configure` in
an initializer, say `config/initializers/sanitizer.rb`:
Sanitize::Rails.configure(
elements: [ ... ],
attributes: { ... },
...
)
Check out the [example][] in the `example/` directory.
## Usage
ActionView `sanitize` helper is transparently overriden to use the `Sanitize`
gem.
A `sanitize` helper is added to `ActiveRecord`, that installs on create/save
callbacks that sanitize the given attributes before persisting them to the
database. Example:
`app/models/foo.rb`:
class Foo < ActiveRecord::Base
sanitizes :description # on save by default
sanitizes :body, on: :create
sanitizes :remarks, on: :save
end
## Testing
### RSpec
`spec/spec_helper.rb`:
require 'sanitize/rails/matchers'
in spec code:
describe Post do
# Simplest variant, single field and default values
it { should sanitize_field :title }
# Multiple fields
it { should sanitize_fields :title, :body }
# Specifing both text to sanitize and expected result
it { should sanitize_field(:title).replacing('©').with('©') }
end
You should pass field names to matcher in the same way as you do with the
`sanitize` call in the model, otherwise sanitize method won't be found in
model.
### Test::Unit
`test/test_helper.rb:`
require 'sanitize/rails/test_helpers'
Sanitize::Rails::TestHelpers.setup(self,
invalid: 'some string',
valid: 'some string'
)
your test:
assert_sanitizes Model, :field, :some_other_field
## Compatibility
Tested with Rails 3.0 and :up: under Ruby 1.9.3 and :up:.
## License
MIT
## :smiley: Have fun!
[sanitize]: https://github.com/rgrove/sanitize
[example]: https://github.com/vjt/sanitize-rails/blob/master/example/sanitizer.rb