despamilator 0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. data/History.txt +4 -0
  2. data/Manifest.txt +44 -0
  3. data/PostInstall.txt +1 -0
  4. data/README.rdoc +107 -0
  5. data/Rakefile +33 -0
  6. data/despamilator.gemspec +42 -0
  7. data/lib/despamilator/filter/html_tags.rb +116 -0
  8. data/lib/despamilator/filter/naughty_q.rb +17 -0
  9. data/lib/despamilator/filter/numbers_and_words.rb +33 -0
  10. data/lib/despamilator/filter/script_tag.rb +13 -0
  11. data/lib/despamilator/filter.rb +52 -0
  12. data/lib/despamilator/filter_base.rb +37 -0
  13. data/lib/despamilator.rb +19 -0
  14. data/pkg/despamilator-0.1/History.txt +4 -0
  15. data/pkg/despamilator-0.1/Manifest.txt +21 -0
  16. data/pkg/despamilator-0.1/PostInstall.txt +1 -0
  17. data/pkg/despamilator-0.1/README.rdoc +107 -0
  18. data/pkg/despamilator-0.1/Rakefile +33 -0
  19. data/pkg/despamilator-0.1/despamilator.gemspec +42 -0
  20. data/pkg/despamilator-0.1/lib/despamilator/filter/html_tags.rb +116 -0
  21. data/pkg/despamilator-0.1/lib/despamilator/filter/naughty_q.rb +17 -0
  22. data/pkg/despamilator-0.1/lib/despamilator/filter/numbers_and_words.rb +33 -0
  23. data/pkg/despamilator-0.1/lib/despamilator/filter/script_tag.rb +13 -0
  24. data/pkg/despamilator-0.1/lib/despamilator/filter.rb +52 -0
  25. data/pkg/despamilator-0.1/lib/despamilator/filter_base.rb +37 -0
  26. data/pkg/despamilator-0.1/lib/despamilator.rb +19 -0
  27. data/pkg/despamilator-0.1/spec/despamilator_spec.rb +15 -0
  28. data/pkg/despamilator-0.1/spec/filters/html_tags_spec.rb +144 -0
  29. data/pkg/despamilator-0.1/spec/filters/naughty_q_spec.rb +39 -0
  30. data/pkg/despamilator-0.1/spec/filters/numbers_and_words_spec.rb +59 -0
  31. data/pkg/despamilator-0.1/spec/filters/script_tag_spec.rb +32 -0
  32. data/pkg/despamilator-0.1/spec/spec.opts +1 -0
  33. data/pkg/despamilator-0.1/spec/spec_helper.rb +10 -0
  34. data/pkg/despamilator-0.1/tasks/rspec.rake +21 -0
  35. data/pkg/despamilator-0.1.gem +0 -0
  36. data/pkg/despamilator-0.1.tgz +0 -0
  37. data/spec/despamilator_spec.rb +15 -0
  38. data/spec/filters/html_tags_spec.rb +144 -0
  39. data/spec/filters/naughty_q_spec.rb +39 -0
  40. data/spec/filters/numbers_and_words_spec.rb +59 -0
  41. data/spec/filters/script_tag_spec.rb +32 -0
  42. data/spec/spec.opts +1 -0
  43. data/spec/spec_helper.rb +10 -0
  44. data/tasks/rspec.rake +21 -0
  45. metadata +155 -0
