diff --git a/language_filter.gemspec b/language_filter.gemspec index cecf8a1..57a72cd 100644 --- a/language_filter.gemspec +++ b/language_filter.gemspec @@ -18,6 +18,6 @@ Gem::Specification.new do |spec| spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) spec.require_paths = ["lib"] - spec.add_development_dependency "bundler", "~> 1.3" + spec.add_development_dependency "bundler" spec.add_development_dependency "rake" end diff --git a/lib/language_filter.rb b/lib/language_filter.rb index e48b1d5..8c15225 100644 --- a/lib/language_filter.rb +++ b/lib/language_filter.rb @@ -6,8 +6,8 @@ module LanguageFilter class Filter - attr_accessor :matchlist, :exceptionlist, :replacement, :creative_letters - attr_reader :creative_matchlist + attr_accessor :creative_letters + attr_reader :creative_matchlist, :matchlist, :exceptionlist, :replacement CREATIVE_BEG_REGEX = '(?<=\\s|\\A|_|\\-|\\.)' CREATIVE_END_REGEX = '(?=\\b|\\s|\\z|_|\\-|\\.)' @@ -142,7 +142,7 @@ def sanitize(text) def validate_list_content(content) case content when Array then content.all? {|c| c.class == String} || raise(LanguageFilter::EmptyContentList.new("List content array is empty.")) - when String then File.exists?(content) || raise(LanguageFilter::UnkownContentFile.new("List content file \"#{content}\" can't be found.")) + when String then File.exist?(content) || raise(LanguageFilter::UnkownContentFile.new("List content file \"#{content}\" can't be found.")) when Pathname then content.exist? || raise(LanguageFilter::UnkownContentFile.new("List content file \"#{content}\" can't be found.")) when Symbol then case content @@ -181,33 +181,31 @@ def load_list(filepath) def use_creative_letters(text) new_text = "" last_char = "" - first_char_done = false text.each_char do |char| if last_char != '\\' - # new_text += '[\\-_\\s\\*\\.\\,\\`\\:\\\']*' if last_char != "" and char =~ /[A-Za-z]/ and first_char_done new_text += case char.downcase - when 'a' then first_char_done = true; '(?:(?:a|@|4|\\^|/\\\\|/\\-\\\\|aye?)+)' - when 'b' then first_char_done = true; '(?:(?:b|i3|l3|13|\\|3|/3|\\\\3|3|8|6|\\u00df|p\\>|\\|\\:|[^a-z]bee+[^a-z])+)' - when 'c','k' then first_char_done = true; '(?:(?:c|\\u00a9|\\u00a2|\\(|\\[|[^a-z]cee+[^a-z]|[^a-z]see+[^a-z]|k|x|[\\|\\[\\]\\)\\(li1\\!\\u00a1][\\<\\{\\(]|[^a-z][ck]ay+[^a-z])+)' - when 'd' then first_char_done = true; '(?:(?:d|\\)|\\|\\)|\\[\\)|\\?|\\|\\>|\\|o|[^a-z]dee+[^a-z])+)' - when 'e' then first_char_done = true; '(?:(?:e|3|\\&|\\u20ac|\\u00eb|\\[\\-)+)' - when 'f' then first_char_done = true; '(?:(?:f|ph|\\u0192|[\\|\\}\\{\\\\/\\(\\)\\[\\]1il\\!][\\=\\#]|[^a-z]ef+[^a-z])+)' - when 'g' then first_char_done = true; '(?:(?:g|6|9|\\&|c\\-|\\(_\\+|[^a-z]gee+[^a-z])+)' - when 'h' then first_char_done = true; '(?:(?:h|\\#|[\\|\\}\\{\\\\/\\(\\)\\[\\]]\\-?[\\|\\}\\{\\\\/\\(\\)\\[\\]])+)' - when 'i','l' then first_char_done = true; '(?:(?:i|l|1|\\!|\\u00a1|\\||\\]|\\[|\\\\|/|[^a-z]eye[^a-z]|\\u00a3|[\\|li1\\!\\u00a1\\[\\]\\(\\)\\{\\}]_|\\u00ac|[^a-z]el+[^a-z]))' - when 'j' then first_char_done = true; '(?:(?:j|\\]|\\u00bf|_\\||_/|\\]\\\\[\\|/\\[\\]\\<\\>]|/v|\\^/|[^a-z]en+[^a-z])+)' - when 'o' then first_char_done = true; '(?:(?:o|0|\\(\\)|\\[\\]|\\u00b0|[^a-z]oh+[^a-z])+)' - when 'p' then first_char_done = true; '(?:(?:p|\\u00b6|[\\|li1\\[\\]\\!\\u00a1/\\\\][\\*o\\u00b0\\"\\>7\\^]|[^a-z]pee+[^a-z])+)' - when 'q' then first_char_done = true; '(?:(?:q|9|(?:0|\\(\\)|\\[\\])_|\\(_\\,\\)|\\<\\||[^a-z][ck]ue*|qu?eue*[^a-z])+)' - when 'r' then first_char_done = true; '(?:(?:r|[/1\\|li]?[2\\^\\?z]|\\u00ae|[^a-z]ar+[^a-z])+)' - when 's','z' then first_char_done = true; '(?:(?:s|\\$|5|\\u00a7|[^a-z]es+[^a-z]|z|2|7_|\\~/_|\\>_|\\%|[^a-z]zee+[^a-z])+)' - when 't' then first_char_done = true; '(?:(?:t|7|\\+|\\u2020|\\-\\|\\-|\\\'\\]\\[\\\')+)' - when 'u','v' then first_char_done = true; '(?:(?:u|v|\\u00b5|[\\|\\(\\)\\[\\]\\{\\}]_[\\|\\(\\)\\[\\]\\{\\}]|\\L\\||\\/|[^a-z]you[^a-z]|[^a-z]yoo+[^a-z]|[^a-z]vee+[^a-z]))' - when 'w' then first_char_done = true; '(?:(?:w|vv|\\\\/\\\\/|\\\\\\|/|\\\\\\\\\\\'|\\\'//|\\\\\\^/|\\(n\\)|[^a-z]do?u+b+l+e*[^a-z]?(?:u+|you|yoo+)[^a-z])+)' - when 'x' then first_char_done = true; '(?:(?:x|\\>\\<|\\%|\\*|\\}\\{|\\)\\(|[^a-z]e[ck]+s+[^a-z]|[^a-z]ex+[^a-z])+)' - when 'y' then first_char_done = true; '(?:(?:y|\\u00a5|j|\\\'/|[^a-z]wh?(?:y+|ie+)[^a-z])+)' + when 'a' then '(?:(?:a|@|4|\\^|/\\\\|/\\-\\\\|aye?)+)' + when 'b' then '(?:(?:b|i3|l3|13|\\|3|/3|\\\\3|3|8|6|\\u00df|p\\>|\\|\\:|[^a-z]bee+[^a-z])+)' + when 'c','k' then '(?:(?:c|\\u00a9|\\u00a2|\\(|\\[|[^a-z]cee+[^a-z]|[^a-z]see+[^a-z]|k|x|[\\|\\[\\]\\)\\(li1\\!\\u00a1][\\<\\{\\(]|[^a-z][ck]ay+[^a-z])+)' + when 'd' then '(?:(?:d|\\)|\\|\\)|\\[\\)|\\?|\\|\\>|\\|o|[^a-z]dee+[^a-z])+)' + when 'e' then '(?:(?:e|3|\\&|\\u20ac|\\u00eb|\\[\\-)+)' + when 'f' then '(?:(?:f|ph|\\u0192|[\\|\\}\\{\\\\/\\(\\)\\[\\]1il\\!][\\=\\#]|[^a-z]ef+[^a-z])+)' + when 'g' then '(?:(?:g|6|9|\\&|c\\-|\\(_\\+|[^a-z]gee+[^a-z])+)' + when 'h' then '(?:(?:h|\\#|[\\|\\}\\{\\\\/\\(\\)\\[\\]]\\-?[\\|\\}\\{\\\\/\\(\\)\\[\\]])+)' + when 'i','l' then '(?:(?:i|l|1|\\!|\\u00a1|\\||\\]|\\[|\\\\|/|[^a-z]eye[^a-z]|\\u00a3|[\\|li1\\!\\u00a1\\[\\]\\(\\)\\{\\}]_|\\u00ac|[^a-z]el+[^a-z]))' + when 'j' then '(?:(?:j|\\]|\\u00bf|_\\||_/|\\]\\\\[\\|/\\[\\]\\<\\>]|/v|\\^/|[^a-z]en+[^a-z])+)' + when 'o' then '(?:(?:o|0|\\(\\)|\\[\\]|\\u00b0|[^a-z]oh+[^a-z])+)' + when 'p' then '(?:(?:p|\\u00b6|[\\|li1\\[\\]\\!\\u00a1/\\\\][\\*o\\u00b0\\"\\>7\\^]|[^a-z]pee+[^a-z])+)' + when 'q' then '(?:(?:q|9|(?:0|\\(\\)|\\[\\])_|\\(_\\,\\)|\\<\\||[^a-z][ck]ue*|qu?eue*[^a-z])+)' + when 'r' then '(?:(?:r|[/1\\|li]?[2\\^\\?z]|\\u00ae|[^a-z]ar+[^a-z])+)' + when 's','z' then '(?:(?:s|\\$|5|\\u00a7|[^a-z]es+[^a-z]|z|2|7_|\\~/_|\\>_|\\%|[^a-z]zee+[^a-z])+)' + when 't' then '(?:(?:t|7|\\+|\\u2020|\\-\\|\\-|\\\'\\]\\[\\\')+)' + when 'u','v' then '(?:(?:u|v|\\u00b5|[\\|\\(\\)\\[\\]\\{\\}]_[\\|\\(\\)\\[\\]\\{\\}]|\\L\\||\\/|[^a-z]you[^a-z]|[^a-z]yoo+[^a-z]|[^a-z]vee+[^a-z]))' + when 'w' then '(?:(?:w|vv|\\\\/\\\\/|\\\\\\|/|\\\\\\\\\\\'|\\\'//|\\\\\\^/|\\(n\\)|[^a-z]do?u+b+l+e*[^a-z]?(?:u+|you|yoo+)[^a-z])+)' + when 'x' then '(?:(?:x|\\>\\<|\\%|\\*|\\}\\{|\\)\\(|[^a-z]e[ck]+s+[^a-z]|[^a-z]ex+[^a-z])+)' + when 'y' then '(?:(?:y|\\u00a5|j|\\\'/|[^a-z]wh?(?:y+|ie+)[^a-z])+)' else char end elsif char.downcase == 'w' then diff --git a/test/lib/language_filter/methods_test.rb b/test/lib/language_filter/methods_test.rb index 6966172..3e8002b 100644 --- a/test/lib/language_filter/methods_test.rb +++ b/test/lib/language_filter/methods_test.rb @@ -4,12 +4,12 @@ it "must be successfully created with correct defaults" do filter = LanguageFilter::Filter.new - filter.must_be_kind_of LanguageFilter::Filter + _(filter).must_be_kind_of LanguageFilter::Filter valid_non_empty_list? filter.matchlist - filter.exceptionlist.must_be_kind_of Array - filter.exceptionlist.must_be_empty + _(filter.exceptionlist).must_be_kind_of Array + _(filter.exceptionlist).must_be_empty filter.exceptionlist.each {|list_item| list_item.must_be_kind_of String} - filter.creative_letters.must_be :==, false + _(filter.creative_letters).must_be :==, false valid_non_empty_list? filter.creative_matchlist end @@ -18,14 +18,14 @@ # pre-packaged lists [:hate,:profanity,:sex,:violence].each do |list| filter = LanguageFilter::Filter.new matchlist: list - filter.must_be_kind_of LanguageFilter::Filter + _(filter).must_be_kind_of LanguageFilter::Filter valid_non_empty_list? filter.matchlist end # array of strings list = ['blah\\w*','test'] filter = LanguageFilter::Filter.new matchlist: list valid_non_empty_list? filter.matchlist - filter.matchlist.must_be :==, list + _(filter.matchlist).must_be :==, list # filepath list = File.dirname(__FILE__) + '/../../../config/matchlists/profanity.txt' filter = LanguageFilter::Filter.new matchlist: list @@ -35,13 +35,13 @@ # pre-packaged lists [:hate,:profanity,:sex,:violence].each do |list| filter = LanguageFilter::Filter.new exceptionlist: list - filter.must_be_kind_of LanguageFilter::Filter + _(filter).must_be_kind_of LanguageFilter::Filter valid_non_empty_list? filter.exceptionlist end # array of strings list = ['blah\\w*','test'] filter = LanguageFilter::Filter.new exceptionlist: list - filter.exceptionlist.must_be_kind_of Array + _(filter.exceptionlist).must_be_kind_of Array valid_non_empty_list? filter.exceptionlist # filepath list = File.dirname(__FILE__) + '/../../../config/matchlists/profanity.txt' @@ -51,11 +51,11 @@ # CREATIVE_LETTERS [true,false].each do |creative_boolean| filter = LanguageFilter::Filter.new creative_letters: creative_boolean - filter.creative_letters.must_be :==, creative_boolean + _(filter.creative_letters).must_be :==, creative_boolean valid_non_empty_list? filter.creative_matchlist - filter.creative_matchlist.must_be :!=, filter.matchlist - filter.creative_matchlist.size.must_be :==, filter.matchlist.size - filter.creative_matchlist.join("").size.must_be :>, filter.matchlist.join("").size + _(filter.creative_matchlist).must_be :!=, filter.matchlist + _(filter.creative_matchlist.size).must_be :==, filter.matchlist.size + _(filter.creative_matchlist.join("").size).must_be :>, filter.matchlist.join("").size end end diff --git a/test/lib/language_filter/version_test.rb b/test/lib/language_filter/version_test.rb index bcf69bb..f6c035f 100644 --- a/test/lib/language_filter/version_test.rb +++ b/test/lib/language_filter/version_test.rb @@ -3,7 +3,7 @@ describe LanguageFilter do it "must be defined" do - LanguageFilter::VERSION.wont_be_nil + _(LanguageFilter::VERSION).wont_be_nil end end \ No newline at end of file diff --git a/test/test_helper.rb b/test/test_helper.rb index 909e95e..cbc2fdc 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -3,9 +3,9 @@ require File.expand_path('../../lib/language_filter.rb', __FILE__) def valid_non_empty_list?(list) - list.must_be_kind_of Array - list.wont_be_empty - list.each {|list_item| list_item.must_be_kind_of String} + _(list).must_be_kind_of Array + _(list).wont_be_empty + list.each {|list_item| _(list_item).must_be_kind_of String} end def test_against_word_lists @@ -68,7 +68,7 @@ def test_against_word_lists }, { name: :sex, - results: ["sex","sexual","sexes","Sex","Sexual","cock","cocks","Cock","Dick","DICK","ass","Ass","penis","prick","pricks","manhood","breast","breasts","cleavage","muff","Homo","homo","slut","whore","gay","Gay","dyke","Dyke","dykes","fagots","fagged","faggots","puberty"] + results: ["sex","sexual","sexes","Sex","Sexual","cock","cocks","Cock","Dick","DICK","ass","Ass","penis","prick","pricks","manhood","breast","breasts","cleavage","muff","Homo","homo","slut","whore","gay","Gay","dyke","Dyke","dykes","fagots","fagged","faggots","cum","Cum","puberty"] }, { name: :violence, @@ -86,7 +86,7 @@ def test_against_word_lists }, { name: :sex, - results: ["sex","sexual","sexes","Sex","Sexual","cock","cocks","Cock","Dick","DICK","ass","Ass","penis","prick","pricks","manhood","breast","breasts","cleavage","muff","Kunti","kunt","Homo","homo","slut","whore","gay","Gay","dyke","Dyke","dykes","fagots","fagged","faggots","puberty"] + results: ["sex","sexual","sexes","Sex","Sexual","cock","cocks","Cock","Dick","DICK","ass","Ass","penis","prick","pricks","manhood","breast","breasts","cleavage","muff","Kunti","kunt","Homo","homo","slut","whore","gay","Gay","dyke","Dyke","dykes","fagots","fagged","faggots","cum","Cum","puberty"] }, { name: :violence, @@ -99,12 +99,12 @@ def test_against_word_lists word_lists.each do |wordlist| wordlist[:expected][:normal].each do |matchlist| filter = LanguageFilter::Filter.new(matchlist: matchlist[:name], creative_letters: false) - filter.matched(wordlist[:contents]).must_be :==, matchlist[:results], + _(filter.matched(wordlist[:contents])).must_be :==, matchlist[:results], "expected\n#{filter.matched(wordlist[:contents])}\nto be\n#{matchlist[:results]}\nwhile testing normal #{matchlist[:name]} against #{wordlist[:name]}" end wordlist[:expected][:creative].each do |matchlist| filter = LanguageFilter::Filter.new(matchlist: matchlist[:name], creative_letters: true) - filter.matched(wordlist[:contents]).must_be :==, matchlist[:results], + _(filter.matched(wordlist[:contents])).must_be :==, matchlist[:results], "expected\n#{filter.matched(wordlist[:contents])}\nto be\n#{matchlist[:results]}\nwhile testing creative #{matchlist[:name]} against #{wordlist[:name]}" end end