kivanio (owner)

Fork Of

Revisions

gist: 227916 Download_button fork
public
Public Clone URL: git://gist.github.com/227916.git
Embed All Files: show embed
Rack::Censor.rb #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
module Rack
  class Censor
    
    WORDS = [ 'shit', 'fuck', 'cock', 'cunt', 'cameltoe', 'mooseknuckle' ].map { |w| Regexp.new(w, Regexp::IGNORECASE) }.freeze
 
    attr_reader :options, :request
    
    def initialize(app, options={})
      @app, @options = app, {
        :replacement => '*****'
      }.merge(options)
    end
    
    def call(env)
      @request = Rack::Request.new(env)
      censor_input
      @app.call(env)
    end
    
    
    private
    
    def censor_input
      form_input = request.env['rack.request.form_hash']
      
      form_input.each do |name,value|
        WORDS.each do |word|
          request.env['rack.request.form_hash'][name].gsub!(word, options[:replacement]) if value =~ word
        end
      end if form_input
    end
 
  end
end