Gem to sanitize hash of incoming data
Add this line to your application's Gemfile:
gem 'input_sanitizer'
And then execute:
$ bundle
Or install it yourself as:
$ gem install input_sanitizer
class PersonSanitizer < InputSanitizer::Sanitizer
string :name
string :address
integer :height
date :birthday
end
# filters unwanted parameters
sanitizer = PersonSanitizer.new({:account_id => 1, :name => "John"})
sanitizer.cleaned() # => {:name => "John"}
# provides key access
sanitizer[:name] # => "John"
# also provides shortcut method, same as new({}).cleaned
PersonSanitizer.clean({:account_id => 1})
# supports inheritance
class PrivilegedSanitizer < PersonSanitizer
integer :account_id
end
PrivilegedSanitizer.clean({:account_id => 1})
# => {:account_id => 1}
# handles type conversions
PrivilegedSanitizer.clean({:account_id => '1'})
# => {:account_id => 1}
PrivilegedSanitizer.clean({:birthday => '1986-10-06'})
# => {:birthday => Date.new(1986, 10, 6)}
# it prevents obvious errors
data = PrivilegedSanitizer.clean({:account_id => 3})
data[:account] # instead of :account_id
# => InputSanitizer::KeyNotAllowedError: Key not allowed: account
# supports custom value converters
class SomethingSanitizer < InputSanitizer::Sanitizer
custom :backward, :converter => lambda { |v| v.reverse }
integer :version
custom :name, :provide => :version, :converter => lambda { |name, version|
version < 3 ? name.downcase : name
}
end
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Added some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request