lib/obscenity/base.rb in obscenity-1.0.0 vs lib/obscenity/base.rb in obscenity-1.0.1

- old
+ new

@@ -1,73 +1,74 @@ module Obscenity class Base class << self - + def blacklist @blacklist ||= set_list_content(Obscenity.config.blacklist) end - + def blacklist=(value) @blacklist = value == :default ? set_list_content(Obscenity::Config.new.blacklist) : value end - + def whitelist @whitelist ||= set_list_content(Obscenity.config.whitelist) end - + def whitelist=(value) @whitelist = value == :default ? set_list_content(Obscenity::Config.new.whitelist) : value end - + def profane?(text) return(false) unless text.to_s.size >= 3 blacklist.each do |foul| return(true) if text =~ /\b#{foul}\b/i && !whitelist.include?(foul) end false end - + def sanitize(text) return(text) unless text.to_s.size >= 3 blacklist.each do |foul| text.gsub!(/\b#{foul}\b/i, replace(foul)) unless whitelist.include?(foul) end @scoped_replacement = nil text end - + def replacement(chars) @scoped_replacement = chars self end - + def offensive(text) words = [] return(words) unless text.to_s.size >= 3 blacklist.each do |foul| words << foul if text =~ /\b#{foul}\b/i && !whitelist.include?(foul) end words.uniq end - + def replace(word) content = @scoped_replacement || Obscenity.config.replacement case content when :vowels then word.gsub(/[aeiou]/i, '*') when :stars then '*' * word.size + when :nonconsonants then word.gsub(/[^bcdfghjklmnpqrstvwxyz]/i, '*') when :default, :garbled then '$@!#%' else content end end - + private def set_list_content(list) case list when Array then list when String, Pathname then YAML.load_file( list.to_s ) else [] end end - + end end -end \ No newline at end of file +end