zaarly-swearjar 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ Gemfile.lock
2
+ pkg
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source :rubygems
2
+
3
+ gemspec
data/README.rdoc ADDED
@@ -0,0 +1,20 @@
1
+ = Zaarly Swearjar
2
+
3
+ Simple profanity detection with content analysis.
4
+
5
+ == Installation
6
+
7
+ gem install swearjar
8
+
9
+ == Usage
10
+
11
+ require 'swearjar'
12
+
13
+ Swearjar.default.profane?('jim henson has a massive hard on he is gonna use to fuck everybody')
14
+ << true
15
+
16
+ Swearjar.default.scorecard('jim henson has a massive hard on he is gonna use to fuck everybody')
17
+ << {:sexual => 2}
18
+
19
+ Swearjar.default.censor('jim henson has a massive hard on he is gonna use to fuck everybody')
20
+ << 'jim henson has a massive **** ** he is gonna use to **** everybody'
data/Rakefile ADDED
@@ -0,0 +1,13 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rake'
4
+
5
+ require 'rspec/core/rake_task'
6
+ RSpec::Core::RakeTask.new(:spec) do |spec|
7
+ spec.pattern = 'spec/**/*_spec.rb'
8
+ spec.rspec_opts = ['--backtrace']
9
+ end
10
+
11
+ task :default => :spec
12
+
13
+ Bundler::GemHelper.install_tasks
data/lib/config/en.yml ADDED
@@ -0,0 +1,440 @@
1
+ regex:
2
+ 'hard ons?\b': ["sexual"]
3
+ 'jerk off\b': ["sexual"]
4
+ 'pissed off\b': ["inappropriate"]
5
+ 'sand nigger': ["discriminatory"]
6
+ simple:
7
+ "anus": ["sexual"]
8
+ "arse": ["insult"]
9
+ "arsehole": ["insult"]
10
+ "ass": ["sexual", "insult"]
11
+ "ass-hat": ["insult"]
12
+ "ass-pirate": ["discriminatory"]
13
+ "assbag": ["insult"]
14
+ "assbandit": ["discriminatory"]
15
+ "assbanger": ["discriminatory"]
16
+ "assbite": ["insult"]
17
+ "assclown": ["sexual"]
18
+ "asscock": ["insult"]
19
+ "asscracker": ["sexual"]
20
+ "assface": ["sexual"]
21
+ "assfuck": ["sexual"]
22
+ "assfucker": ["discriminatory"]
23
+ "assgoblin": ["discriminatory"]
24
+ "asshat": ["sexual"]
25
+ "asshead": ["insult"]
26
+ "asshole": ["insult"]
27
+ "asshopper": ["discriminatory"]
28
+ "assjacker": ["discriminatory"]
29
+ "asslick": ["insult"]
30
+ "asslicker": ["insult"]
31
+ "assmonkey": ["insult"]
32
+ "assmunch": ["insult"]
33
+ "assmuncher": ["sexual"]
34
+ "assnigger": ["discriminatory"]
35
+ "asspirate": ["discriminatory"]
36
+ "assshit": ["insult"]
37
+ "assshole": ["sexual"]
38
+ "asssucker": ["insult"]
39
+ "asswad": ["sexual"]
40
+ "asswipe": ["sexual"]
41
+ "bampot": ["insult"]
42
+ "bastard": ["insult"]
43
+ "beaner": ["discriminatory"]
44
+ "beastial": ["sexual"]
45
+ "beastiality": ["sexual"]
46
+ "beastility": ["sexual"]
47
+ "bestial": ["sexual"]
48
+ "bestiality": ["sexual"]
49
+ "bitch": ["insult"]
50
+ "bitchass": ["insult"]
51
+ "bitcher": ["insult"]
52
+ "bitchin": ["inappropriate"]
53
+ "bitching": ["inappropriate"]
54
+ "bitchtit": ["discriminatory"]
55
+ "bitchy": ["insult"]
56
+ "blow job": ["sexual"]
57
+ "blowjob": ["sexual"]
58
+ "bollocks": ["sexual"]
59
+ "bollox": ["sexual"]
60
+ "boner": ["sexual"]
61
+ "brotherfucker": ["discriminatory"]
62
+ "bullshit": ["inappropriate"]
63
+ "bullshit": ["inappropriate"]
64
+ "bumblefuck": ["discriminatory"]
65
+ "butt plug": ["sexual"]
66
+ "butt-pirate": ["discriminatory"]
67
+ "buttfucka": ["discriminatory"]
68
+ "buttfucker": ["discriminatory"]
69
+ "camel toe": ["sexual"]
70
+ "carpetmuncher": ["discriminatory"]
71
+ "chinc": ["discriminatory"]
72
+ "chink": ["discriminatory"]
73
+ "choad": ["sexual"]
74
+ "chode": ["sexual"]
75
+ "clit": ["sexual"]
76
+ "clitface": ["insult"]
77
+ "clitfuck": ["sexual"]
78
+ "clusterfuck": ["inappropriate"]
79
+ "cock": ["sexual"]
80
+ "cockass": "Jerk"
81
+ "cockbite": ["insult"]
82
+ "cockburger": ["insult"]
83
+ "cockface": ["insult"]
84
+ "cockfucker": ["insult"]
85
+ "cockhead": ["insult"]
86
+ "cockjockey": ["discriminatory"]
87
+ "cockknoker": ["discriminatory"]
88
+ "cockmaster": ["discriminatory"]
89
+ "cockmongler": ["discriminatory"]
90
+ "cockmongruel": ["discriminatory"]
91
+ "cockmonkey": ["insult"]
92
+ "cockmuncher": ["discriminatory"]
93
+ "cocknose": ["insult"]
94
+ "cocknugget": ["insult"]
95
+ "cockshit": ["insult"]
96
+ "cocksmith": ["discriminatory"]
97
+ "cocksmoker": ["discriminatory"]
98
+ "cocksuck": ["sexual"]
99
+ "cocksucked": ["sexual"]
100
+ "cocksucker": ["discriminatory", "sexual"]
101
+ "cocksucking": ["sexual", "discriminatory"]
102
+ "cocksucks": ["sexual", "discriminatory"]
103
+ "coochie": ["sexual"]
104
+ "coochy": ["sexual"]
105
+ "coon": ["discriminatory"]
106
+ "cooter": ["sexual"]
107
+ "cracker": ["discriminatory"]
108
+ "cum": ["sexual"]
109
+ "cumbubble": ["insult"]
110
+ "cumdumpster": ["sexual"]
111
+ "cumguzzler": ["discriminatory"]
112
+ "cumjockey": ["discriminatory"]
113
+ "cummer": ["sexual"]
114
+ "cumming": ["sexual"]
115
+ "cumshot": ["sexual"]
116
+ "cumslut": ["sexual", "insult"]
117
+ "cumtart": ["insult"]
118
+ "cunillingus": ["sexual"]
119
+ "cunnie": ["sexual"]
120
+ "cunnilingus": ["sexual"]
121
+ "cunnilingus": ["sexual"]
122
+ "cunt": ["insult", "sexual"]
123
+ "cuntface": ["insult"]
124
+ "cunthole": ["sexual"]
125
+ "cuntlick": ["sexual"]
126
+ "cuntlicker": ["sexual", "discriminatory"]
127
+ "cuntlicking": ["sexual"]
128
+ "cuntrag": ["insult"]
129
+ "cuntslut": ["insult"]
130
+ "cyberfuc": ["sexual"]
131
+ "cyberfuck": ["sexual"]
132
+ "cyberfucked": ["sexual"]
133
+ "cyberfucker": ["sexual"]
134
+ "cyberfucking": ["sexual"]
135
+ "dago": ["discriminatory"]
136
+ "damn": ["inappropriate"]
137
+ "deggo": ["discriminatory"]
138
+ "dick": ["sexual", "insult"]
139
+ "dickbag": ["insult"]
140
+ "dickbeaters": ["sexual"]
141
+ "dickface": ["insult"]
142
+ "dickfuck": ["insult"]
143
+ "dickfucker": ["discriminatory"]
144
+ "dickhead": ["insult"]
145
+ "dickhole": ["sexual"]
146
+ "dickjuice": ["sexual"]
147
+ "dickmilk": ["sexual"]
148
+ "dickmonger": ["discriminatory"]
149
+ "dickslap": ["sexual"]
150
+ "dicksucker": ["discriminatory"]
151
+ "dickwad": ["insult"]
152
+ "dickweasel": ["insult"]
153
+ "dickweed": ["insult"]
154
+ "dickwod": ["insult"]
155
+ "dike": ["discriminatory"]
156
+ "dildo": ["sexual"]
157
+ "dink": ["insult", "sexual"]
158
+ "dipshit": ["insult"]
159
+ "doochbag": ["insult"]
160
+ "dookie": ["inappropriate"]
161
+ "douche": ["insult"]
162
+ "douche-fag": ["insult"]
163
+ "douchebag": ["insult"]
164
+ "douchewaffle": ["discriminatory"]
165
+ "dumass": ["insult"]
166
+ "dumb ass": ["insult"]
167
+ "dumbass": ["insult"]
168
+ "dumbfuck": ["insult"]
169
+ "dumbshit": ["insult"]
170
+ "dumshit": ["insult"]
171
+ "dyke": ["discriminatory"]
172
+ "ejaculate": ["sexual"]
173
+ "ejaculated": ["sexual"]
174
+ "ejaculates": ["sexual"]
175
+ "ejaculating": ["sexual"]
176
+ "ejaculation": ["sexual"]
177
+ "fag": ["discriminatory"]
178
+ "fagbag": ["discriminatory"]
179
+ "fagfucker": ["discriminatory"]
180
+ "fagging": ["discriminatory"]
181
+ "faggit": ["discriminatory"]
182
+ "faggot": ["discriminatory"]
183
+ "faggot": ["discriminatory"]
184
+ "faggotcock": ["discriminatory"]
185
+ "faggs": ["discriminatory"]
186
+ "fagot": ["discriminatory"]
187
+ "fags": ["discriminatory"]
188
+ "fagtard": ["discriminatory"]
189
+ "fart": ["inappropriate"]
190
+ "farted": ["inappropriate"]
191
+ "farting": ["inappropriate"]
192
+ "farty": ["inappropriate"]
193
+ "fatass": ["insult"]
194
+ "felatio": ["sexual"]
195
+ "fellatio": ["sexual"]
196
+ "fellatio": ["sexual"]
197
+ "feltch": ["sexual"]
198
+ "fingerfuck": ["sexual"]
199
+ "fingerfucked": ["sexual"]
200
+ "fingerfucker": ["sexual"]
201
+ "fingerfucking": ["sexual"]
202
+ "fingerfucks": ["sexual"]
203
+ "fistfuck": ["sexual"]
204
+ "fistfucked": ["sexual"]
205
+ "fistfucker": ["sexual"]
206
+ "fistfucking": ["sexual"]
207
+ "flamer": ["discriminatory"]
208
+ "fuck": ["sexual"]
209
+ "fuckass": ["insult"]
210
+ "fuckbag": ["insult"]
211
+ "fuckboy": ["insult"]
212
+ "fuckbrain": ["insult"]
213
+ "fuckbutt": ["sexual"]
214
+ "fucked": ["sexual"]
215
+ "fucker": ["sexual", "insult"]
216
+ "fuckersucker": ["insult"]
217
+ "fuckface": ["insult"]
218
+ "fuckhead": ["sexual"]
219
+ "fuckhole": ["insult"]
220
+ "fuckin": ["sexual"]
221
+ "fucking": ["sexual"]
222
+ "fuckme": ["sexual"]
223
+ "fucknut": ["insult"]
224
+ "fucknutt": ["insult"]
225
+ "fuckoff": ["insult"]
226
+ "fuckstick": ["sexual"]
227
+ "fucktard": ["insult"]
228
+ "fuckup": ["insult"]
229
+ "fuckwad": ["insult"]
230
+ "fuckwit": ["insult"]
231
+ "fuckwitt": ["insult"]
232
+ "fudgepacker": ["discriminatory"]
233
+ "fuk": ["sexual"]
234
+ "gangbang": ["sexual"]
235
+ "gangbanged": ["sexual"]
236
+ "gay": ["discriminatory"]
237
+ "gayass": ["sexual"]
238
+ "gaybob": ["discriminatory"]
239
+ "gaydo": ["discriminatory"]
240
+ "gayfuck": ["discriminatory"]
241
+ "gayfuckist": ["discriminatory"]
242
+ "gaylord": ["discriminatory"]
243
+ "gaysex": ["discriminatory"]
244
+ "gaytard": ["discriminatory"]
245
+ "gaywad": ["discriminatory"]
246
+ "goddamn": ["inappropriate", "blasphemy"]
247
+ "goddamn": ["inappropriate", "blasphemy"]
248
+ "goddamnit": ["inappropriate", "blasphemy"]
249
+ "gooch": ["sexual"]
250
+ "gook": ["discriminatory"]
251
+ "gringo": ["discriminatory"]
252
+ "guido": ["discriminatory"]
253
+ "handjob": ["sexual"]
254
+ "hardcoresex": ["sexual"]
255
+ "heeb": ["discriminatory"]
256
+ "hell": ["inappropriate"]
257
+ "hell": ["inappropriate"]
258
+ "ho": ["discriminatory"]
259
+ "hoe": ["discriminatory"]
260
+ "homo": ["discriminatory"]
261
+ "homodumbshit": ["insult"]
262
+ "honkey": ["discriminatory"]
263
+ "horniest": ["sexual"]
264
+ "horny": ["sexual"]
265
+ "hotsex": ["sexual"]
266
+ "humping": ["sexual"]
267
+ "jackass": ["insult"]
268
+ "jap": ["discriminatory"]
269
+ "jigaboo": ["discriminatory"]
270
+ "jism": ["sexual"]
271
+ "jiz": ["sexual"]
272
+ "jizm": ["sexual"]
273
+ "jizz": ["sexual"]
274
+ "jungle bunny": ["discriminatory"]
275
+ "junglebunny": ["discriminatory"]
276
+ "kike": ["discriminatory"]
277
+ "kock": ["sexual"]
278
+ "kondum": ["sexual"]
279
+ "kooch": ["sexual"]
280
+ "kootch": ["sexual"]
281
+ "kum": ["sexual"]
282
+ "kumer": ["sexual"]
283
+ "kummer": ["sexual"]
284
+ "kumming": ["sexual"]
285
+ "kums": ["sexual"]
286
+ "kunilingus": ["sexual"]
287
+ "kunt": ["sexual"]
288
+ "kyke": ["discriminatory"]
289
+ "lesbian": ["discriminatory"]
290
+ "lesbo": ["discriminatory"]
291
+ "lezzie": ["discriminatory"]
292
+ "lust": ["sexual"]
293
+ "lusting": ["sexual"]
294
+ "mcfagget": ["discriminatory"]
295
+ "mick": ["discriminatory"]
296
+ "minge": ["sexual"]
297
+ "mothafuck": ["sexual"]
298
+ "mothafucka": ["sexual"]
299
+ "mothafucka": ["insult"]
300
+ "mothafuckaz": ["sexual"]
301
+ "mothafucked": ["sexual"]
302
+ "mothafucker": ["sexual", "insult"]
303
+ "mothafuckin": ["sexual"]
304
+ "mothafucking": ["sexual"]
305
+ "mothafucks": ["sexual"]
306
+ "motherfuck": ["sexual"]
307
+ "motherfucked": ["sexual"]
308
+ "motherfucker": ["sexual", "insult"]
309
+ "motherfuckin": ["sexual"]
310
+ "motherfucking": ["sexual"]
311
+ "muff": ["sexual"]
312
+ "muffdiver": ["discriminatory", "sexual"]
313
+ "munging": ["sexual"]
314
+ "negro": ["discriminatory"]
315
+ "nigga": ["discriminatory"]
316
+ "nigger": ["discriminatory"]
317
+ "niglet": ["discriminatory"]
318
+ "nut sack": ["sexual"]
319
+ "nutsack": ["sexual"]
320
+ "orgasim": ["sexual"]
321
+ "orgasm": ["sexual"]
322
+ "paki": ["discriminatory"]
323
+ "panooch": ["sexual"]
324
+ "pecker": ["sexual"]
325
+ "peckerhead": ["insult"]
326
+ "penis": ["sexual"]
327
+ "penisfucker": ["discriminatory"]
328
+ "penispuffer": ["discriminatory"]
329
+ "phonesex": ["sexual"]
330
+ "phuk": ["sexual"]
331
+ "phuked": ["sexual"]
332
+ "phuking": ["sexual"]
333
+ "phukked": ["sexual"]
334
+ "phukking": ["sexual"]
335
+ "phuks": ["sexual"]
336
+ "phuq": ["sexual"]
337
+ "pis": ["sexual"]
338
+ "pises": ["sexual"]
339
+ "pisin": ["sexual"]
340
+ "pising": ["sexual"]
341
+ "pisof": ["sexual"]
342
+ "piss": ["inappropriate"]
343
+ "pissed": ["inappropriate"]
344
+ "pisser": ["sexual"]
345
+ "pisses": ["sexual"]
346
+ "pissflaps": ["sexual"]
347
+ "pissin": ["sexual"]
348
+ "pissing": ["sexual"]
349
+ "pissoff": ["sexual"]
350
+ "polesmoker": ["discriminatory"]
351
+ "pollock": ["discriminatory"]
352
+ "poon": ["sexual"]
353
+ "poonani": ["sexual"]
354
+ "poonany": ["sexual"]
355
+ "poontang": ["sexual"]
356
+ "porch monkey": ["discriminatory"]
357
+ "porchmonkey": ["discriminatory"]
358
+ "porn": ["sexual"]
359
+ "porno": ["sexual"]
360
+ "pornography": ["sexual"]
361
+ "pornos": ["sexual"]
362
+ "prick": ["sexual"]
363
+ "punanny": ["sexual"]
364
+ "punta": ["insult"]
365
+ "pusies": ["sexual", "insult"]
366
+ "pussies": ["sexual", "insult"]
367
+ "pussy": ["sexual", "insult"]
368
+ "pussylicking": ["sexual"]
369
+ "pusy": ["sexual"]
370
+ "puto": ["insult"]
371
+ "queef": ["sexual"]
372
+ "queer": ["discriminatory"]
373
+ "queerbait": ["discriminatory"]
374
+ "queerhole": ["discriminatory"]
375
+ "renob": ["sexual"]
376
+ "rimjob": ["sexual"]
377
+ "ruski": ["discriminatory"]
378
+ "sandnigger": ["discriminatory"]
379
+ "schlong": ["sexual"]
380
+ "scrote": ["sexual"]
381
+ "shit": ["sexual", "inappropriate"]
382
+ "shitass": ["insult"]
383
+ "shitbag": ["insult"]
384
+ "shitbagger": ["insult"]
385
+ "shitbrain": ["insult"]
386
+ "shitbreath": ["insult"]
387
+ "shitcunt": ["insult"]
388
+ "shitdick": ["insult"]
389
+ "shited": ["sexual"]
390
+ "shitface": ["insult"]
391
+ "shitfaced": ["inappropriate", "insult"]
392
+ "shitfull": ["sexual"]
393
+ "shithead": ["insult"]
394
+ "shithole": ["insult"]
395
+ "shithouse": ["inappropriate"]
396
+ "shiting": ["sexual"]
397
+ "shitspitter": ["sexual"]
398
+ "shitstain": ["inappropriate", "insult"]
399
+ "shitted": ["sexual"]
400
+ "shitter": ["sexual"]
401
+ "shittiest": ["inappropriate"]
402
+ "shitting": ["inappropriate"]
403
+ "shitty": ["inappropriate"]
404
+ "shity": ["sexual"]
405
+ "shiz": ["inappropriate"]
406
+ "shiznit": ["inappropriate"]
407
+ "skank": ["insult"]
408
+ "skeet": ["sexual"]
409
+ "skullfuck": ["sexual"]
410
+ "slut": ["sexual"]
411
+ "slut": ["discriminatory"]
412
+ "slutbag": ["discriminatory"]
413
+ "sluts": ["sexual"]
414
+ "smeg": ["inappropriate"]
415
+ "smut": ["sexual"]
416
+ "snatch": ["sexual"]
417
+ "spic": ["discriminatory"]
418
+ "spick": ["discriminatory"]
419
+ "splooge": ["sexual"]
420
+ "spunk": ["sexual"]
421
+ "tard": ["discriminatory"]
422
+ "testicle": ["sexual"]
423
+ "thundercunt": ["insult"]
424
+ "tit": ["sexual"]
425
+ "titfuck": ["sexual"]
426
+ "tittyfuck": ["sexual"]
427
+ "twat": ["sexual"]
428
+ "twatlips": ["insult"]
429
+ "twatwaffle": ["discriminatory"]
430
+ "unclefucker": ["discriminatory"]
431
+ "va-j-j": ["sexual"]
432
+ "vag": ["sexual"]
433
+ "vagina": ["sexual"]
434
+ "vjayjay": ["sexual"]
435
+ "wank": ["sexual"]
436
+ "wetback": ["discriminatory"]
437
+ "whore": ["insult"]
438
+ "whorebag": ["insult"]
439
+ "whoreface": ["insult"]
440
+ "wop": ["discriminatory"]
@@ -0,0 +1,32 @@
1
+ require 'yaml'
2
+ require 'fuzzy_hash'
3
+ require 'bloomfilter'
4
+
5
+ class Swearjar
6
+ class Tester
7
+
8
+ def initialize(config_file)
9
+ data = YAML.load_file
10
+
11
+ @tester = FuzzyHash.new
12
+
13
+ data['regex'].each do |pattern, type|
14
+ @tester[Regexp.new(pattern)] = type
15
+ end
16
+
17
+ data['simple'].each do |test, type|
18
+ @tester[test] = type
19
+ end
20
+
21
+ end
22
+
23
+ def scan(string, &block)
24
+ string.scan(/\b[\b]+\b/, &block)
25
+ end
26
+
27
+ def profane?(string)
28
+ scan(string) {|w| return true}
29
+ end
30
+
31
+ end
32
+ end
@@ -0,0 +1,3 @@
1
+ class Swearjar
2
+ VERSION = '0.1.0'
3
+ end
data/lib/swearjar.rb ADDED
@@ -0,0 +1,58 @@
1
+ require 'yaml'
2
+ require 'fuzzy_hash'
3
+
4
+ class Swearjar
5
+
6
+ def self.default
7
+ from_language
8
+ end
9
+
10
+ def self.from_language(language='en')
11
+ new(File.join(File.dirname(__FILE__), 'config', "#{language}.yml"))
12
+ end
13
+
14
+ attr_reader :tester, :hash
15
+
16
+ def initialize(file)
17
+ data = YAML.load_file(file)
18
+
19
+ @tester = FuzzyHash.new
20
+ @hash = {}
21
+
22
+ data['regex'].each do |pattern, type|
23
+ @tester[Regexp.new(pattern)] = type
24
+ end
25
+
26
+ data['simple'].each do |test, type|
27
+ @hash[test] = type
28
+ end
29
+
30
+ end
31
+
32
+ def scan(string, &block)
33
+ string.scan(/\b[a-zA-Z-]+\b/) do |word|
34
+ block.call(word, hash[word.downcase] || hash[word.downcase.gsub(/e?s$/,'')] )
35
+ end
36
+ if match = tester.match_with_result(string)
37
+ block.call(match.last, match.first)
38
+ end
39
+ end
40
+
41
+ def profane?(string)
42
+ scan(string) {|word, test| return true if !test.nil?}
43
+ return false
44
+ end
45
+
46
+ def scorecard(string)
47
+ scorecard = {}
48
+ scan(string) {|word, test| test.each { |type| scorecard.key?(type) ? scorecard[type] += 1 : scorecard[type] = 1} if test}
49
+ scorecard
50
+ end
51
+
52
+ def censor(string)
53
+ censored_string = string.dup
54
+ scan(string) {|word, test| censored_string.gsub!(word, block_given? ? yield(word) : word.gsub(/\S/, '*')) if test}
55
+ censored_string
56
+ end
57
+
58
+ end
@@ -0,0 +1 @@
1
+ require 'swearjar'
data/spec/spec.opts ADDED
@@ -0,0 +1,7 @@
1
+ --colour
2
+ --format
3
+ specdoc
4
+ --loadby
5
+ mtime
6
+ --reverse
7
+ --backtrace
@@ -0,0 +1 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'swearjar'))
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+
3
+ describe Swearjar do
4
+
5
+ it "should detect dirty words" do
6
+ Swearjar.default.profane?('fuck you jim henson').should be_true
7
+ end
8
+
9
+ it "should detect dirty words regardless of case" do
10
+ Swearjar.default.profane?('FuCk you jim henson').should be_true
11
+ end
12
+
13
+ it "should detect simple dirty plurals" do
14
+ Swearjar.default.profane?('jim henson had two dicks').should be_true
15
+ Swearjar.default.profane?('jim henson has two asses').should be_true
16
+ end
17
+
18
+ it "should not detect non-dirty words" do
19
+ Swearjar.default.profane?('i love you jim henson').should be_false
20
+ end
21
+
22
+ it "should give us a scorecard" do
23
+ Swearjar.default.scorecard('fuck you jim henson').should == {'sexual'=>1}
24
+ end
25
+
26
+ it "should detect multiword" do
27
+ Swearjar.default.scorecard('jim henson has a hard on').should == {'sexual'=>1}
28
+ end
29
+
30
+ it "should detect multiword plurals" do
31
+ Swearjar.default.scorecard('jim henson has a hard ons').should == {'sexual'=>1}
32
+ end
33
+
34
+ it "should censor a string" do
35
+ Swearjar.default.censor('jim henson has a massive hard on he is gonna use to fuck everybody').should == 'jim henson has a massive **** ** he is gonna use to **** everybody'
36
+ end
37
+
38
+ end
@@ -0,0 +1,37 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require File.join(File.dirname(__FILE__), 'lib', 'swearjar', 'version')
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'zaarly-swearjar'
7
+ s.version = Swearjar::VERSION
8
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
9
+ s.authors = ["Zaarly, Inc.", "Joshua Hull"]
10
+ s.summary = "Put another nickel in the swearjar. Simple profanity detection with content analysis"
11
+ s.description = "#{s.summary}."
12
+ s.email = %q{joshbuddy@gmail.com}
13
+ s.extra_rdoc_files = ['README.rdoc']
14
+ s.files = `git ls-files`.split("\n")
15
+ s.homepage = %q{http://github.com/zaarly/swearjar}
16
+ s.rdoc_options = ["--charset=UTF-8"]
17
+ s.require_paths = ["lib"]
18
+ s.rubygems_version = %q{1.3.7}
19
+ s.test_files = `git ls-files`.split("\n").select{|f| f =~ /^spec/}
20
+
21
+ # dependencies
22
+ s.add_runtime_dependency 'fuzzyhash', '~> 0.0.11'
23
+ s.add_development_dependency 'bundler'
24
+ s.add_development_dependency 'rake'
25
+ s.add_development_dependency 'rspec'
26
+
27
+ if s.respond_to? :specification_version then
28
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
29
+ s.specification_version = 3
30
+
31
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
32
+ else
33
+ end
34
+ else
35
+ end
36
+ end
37
+
metadata ADDED
@@ -0,0 +1,112 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: zaarly-swearjar
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Zaarly, Inc.
9
+ - Joshua Hull
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2011-11-09 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: fuzzyhash
17
+ requirement: &70302130398180 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ~>
21
+ - !ruby/object:Gem::Version
22
+ version: 0.0.11
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: *70302130398180
26
+ - !ruby/object:Gem::Dependency
27
+ name: bundler
28
+ requirement: &70302130396580 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: *70302130396580
37
+ - !ruby/object:Gem::Dependency
38
+ name: rake
39
+ requirement: &70302130395960 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ type: :development
46
+ prerelease: false
47
+ version_requirements: *70302130395960
48
+ - !ruby/object:Gem::Dependency
49
+ name: rspec
50
+ requirement: &70302130395180 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ type: :development
57
+ prerelease: false
58
+ version_requirements: *70302130395180
59
+ description: Put another nickel in the swearjar. Simple profanity detection with content
60
+ analysis.
61
+ email: joshbuddy@gmail.com
62
+ executables: []
63
+ extensions: []
64
+ extra_rdoc_files:
65
+ - README.rdoc
66
+ files:
67
+ - .gitignore
68
+ - Gemfile
69
+ - README.rdoc
70
+ - Rakefile
71
+ - lib/config/en.yml
72
+ - lib/swearjar.rb
73
+ - lib/swearjar/tester.rb
74
+ - lib/swearjar/version.rb
75
+ - lib/zaarly-swearjar.rb
76
+ - spec/spec.opts
77
+ - spec/spec_helper.rb
78
+ - spec/swearjar_spec.rb
79
+ - zaarly-swearjar.gemspec
80
+ homepage: http://github.com/zaarly/swearjar
81
+ licenses: []
82
+ post_install_message:
83
+ rdoc_options:
84
+ - --charset=UTF-8
85
+ require_paths:
86
+ - lib
87
+ required_ruby_version: !ruby/object:Gem::Requirement
88
+ none: false
89
+ requirements:
90
+ - - ! '>='
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ segments:
94
+ - 0
95
+ hash: -766704783701987807
96
+ required_rubygems_version: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ requirements: []
103
+ rubyforge_project:
104
+ rubygems_version: 1.8.10
105
+ signing_key:
106
+ specification_version: 3
107
+ summary: Put another nickel in the swearjar. Simple profanity detection with content
108
+ analysis
109
+ test_files:
110
+ - spec/spec.opts
111
+ - spec/spec_helper.rb
112
+ - spec/swearjar_spec.rb