stop_forum_spam 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,10 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ require 'httparty'
5
+ require 'stop_forum_spam/spammer'
6
+
7
+
8
+ module StopForumSpam
9
+ VERSION = '0.0.1'
10
+ end
@@ -0,0 +1,38 @@
1
+ module StopForumSpam
2
+ class Spammer
3
+ include HTTParty
4
+ format :xml
5
+ base_uri("http://stopforumspam.com:80")
6
+
7
+ attr_reader :type, :id, :frequency, :last_seen
8
+
9
+ def initialize(id)
10
+ @id = id
11
+
12
+ if @id.match(/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/)
13
+ @type = 'ip'
14
+ elsif @id.match(/.*@.*/)
15
+ @type = 'email'
16
+ else
17
+ @type = 'username'
18
+ end
19
+
20
+ @frequency = response['response']["frequency"]
21
+ @last_seen = response['response']["lastseen"]
22
+ @appears = response['response']['appears'] == 'yes' ? true : false
23
+ end
24
+
25
+ def appears?
26
+ @appears
27
+ end
28
+
29
+ def self.is_spammer?(id)
30
+ StopForumSpam::Spammer.new(id).appears?
31
+ end
32
+
33
+ private
34
+ def response
35
+ @response ||= self.class.get('/api', :query => {@type.to_sym => @id})
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,4 @@
1
+ require 'spec'
2
+ require 'fakeweb'
3
+
4
+ require File.join(File.dirname(__FILE__), '..', 'lib', 'stop_forum_spam')
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+
3
+ describe StopForumSpam::Spammer do
4
+
5
+ it "should initialize a spammer by ip" do
6
+ FakeWeb.register_uri(:get, "http://stopforumspam.com/api?username=127.0.0.1",
7
+ :string => "<response success='true'><type>ip</type><appears>yes</appears><frequency>10</frequency></response>")
8
+ spammer = StopForumSpam::Spammer.new('127.0.0.1')
9
+ end
10
+
11
+ it 'should initialize a spammer by email' do
12
+ FakeWeb.register_uri(:get, "http://stopforumspam.com/api?username=test@tester.com",
13
+ :string => "<response success='true'><type>email</type><appears>yes</appears><frequency>10</frequency></response>")
14
+ spammer = StopForumSpam::Spammer.new('test@tester.com')
15
+ spammer.type.should == 'email'
16
+ end
17
+
18
+ it 'should initialize a spammer by username' do
19
+ FakeWeb.register_uri(:get, "http://stopforumspam.com/api?username=testuser",
20
+ :string => "<response success='true'><type>username</type><appears>yes</appears><frequency>10</frequency></response>")
21
+ spammer = StopForumSpam::Spammer.new('testuser')
22
+ spammer.type.should == 'username'
23
+ end
24
+
25
+ it 'should have attributes from the response' do
26
+ FakeWeb.register_uri(:get, "http://stopforumspam.com/api?ip=127.0.0.1",
27
+ :string => "<response success='true'><type>ip</type><appears>yes</appears><lastseen>2009-04-16 23:11:19</lastseen><frequency>41</frequency></response>")
28
+ spammer = StopForumSpam::Spammer.new('127.0.0.1')
29
+ spammer.type.should == "ip"
30
+ spammer.appears?.should be_true
31
+ spammer.last_seen.should == "2009-04-16 23:11:19"
32
+ spammer.frequency == '41'
33
+ end
34
+
35
+ it 'should have an id' do
36
+ FakeWeb.register_uri(:get, "http://stopforumspam.com/api?ip=127.0.0.1",
37
+ :string => "<response success='true'><type>ip</type><appears>yes</appears><lastseen>2009-04-16 23:11:19</lastseen><frequency>41</frequency></response>")
38
+ spammer = StopForumSpam::Spammer.new('127.0.0.1')
39
+ spammer.id.should == '127.0.0.1'
40
+ end
41
+
42
+ it "should find a spammer by ip" do
43
+ FakeWeb.allow_net_connect = false
44
+ FakeWeb.register_uri(:get, "http://stopforumspam.com/api?ip=127.0.0.1",
45
+ :string => "<response success='true'><type>ip</type><appears>yes</appears><lastseen>2009-04-16 23:11:19</lastseen><frequency>41</frequency></response>")
46
+ StopForumSpam::Spammer.is_spammer?("127.0.0.1").should be_true
47
+ end
48
+
49
+ it "should return false when the spammer is not found by ip" do
50
+ FakeWeb.register_uri(:get, "http://stopforumspam.com/api?ip=127.0.0.1",
51
+ :string => "<response success='true'><type>ip</type><appears>no</appears><frequency>0</frequency></response>")
52
+ StopForumSpam::Spammer.is_spammer?('127.0.0.1').should be_false
53
+ end
54
+
55
+ it "should find a spammer by email" do
56
+ FakeWeb.register_uri(:get, "http://stopforumspam.com/api?email=test%40tester.com",
57
+ :string => "<response success='true'><type>email</type><appears>yes</appears><lastseen>2009-06-25 00:24:29</lastseen><frequency>2</frequency></response>")
58
+ StopForumSpam::Spammer.is_spammer?("test@tester.com").should be_true
59
+ end
60
+
61
+ it "should return false when a spammer is not found by email" do
62
+ FakeWeb.register_uri(:get, "http://stopforumspam.com/api?email=test%40tester.com",
63
+ :string => "<response success='true'><type>email</type><appears>no</appears><frequency>0</frequency></response>")
64
+ StopForumSpam::Spammer.is_spammer?('test@tester.com').should be_false
65
+ end
66
+
67
+ it "should find a spammer by username" do
68
+ FakeWeb.register_uri(:get, "http://stopforumspam.com/api?username=testuser",
69
+ :string => "<response success='true'><type>username</type><appears>yes</appears><frequency>10</frequency></response>")
70
+ StopForumSpam::Spammer.is_spammer?('testuser')
71
+ end
72
+
73
+ it "should return false when a spammer is not found by username" do
74
+ FakeWeb.register_uri(:get, "http://stopforumspam.com/api?username=testuser",
75
+ :string => "<response success='true'><type>username</type><appears>no</appears><frequency>0</frequency></response>")
76
+ StopForumSpam::Spammer.is_spammer?('testuser')
77
+ end
78
+ end
metadata ADDED
@@ -0,0 +1,58 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: stop_forum_spam
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Lake Denman
8
+ autorequire: httparty
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-11-07 00:00:00 -05:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: Small api wrapper for querying a spammer based on ip, email, or username information stored on http://stopforumspam.com
17
+ email: lake@lakedenman.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - lib/stop_forum_spam/spammer.rb
26
+ - lib/stop_forum_spam.rb
27
+ - spec/spec_helper.rb
28
+ - spec/stop_forum_spam_spec.rb
29
+ has_rdoc: true
30
+ homepage: http://lakedenman.com
31
+ licenses: []
32
+
33
+ post_install_message:
34
+ rdoc_options: []
35
+
36
+ require_paths:
37
+ - lib
38
+ required_ruby_version: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: "0"
43
+ version:
44
+ required_rubygems_version: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: "0"
49
+ version:
50
+ requirements: []
51
+
52
+ rubyforge_project:
53
+ rubygems_version: 1.3.5
54
+ signing_key:
55
+ specification_version: 3
56
+ summary: API Wrapper for http://stopforumspam.com
57
+ test_files: []
58
+