Binary file
Binary file
@@ -0,0 +1,15 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ describe Despamilator do
4
+ before :each do
5
+ @dspam = Despamilator.new('this text is absolutely fine')
6
+ end
7
+
8
+ it "should return a zero score for fine text" do
9
+ @dspam.score.should == 0
10
+ end
11
+
12
+ it "should return no matching filter for fine text" do
13
+ @dspam.matched_by.should be_empty
14
+ end
15
+ end
@@ -0,0 +1,144 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper.rb'
2
+
3
+ context "HtmlTags" do
4
+ describe "filtering" do
5
+ [
6
+ '!--',
7
+ '!DOCTYPE',
8
+ 'a',
9
+ 'abbr',
10
+ 'acronym',
11
+ 'address',
12
+ 'applet',
13
+ 'area',
14
+ 'b',
15
+ 'base',
16
+ 'basefont',
17
+ 'bdo',
18
+ 'big',
19
+ 'blockquote',
20
+ 'body',
21
+ 'br',
22
+ 'button',
23
+ 'caption',
24
+ 'center',
25
+ 'cite',
26
+ 'code',
27
+ 'col',
28
+ 'colgroup',
29
+ 'dd',
30
+ 'del',
31
+ 'dfn',
32
+ 'dir',
33
+ 'div',
34
+ 'dl',
35
+ 'dt',
36
+ 'em',
37
+ 'fieldset',
38
+ 'font',
39
+ 'form',
40
+ 'frame',
41
+ 'frameset',
42
+ 'h1',
43
+ 'h2',
44
+ 'h3',
45
+ 'h4',
46
+ 'h5',
47
+ 'h6',
48
+ 'head',
49
+ 'hr',
50
+ 'html',
51
+ 'i',
52
+ 'iframe',
53
+ 'img',
54
+ 'input',
55
+ 'ins',
56
+ 'isindex',
57
+ 'kbd',
58
+ 'label',
59
+ 'legend',
60
+ 'li',
61
+ 'link',
62
+ 'map',
63
+ 'menu',
64
+ 'meta',
65
+ 'noframes',
66
+ 'noscript',
67
+ 'object',
68
+ 'ol',
69
+ 'optgroup',
70
+ 'option',
71
+ 'p',
72
+ 'param',
73
+ 'pre',
74
+ 'q',
75
+ 's',
76
+ 'samp',
77
+ 'select',
78
+ 'small',
79
+ 'span',
80
+ 'strike',
81
+ 'strong',
82
+ 'style',
83
+ 'sub',
84
+ 'sup',
85
+ 'table',
86
+ 'tbody',
87
+ 'td',
88
+ 'textarea',
89
+ 'tfoot',
90
+ 'th',
91
+ 'thead',
92
+ 'title',
93
+ 'tr',
94
+ 'tt',
95
+ 'u',
96
+ 'ul',
97
+ 'var',
98
+ 'xmp'
99
+ ].each do |script_tag|
100
+ [script_tag.upcase, script_tag.downcase].each do |script_tag|
101
+ [
102
+ "<#{script_tag}",
103
+ "#{script_tag}/>",
104
+ "<#{script_tag}/>",
105
+ "< #{script_tag} ",
106
+ "#{script_tag} />",
107
+ "<\n#{script_tag}\n/>",
108
+ "<\n#{script_tag} ",
109
+ "#{script_tag}\n/>",
110
+ "<\r#{script_tag}\r/>"
111
+ ].each do |script_tag|
112
+ it "should detect '#{script_tag}'" do
113
+ dspam = Despamilator.new(script_tag)
114
+ dspam.score.should == 0.3
115
+ end
116
+ end
117
+ end
118
+ end
119
+
120
+ describe 'attributes' do
121
+ before :all do
122
+ @dspam = Despamilator.new('<xmp>').matched_by.first
123
+ end
124
+
125
+ it "should have a name" do
126
+ @dspam.name.should == 'Detects HTML tags in text'
127
+ end
128
+
129
+ it "should have a description" do
130
+ @dspam.description.should == 'Searches for various HTML tags'
131
+ end
132
+
133
+ it "should have a filename" do
134
+ @dspam.filename.should == 'html_tags.rb'
135
+ end
136
+ end
137
+
138
+ describe 'bug fixes' do
139
+ it "should detect an h1" do
140
+ Despamilator.new('<h1>TITLE!!</h1>').score.should == 0.3
141
+ end
142
+ end
143
+ end
144
+ end
@@ -0,0 +1,39 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper.rb'
2
+
3
+ describe "NaughtyQ" do
4
+ it "should return a score for 1 misplaced q" do
5
+ dspam = Despamilator.new('qtu')
6
+ dspam.score.should == 0.2
7
+ end
8
+
9
+ describe 'attributes' do
10
+ before :each do
11
+ @filter = Despamilator.new('qtqt').matched_by.first
12
+ end
13
+
14
+ it "should have a filename" do
15
+ @filter.filename.should == 'naughty_q.rb'
16
+ end
17
+
18
+ it "should have a name" do
19
+ @filter.name.should == 'Naughty Q'
20
+ end
21
+
22
+ it "should have a description" do
23
+ @filter.description.should == 'Detects possible misuse of the letter Q (English language)'
24
+ end
25
+
26
+ it "should have a number of matches" do
27
+ @filter.matches.should == 2
28
+ end
29
+
30
+ it "should have a score" do
31
+ @filter.score.should == 0.4
32
+ end
33
+ end
34
+
35
+ it "should score more for 3 misplaced q's" do
36
+ dspam = Despamilator.new('qtuqsq')
37
+ dspam.score.to_s.should == 0.4.to_s
38
+ end
39
+ end
@@ -0,0 +1,59 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper.rb'
2
+
3
+ describe "NumbersAndWords" do
4
+ [1, 4, 10, 100000, '1,000,000', '1st', '2nd', '3rd', '4th', '5th', '6th', '10th', '122nd'].each do |number|
5
+ it "should return a blank for a #{number}" do
6
+ dspam = Despamilator.new(number)
7
+ dspam.score.should == 0
8
+ end
9
+ end
10
+
11
+ ['wanga x5 mool', '4ghk', 'XTHL9'].each do |string|
12
+ it "should detect suspicious number word combos such as #{string}" do
13
+ dspam = Despamilator.new(string)
14
+ dspam.score.should == 0.1
15
+ end
16
+ end
17
+
18
+ ['4wanga x5 mool', '4g6hk', 'XT7HL9', '77th8nd'].each do |string|
19
+ it "should detect multiple suspicious number word combos such as #{string}" do
20
+ dspam = Despamilator.new(string)
21
+ dspam.score.should == 0.2
22
+ end
23
+ end
24
+
25
+ [1, 2, 3, 4, 5, 6].each do |tag_no|
26
+ header_tag = "h#{tag_no}"
27
+
28
+ it "should ignore html header tag #{header_tag}" do
29
+ dspam = Despamilator.new(header_tag)
30
+ dspam.score.should == 0
31
+ end
32
+ end
33
+
34
+ describe 'attributes' do
35
+ before :each do
36
+ @filter = Despamilator.new('X5T').matched_by.first
37
+ end
38
+
39
+ it "should have a filename" do
40
+ @filter.filename.should == 'numbers_and_words.rb'
41
+ end
42
+
43
+ it "should have a name" do
44
+ @filter.name.should == 'Numbers next to words'
45
+ end
46
+
47
+ it "should have a description" do
48
+ @filter.description.should == 'Detects unusual number/word combinations'
49
+ end
50
+
51
+ it "should have a number of matches" do
52
+ @filter.matches.should == 1
53
+ end
54
+
55
+ it "should have a score" do
56
+ @filter.score.should == 0.1
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,32 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper.rb'
2
+
3
+ context "ScriptTag" do
4
+ describe "detecting various script tags" do
5
+ ['<script type="whatever">', '<script></script>', '</script>', '<script>', "<script\n>"].each do |script_tag|
6
+ [script_tag.upcase, script_tag.downcase].each do |script_tag|
7
+ it "should detect '#{script_tag}' of a script tag" do
8
+ dspam = Despamilator.new(script_tag)
9
+ dspam.score.should == 1
10
+ end
11
+ end
12
+ end
13
+ end
14
+
15
+ describe 'attributes' do
16
+ before :all do
17
+ @dspam = Despamilator.new('<script>').matched_by.first
18
+ end
19
+
20
+ it "should have a name" do
21
+ @dspam.name.should == 'Detects script tags in text'
22
+ end
23
+
24
+ it "should have a description" do
25
+ @dspam.description.should == 'Searches for variations for the HTML script tag'
26
+ end
27
+
28
+ it "should have a filename" do
29
+ @dspam.filename.should == 'script_tag.rb'
30
+ end
31
+ end
32
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1 @@
1
+ --colour
@@ -0,0 +1,10 @@
1
+ begin
2
+ require 'spec'
3
+ rescue LoadError
4
+ require 'rubygems' unless ENV['NO_RUBYGEMS']
5
+ gem 'rspec'
6
+ require 'spec'
7
+ end
8
+
9
+ $:.unshift(File.dirname(__FILE__) + '/../lib')
10
+ require 'despamilator'
data/tasks/rspec.rake ADDED
@@ -0,0 +1,21 @@
1
+ begin
2
+ require 'spec'
3
+ rescue LoadError
4
+ require 'rubygems' unless ENV['NO_RUBYGEMS']
5
+ require 'spec'
6
+ end
7
+ begin
8
+ require 'spec/rake/spectask'
9
+ rescue LoadError
10
+ puts <<-EOS
11
+ To use rspec for testing you must install rspec gem:
12
+ gem install rspec
13
+ EOS
14
+ exit(0)
15
+ end
16
+
17
+ desc "Run the specs under spec/models"
18
+ Spec::Rake::SpecTask.new do |t|
19
+ t.spec_opts = ['--options', "spec/spec.opts"]
20
+ t.spec_files = FileList['spec/**/*_spec.rb']
21
+ end
metadata ADDED
@@ -0,0 +1,155 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: despamilator
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 2
8
+ version: "0.2"
9
+ platform: ruby
10
+ authors:
11
+ - Stephen Hardisty
12
+ autorequire:
13
+ bindir: bin
14
+ cert_chain: []
15
+
16
+ date: 2010-03-28 00:00:00 +11:00
17
+ default_executable:
18
+ dependencies:
19
+ - !ruby/object:Gem::Dependency
20
+ name: rubyforge
21
+ prerelease: false
22
+ requirement: &id001 !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ segments:
27
+ - 2
28
+ - 0
29
+ - 3
30
+ version: 2.0.3
31
+ type: :development
32
+ version_requirements: *id001
33
+ - !ruby/object:Gem::Dependency
34
+ name: gemcutter
35
+ prerelease: false
36
+ requirement: &id002 !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ segments:
41
+ - 0
42
+ - 5
43
+ - 0
44
+ version: 0.5.0
45
+ type: :development
46
+ version_requirements: *id002
47
+ - !ruby/object:Gem::Dependency
48
+ name: hoe
49
+ prerelease: false
50
+ requirement: &id003 !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ segments:
55
+ - 2
56
+ - 5
57
+ - 0
58
+ version: 2.5.0
59
+ type: :development
60
+ version_requirements: *id003
61
+ description: |-
62
+ Despamilator is a plugin based spam detector designed for use on your web forms borne out of two annoyances:
63
+ Spam being submitted in my web forms AND CAPTCHAS being intrusive. Despamilator will apply
64
+ some commonly used heuristics from the world of anti-spam to help you decide whether your users are human or machine.
65
+ email:
66
+ - moowahaha@hotmail.com
67
+ executables: []
68
+
69
+ extensions: []
70
+
71
+ extra_rdoc_files:
72
+ - History.txt
73
+ - Manifest.txt
74
+ - PostInstall.txt
75
+ - pkg/despamilator-0.1/History.txt
76
+ - pkg/despamilator-0.1/Manifest.txt
77
+ - pkg/despamilator-0.1/PostInstall.txt
78
+ files:
79
+ - History.txt
80
+ - Manifest.txt
81
+ - PostInstall.txt
82
+ - README.rdoc
83
+ - Rakefile
84
+ - despamilator.gemspec
85
+ - lib/despamilator.rb
86
+ - lib/despamilator/filter.rb
87
+ - lib/despamilator/filter/html_tags.rb
88
+ - lib/despamilator/filter/naughty_q.rb
89
+ - lib/despamilator/filter/numbers_and_words.rb
90
+ - lib/despamilator/filter/script_tag.rb
91
+ - lib/despamilator/filter_base.rb
92
+ - pkg/despamilator-0.1.gem
93
+ - pkg/despamilator-0.1.tgz
94
+ - pkg/despamilator-0.1/History.txt
95
+ - pkg/despamilator-0.1/Manifest.txt
96
+ - pkg/despamilator-0.1/PostInstall.txt
97
+ - pkg/despamilator-0.1/README.rdoc
98
+ - pkg/despamilator-0.1/Rakefile
99
+ - pkg/despamilator-0.1/despamilator.gemspec
100
+ - pkg/despamilator-0.1/lib/despamilator.rb
101
+ - pkg/despamilator-0.1/lib/despamilator/filter.rb
102
+ - pkg/despamilator-0.1/lib/despamilator/filter/html_tags.rb
103
+ - pkg/despamilator-0.1/lib/despamilator/filter/naughty_q.rb
104
+ - pkg/despamilator-0.1/lib/despamilator/filter/numbers_and_words.rb
105
+ - pkg/despamilator-0.1/lib/despamilator/filter/script_tag.rb
106
+ - pkg/despamilator-0.1/lib/despamilator/filter_base.rb
107
+ - pkg/despamilator-0.1/spec/despamilator_spec.rb
108
+ - pkg/despamilator-0.1/spec/filters/html_tags_spec.rb
109
+ - pkg/despamilator-0.1/spec/filters/naughty_q_spec.rb
110
+ - pkg/despamilator-0.1/spec/filters/numbers_and_words_spec.rb
111
+ - pkg/despamilator-0.1/spec/filters/script_tag_spec.rb
112
+ - pkg/despamilator-0.1/spec/spec.opts
113
+ - pkg/despamilator-0.1/spec/spec_helper.rb
114
+ - pkg/despamilator-0.1/tasks/rspec.rake
115
+ - spec/despamilator_spec.rb
116
+ - spec/filters/html_tags_spec.rb
117
+ - spec/filters/naughty_q_spec.rb
118
+ - spec/filters/numbers_and_words_spec.rb
119
+ - spec/filters/script_tag_spec.rb
120
+ - spec/spec.opts
121
+ - spec/spec_helper.rb
122
+ - tasks/rspec.rake
123
+ has_rdoc: true
124
+ homepage: http://github.com/moowahaha/despamliator
125
+ licenses: []
126
+
127
+ post_install_message: PostInstall.txt
128
+ rdoc_options:
129
+ - --main
130
+ - README.rdoc
131
+ require_paths:
132
+ - lib
133
+ required_ruby_version: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ segments:
138
+ - 0
139
+ version: "0"
140
+ required_rubygems_version: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ segments:
145
+ - 0
146
+ version: "0"
147
+ requirements: []
148
+
149
+ rubyforge_project: despamilator
150
+ rubygems_version: 1.3.6
151
+ signing_key:
152
+ specification_version: 3
153
+ summary: "Despamilator is a plugin based spam detector designed for use on your web forms borne out of two annoyances: Spam being submitted in my web forms AND CAPTCHAS being intrusive"
154
+ test_files: []
155
+