Sha256: a08f20fff911d244c4015f31244f29ee1e2efc4a2938a4d0f954777642262d56

Contents?: true

Size: 1.08 KB

Versions: 1

Compression:

Stored size: 1.08 KB

Contents

require 'yaml'

module Ciuchcia

  class Profanity
    @@data_file = nil
    
    def self.vulgar_words
      YAML.load_file(@@data_file || File.join(File.expand_path(File.dirname(__FILE__)),'..','..','config','vulgar_words.yml' ))
    end

    def self.set_data_file(path)
      @@data_file = path
    end
  
    def self.bad_word?(word)
      vulgar_words.include? word
    end
    
    def self.check(text)

      nw = '[^A-Za-z0-9]'
      utf_letters = "\352\363\261\266\263\277\274\346\361".split('')
      ascii_letters = "eoaslzzcn".split('')
      
      utf_or_ascii = Proc.new do |l|
        if utf_letters.include?(l)
          "(l|#{ascii_letters[utf_letters.index(l)]})"
        elsif l=='o'
          "(o|0)" # o_O
        else
          l
        end
      end
      
      vulgar_words.each do |word|                
        regexp_string = "(#{nw}|^)"+word.split('').map {|l| "#{utf_or_ascii.call l}+"}.join("#{nw}*")+"(#{nw}|$)"
        regexp = Regexp.new regexp_string,'i'
        m = text.match regexp
        return m[0].strip if m
      end
      false
    end
    

    end 
  
  end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ciuchcia-0.0.3 lib/ciuchcia/profanity.rb