1
2
3
4
5
6
7
8
9
10
11
12
13
class String
  def clean
    patterns = [
      {:pattern => /[\s+|\/|\\]/,   :replacement => '_' }, # replace whitespace and slashes with underscores
      {:pattern => /[^a-z|0-9|_]/,  :replacement => ''  }, # remove non alphanumeric/underscore characters
      {:pattern => /__*/,           :replacement => '_' }  # remove multiple underscores
    ]
    
    cleaned = self.underscore
    patterns.each { |set| cleaned.gsub!(set[:pattern], set[:replacement]) }
    cleaned
  end
end