despamilator_rails2 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require=./spec/spec_helper.rb
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm --create use 1.9.2@despamilator-rails2
data/Gemfile ADDED
@@ -0,0 +1,16 @@
1
+ # A sample Gemfile
2
+ source "http://rubygems.org"
3
+
4
+ gem 'hoe', '>= 2.7.0'
5
+ gem 'newgem', '>= 1.5.3'
6
+ gem 'activerecord', '>= 2.3.10'
7
+
8
+ # while we're fetching from git, we need to execute everything with 'bundle exec'
9
+ #gem 'despamilator', :git => 'git://github.com/moowahaha/despamilator.git'
10
+ gem 'despamilator', '>= 1.0'
11
+
12
+ group :test do
13
+ gem 'rspec', '>= 2.4.0'
14
+ gem 'sqlite3', '>= 0.1.1'
15
+ gem 'one_hundred_percent_coverage'
16
+ end
@@ -0,0 +1,50 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ RedCloth (4.2.3)
5
+ activerecord (2.3.10)
6
+ activesupport (= 2.3.10)
7
+ activesupport (2.3.10)
8
+ despamilator (1.0)
9
+ diff-lcs (1.1.2)
10
+ ffi (1.0.4)
11
+ rake (>= 0.8.7)
12
+ hoe (2.8.0)
13
+ rake (>= 0.8.7)
14
+ newgem (1.5.3)
15
+ RedCloth (>= 4.1.1)
16
+ activesupport (~> 2.3.4)
17
+ hoe (>= 2.4.0)
18
+ rubigen (>= 1.5.3)
19
+ syntax (>= 1.0.0)
20
+ one_hundred_percent_coverage (0.0.2)
21
+ simplecov (>= 0.3.7)
22
+ rake (0.8.7)
23
+ rspec (2.4.0)
24
+ rspec-core (~> 2.4.0)
25
+ rspec-expectations (~> 2.4.0)
26
+ rspec-mocks (~> 2.4.0)
27
+ rspec-core (2.4.0)
28
+ rspec-expectations (2.4.0)
29
+ diff-lcs (~> 1.1.2)
30
+ rspec-mocks (2.4.0)
31
+ rubigen (1.5.5)
32
+ activesupport (~> 2.3.5)
33
+ simplecov (0.3.7)
34
+ simplecov-html (>= 0.3.7)
35
+ simplecov-html (0.3.9)
36
+ sqlite3 (0.1.1)
37
+ ffi (>= 0.6.3)
38
+ syntax (1.0.0)
39
+
40
+ PLATFORMS
41
+ ruby
42
+
43
+ DEPENDENCIES
44
+ activerecord (>= 2.3.10)
45
+ despamilator (>= 1.0)
46
+ hoe (>= 2.7.0)
47
+ newgem (>= 1.5.3)
48
+ one_hundred_percent_coverage
49
+ rspec (>= 2.4.0)
50
+ sqlite3 (>= 0.1.1)
@@ -0,0 +1,7 @@
1
+ === 1.0 2011-09-01
2
+
3
+ * First release of standalone Rails plugin. Improvements on old one are...
4
+ * No longer part of Despamilator, so more obvious!
5
+ * Better syntactic sugar.
6
+ * Behaves much more like a regular ActiveRecord validation routine.
7
+ * Load of tests.
@@ -0,0 +1,15 @@
1
+ .rspec
2
+ .rvmrc
3
+ Gemfile
4
+ Gemfile.lock
5
+ History.txt
6
+ Manifest.txt
7
+ README.rdoc
8
+ Rakefile
9
+ despamilator-rails.gemspec
10
+ lib/despamilator_rails.rb
11
+ spec/active_record_integration_spec.rb
12
+ spec/despamilator_rails_spec.rb
13
+ spec/fixtures/active_record_test_class.rb
14
+ spec/spec_helper.rb
15
+ spec/test_db_migrations/create_test_model_table.rb
@@ -0,0 +1,91 @@
1
+ = despamilator_rails2
2
+
3
+ * https://github.com/moowahaha/despamilator-rails/tree/rails2
4
+
5
+ == DESCRIPTION:
6
+
7
+ Spam detection plugin for Rails 2 & ActiveRecord 2. Uses all the standard Rails conventions and
8
+ my Despamilator gem. Use the main (non rails2) version for Rails 3.
9
+
10
+ == FEATURES/PROBLEMS:
11
+
12
+ * To fix the iconv error when developing with Ruby 1.9.2 and RVM,
13
+ see: http://blog.footle.org/2010/07/29/installing-ruby-1-9-2-via-rvm-on-os-x/ .
14
+
15
+ * DataMapper not yet supported.
16
+
17
+ * ActiveRecord 3 not supported in this version! Use the main version (despamilator_rails)
18
+
19
+
20
+ == SYNOPSIS:
21
+
22
+ Somewhere (such as your environment.rb...)
23
+
24
+ require 'despamilator_rails'
25
+
26
+ In your model (basic example):
27
+
28
+ class YourModel < ActiveRecord::Base
29
+ validate_with_despamilator :attributes => [:some_field]
30
+ end
31
+
32
+ When "some_field" is assigned a spammy value, it will add to the errors. For example...
33
+
34
+ YourModel.new(:some_field => spammy_value).save! #=> ActiveRecord::RecordInvalid exception!
35
+
36
+ Or...
37
+
38
+ your_instance = YourModel.new(:some_field => spammy_value)
39
+ your_instance.save
40
+ your_instance.errors.full_messages.should #=> ["Some field looks like spam"]
41
+
42
+ If you want to configure the threshold (which defaults to 1) or add your own callback, you can do the following:
43
+
44
+ class YourModel < ActiveRecord::Base
45
+ validate_with_despamilator :attributes => [:some_field], :threshold => 1 do |field, value, despamilator|
46
+ raise "spam! field: #{field}, value: #{value}, score: #{despamailtor.score}"
47
+ end
48
+ end
49
+
50
+ This example will...
51
+
52
+ your_instance = YourModel.new(:some_field => "spammy string")
53
+ your_instance.save! #=> Exception "spam! field: some_field, value: spammy string, score: 123"
54
+
55
+ The callback will receive the field name, the value and the instance of the Despamilator class.
56
+
57
+ See the various examples in "spec/fixtures".
58
+
59
+ == REQUIREMENTS:
60
+
61
+ * ActiveRecord >= 2.3.2
62
+ * Despamilator >= 1.0
63
+
64
+ == INSTALL:
65
+
66
+ * gem install despamilator_rails
67
+
68
+ == LICENSE:
69
+
70
+ (The MIT License)
71
+
72
+ Copyright (c) 2011 Stephen Hardisty
73
+
74
+ Permission is hereby granted, free of charge, to any person obtaining
75
+ a copy of this software and associated documentation files (the
76
+ 'Software'), to deal in the Software without restriction, including
77
+ without limitation the rights to use, copy, modify, merge, publish,
78
+ distribute, sublicense, and/or sell copies of the Software, and to
79
+ permit persons to whom the Software is furnished to do so, subject to
80
+ the following conditions:
81
+
82
+ The above copyright notice and this permission notice shall be
83
+ included in all copies or substantial portions of the Software.
84
+
85
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
86
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
87
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
88
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
89
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
90
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
91
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,30 @@
1
+ require 'rubygems'
2
+ gem 'hoe', '>= 2.1.0'
3
+ require 'hoe'
4
+ require 'fileutils'
5
+ require './lib/despamilator_rails'
6
+
7
+ Hoe.plugin :newgem
8
+
9
+ $hoe = Hoe.spec 'despamilator_rails2' do
10
+ self.developer 'Stephen Hardisty', 'moowahaha@hotmail.com'
11
+ self.rubyforge_name = self.name
12
+ self.extra_deps = [['despamilator','>= 1.0'], ['activerecord', '>= 2.3.2']]
13
+ end
14
+
15
+ require 'newgem/tasks'
16
+ Dir['tasks/**/*.rake'].each { |t| load t }
17
+
18
+ task :default => [:spec]
19
+ task :test => [:spec]
20
+
21
+ desc "Generate appropriate rdoc"
22
+ task :rdoc do
23
+ sh "rdoc README.rdoc lib/despamilator_rails.rb"
24
+ end
25
+
26
+ task :cultivate do
27
+ sh "rm -f *.sqlite3"
28
+ sh "touch Manifest.txt; rake check_manifest |grep -v \"(in \" | patch"
29
+ sh "rake debug_gem | grep -v \"(in \" > `basename \\`pwd\\``.gemspec"
30
+ end
@@ -0,0 +1,39 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{despamilator_rails}
5
+ s.version = "1.0"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Stephen Hardisty"]
9
+ s.date = %q{2011-01-09}
10
+ s.description = %q{FIX (describe your package)}
11
+ s.email = ["moowahaha@hotmail.com"]
12
+ s.extra_rdoc_files = ["History.txt", "Manifest.txt"]
13
+ s.files = [".rspec", ".rvmrc", "Gemfile", "Gemfile.lock", "History.txt", "Manifest.txt", "README.rdoc", "Rakefile", "despamilator-rails.gemspec", "lib/despamilator_rails.rb", "spec/active_record_integration_spec.rb", "spec/despamilator_rails_spec.rb", "spec/fixtures/active_record_test_class.rb", "spec/spec_helper.rb", "spec/test_db_migrations/create_test_model_table.rb"]
14
+ s.homepage = %q{https://github.com/moowahaha/despamilator-rails}
15
+ s.rdoc_options = ["--main", "README.rdoc"]
16
+ s.require_paths = ["lib"]
17
+ s.rubyforge_project = %q{despamilator_rails}
18
+ s.rubygems_version = %q{1.3.7}
19
+ s.summary = %q{FIX (describe your package)}
20
+
21
+ if s.respond_to? :specification_version then
22
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
23
+ s.specification_version = 3
24
+
25
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
26
+ s.add_runtime_dependency(%q<despamilator>, [">= 1.0"])
27
+ s.add_runtime_dependency(%q<activesupport>, [">= 2.3.2"])
28
+ s.add_development_dependency(%q<hoe>, [">= 2.8.0"])
29
+ else
30
+ s.add_dependency(%q<despamilator>, [">= 1.0"])
31
+ s.add_dependency(%q<activesupport>, [">= 2.3.2"])
32
+ s.add_dependency(%q<hoe>, [">= 2.8.0"])
33
+ end
34
+ else
35
+ s.add_dependency(%q<despamilator>, [">= 1.0"])
36
+ s.add_dependency(%q<activesupport>, [">= 2.3.2"])
37
+ s.add_dependency(%q<hoe>, [">= 2.8.0"])
38
+ end
39
+ end
@@ -0,0 +1,103 @@
1
+ require 'despamilator'
2
+ require 'active_record'
3
+
4
+ module DespamilatorRails
5
+ VERSION = "1.0.2"
6
+ end
7
+
8
+ module ActiveRecord
9
+
10
+ class Base
11
+
12
+ # Somewhere (such as your environment.rb...)
13
+ #
14
+ # require 'despamilator_rails'
15
+ #
16
+ # In your model (basic example):
17
+ #
18
+ # class YourModel < ActiveRecord::Base
19
+ # validate_with_despamilator :attributes => [:some_field]
20
+ # end
21
+ #
22
+ # When "some_field" is assigned a spammy value, it will add to the errors. For example...
23
+ #
24
+ # YourModel.new(:some_field => spammy_value).save! #=> ActiveRecord::RecordInvalid exception!
25
+ #
26
+ # Or...
27
+ #
28
+ # your_instance = YourModel.new(:some_field => spammy_value)
29
+ # your_instance.save
30
+ # your_instance.errors.full_messages.should #=> ["Some field looks like spam"]
31
+ #
32
+ # If you want to configure the threshold (which defaults to 1) or add your own callback, you can do the following:
33
+ #
34
+ # class YourModel < ActiveRecord::Base
35
+ # validate_with_despamilator :attributes => [:some_field], :threshold => 1 do |field, value, despamilator|
36
+ # raise "spam! field: #{field}, value: #{value}, score: #{despamailtor.score}"
37
+ # end
38
+ # end
39
+ #
40
+ # This example will...
41
+ #
42
+ # your_instance = YourModel.new(:some_field => "spammy string")
43
+ # your_instance.save! #=> Exception "spam! field: some_field, value: spammy string, score: 123"
44
+ #
45
+ # The callback will receive the field name, the value and the instance of the Despamilator class.
46
+
47
+ def self.validate_with_despamilator settings, &block
48
+ raise "This version only supports ActiveRecord 2. Please download the main version for support of newer versions of ActiveRecord." if VERSION::MAJOR > 2
49
+ assign_despamilator_attributes settings
50
+ assign_despamilator_threshold settings
51
+ assign_despamilator_callback block
52
+
53
+ add_despamilator_validation settings
54
+ end
55
+
56
+ private
57
+
58
+ class << self
59
+
60
+ def add_despamilator_validation settings
61
+
62
+ send(validation_method(:save), settings) do |record|
63
+
64
+ record.despamilator_checked_attributes.each do |attribute|
65
+ text = record.send(attribute)
66
+ dspam = Despamilator.new(text)
67
+
68
+ record.despamilator_callback(attribute, text, dspam) if dspam.score >= record.despamilator_threshold
69
+ end
70
+
71
+ end
72
+
73
+ end
74
+
75
+ def assign_despamilator_attributes(settings)
76
+ clean_attributes = settings[:attributes].reject do |attribute|
77
+ attribute.blank?
78
+ end
79
+
80
+ raise('At least one attribute must be defined') if clean_attributes.empty?
81
+
82
+ define_method(:despamilator_checked_attributes, lambda { clean_attributes })
83
+ end
84
+
85
+ def assign_despamilator_threshold(settings)
86
+ define_method(:despamilator_threshold, lambda { settings[:threshold] || 1 })
87
+ end
88
+
89
+ def assign_despamilator_callback(block)
90
+ define_method(:despamilator_callback, block || default_despamilator_detection_response)
91
+ end
92
+
93
+ def default_despamilator_detection_response
94
+ lambda { |attribute, value, dspam|
95
+ errors.add(attribute, "looks like spam")
96
+ }
97
+ end
98
+
99
+ end
100
+
101
+ end
102
+
103
+ end
@@ -0,0 +1,23 @@
1
+ describe "active_record integration" do
2
+
3
+ it "should check for spam on save" do
4
+ some_instance = SomeModel.new
5
+ some_instance.some_field = Despamilator.gtubs_test_string
6
+
7
+ -> {some_instance.save!}.should raise_error(ActiveRecord::RecordInvalid)
8
+ end
9
+
10
+ it "should only support ActiveRecord 2" do
11
+ active_record_version = ActiveRecord::VERSION::MAJOR
12
+ ActiveRecord::VERSION.const_set(:MAJOR, 3)
13
+
14
+ ->{
15
+ class SomeModelOnActiveRecord2 < ActiveRecord::Base
16
+ validate_with_despamilator :attributes => []
17
+ end
18
+ }.should raise_error(/This version only supports ActiveRecord 2/)
19
+
20
+ ActiveRecord::VERSION.const_set(:MAJOR, active_record_version)
21
+ end
22
+
23
+ end
@@ -0,0 +1,120 @@
1
+ describe "despamilator_rails" do
2
+
3
+ it "should notify of spam detection in a railsy way" do
4
+
5
+ class SomeModelWithSpam < ActiveRecord::Base
6
+ set_table_name 'some_models'
7
+ validate_with_despamilator :attributes => [:some_field]
8
+ end
9
+
10
+ some_model = SomeModelWithSpam.new
11
+ some_model.some_field = Despamilator.gtubs_test_string
12
+
13
+ -> {some_model.save!}.should raise_error(ActiveRecord::RecordInvalid)
14
+ some_model.errors.full_messages.should == ["Some field looks like spam"]
15
+ end
16
+
17
+ describe "threshold" do
18
+
19
+ it "should default to 1" do
20
+
21
+ class SomeModelWithDefaultThreshold < ActiveRecord::Base
22
+ set_table_name 'some_models'
23
+ validate_with_despamilator :attributes => [:some_field]
24
+ end
25
+
26
+ some_model = SomeModelWithDefaultThreshold.new
27
+ some_model.despamilator_threshold.should == 1
28
+ end
29
+
30
+ it "should be settable" do
31
+
32
+ class SomeModelWithDefinedThreshold < ActiveRecord::Base
33
+ set_table_name 'some_models'
34
+ validate_with_despamilator :attributes => [:some_field], :threshold => 9
35
+ end
36
+
37
+ some_model = SomeModelWithDefinedThreshold.new
38
+ some_model.despamilator_threshold.should == 9
39
+
40
+ end
41
+
42
+ end
43
+
44
+ describe "attributes" do
45
+
46
+ it "should cause an exception when an empty array is passed" do
47
+
48
+ ->{
49
+ class SomeModelWithMissingAttributes < ActiveRecord::Base
50
+ validate_with_despamilator :attributes => []
51
+ end
52
+ }.should raise_error('At least one attribute must be defined')
53
+
54
+ end
55
+
56
+ it "should cause an exception when an empty string is passed" do
57
+
58
+ -> {
59
+ class SomeModelWithEmptyAttributes < ActiveRecord::Base
60
+ validate_with_despamilator :attributes => ['']
61
+ end
62
+ }.should raise_error('At least one attribute must be defined')
63
+
64
+ end
65
+
66
+ end
67
+
68
+ it "should allow a block to be specified" do
69
+
70
+ class SomeModelWithABlock < ActiveRecord::Base
71
+ set_table_name 'some_models'
72
+
73
+ def do_something field, value, despamilator
74
+ end
75
+
76
+ validate_with_despamilator :attributes => [:some_field] do |field, value, despamilator|
77
+ do_something(field, value, despamilator)
78
+ end
79
+ end
80
+
81
+ fake_despamilator = mock('despamilator')
82
+ Despamilator.should_receive(:new).and_return(fake_despamilator)
83
+ fake_despamilator.should_receive(:score).and_return(10000)
84
+
85
+ some_model = SomeModelWithABlock.new
86
+ some_model.should_receive(:do_something).with(:some_field, 'blah', fake_despamilator)
87
+ some_model.some_field = 'blah'
88
+ some_model.save
89
+
90
+ end
91
+
92
+ it "should work nicely with other validate methods" do
93
+ class SomeModelWithAnotherValidate < ActiveRecord::Base
94
+ set_table_name 'some_models'
95
+
96
+ validate_with_despamilator :attributes => [:some_field] do |field, value, despamilator|
97
+ do_something
98
+ end
99
+
100
+ def do_something
101
+ end
102
+
103
+ def do_something_else
104
+ end
105
+
106
+ def validate
107
+ do_something_else
108
+ end
109
+
110
+ end
111
+
112
+ some_model = SomeModelWithAnotherValidate.new
113
+ some_model.should_receive(:do_something)
114
+ some_model.should_receive(:do_something_else)
115
+ some_model.some_field = Despamilator.gtubs_test_string
116
+ some_model.save
117
+
118
+ end
119
+
120
+ end
@@ -0,0 +1,5 @@
1
+ class SomeModel < ActiveRecord::Base
2
+
3
+ validate_with_despamilator :attributes => [:some_field]
4
+
5
+ end
@@ -0,0 +1,22 @@
1
+ require 'one_hundred_percent_coverage'
2
+ require File.join(File.dirname(__FILE__), '..', 'lib', 'despamilator_rails')
3
+ require 'active_record'
4
+
5
+ Dir.glob(File.join(File.dirname(__FILE__), 'test_db_migrations', '*.rb')).each do |file|
6
+ require file
7
+ end
8
+
9
+ db_file = 'test.sqlite3'
10
+
11
+ File.unlink(db_file) if File.exists?(db_file)
12
+
13
+ ActiveRecord::Base.establish_connection(
14
+ :adapter => 'sqlite3',
15
+ :database => db_file
16
+ )
17
+
18
+ CreateSomeModel.migrate(:up)
19
+
20
+ Dir.glob(File.join(File.dirname(__FILE__), 'fixtures', '*.rb')).each do |file|
21
+ require file
22
+ end
@@ -0,0 +1,10 @@
1
+ class CreateSomeModel < ActiveRecord::Migration
2
+ ActiveRecord::Migration.verbose = false
3
+
4
+ def self.up
5
+ create_table :some_models do |t|
6
+ t.text :some_field
7
+ end
8
+ end
9
+
10
+ end
metadata ADDED
@@ -0,0 +1,126 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: despamilator_rails2
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 1
7
+ - 0
8
+ - 2
9
+ version: 1.0.2
10
+ platform: ruby
11
+ authors:
12
+ - Stephen Hardisty
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-02-02 00:00:00 +11:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: despamilator
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 1
30
+ - 0
31
+ version: "1.0"
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: activerecord
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ segments:
43
+ - 2
44
+ - 3
45
+ - 2
46
+ version: 2.3.2
47
+ type: :runtime
48
+ version_requirements: *id002
49
+ - !ruby/object:Gem::Dependency
50
+ name: hoe
51
+ prerelease: false
52
+ requirement: &id003 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ segments:
58
+ - 2
59
+ - 8
60
+ - 0
61
+ version: 2.8.0
62
+ type: :development
63
+ version_requirements: *id003
64
+ description: |-
65
+ Spam detection plugin for Rails 2 & ActiveRecord 2. Uses all the standard Rails conventions and
66
+ my Despamilator gem. Use the main (non rails2) version for Rails 3.
67
+ email:
68
+ - moowahaha@hotmail.com
69
+ executables: []
70
+
71
+ extensions: []
72
+
73
+ extra_rdoc_files:
74
+ - History.txt
75
+ - Manifest.txt
76
+ files:
77
+ - .rspec
78
+ - .rvmrc
79
+ - Gemfile
80
+ - Gemfile.lock
81
+ - History.txt
82
+ - Manifest.txt
83
+ - README.rdoc
84
+ - Rakefile
85
+ - despamilator-rails.gemspec
86
+ - lib/despamilator_rails.rb
87
+ - spec/active_record_integration_spec.rb
88
+ - spec/despamilator_rails_spec.rb
89
+ - spec/fixtures/active_record_test_class.rb
90
+ - spec/spec_helper.rb
91
+ - spec/test_db_migrations/create_test_model_table.rb
92
+ has_rdoc: true
93
+ homepage: https://github.com/moowahaha/despamilator-rails/tree/rails2
94
+ licenses: []
95
+
96
+ post_install_message:
97
+ rdoc_options:
98
+ - --main
99
+ - README.rdoc
100
+ require_paths:
101
+ - lib
102
+ required_ruby_version: !ruby/object:Gem::Requirement
103
+ none: false
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ segments:
108
+ - 0
109
+ version: "0"
110
+ required_rubygems_version: !ruby/object:Gem::Requirement
111
+ none: false
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ segments:
116
+ - 0
117
+ version: "0"
118
+ requirements: []
119
+
120
+ rubyforge_project: despamilator_rails2
121
+ rubygems_version: 1.3.7
122
+ signing_key:
123
+ specification_version: 3
124
+ summary: Spam detection plugin for Rails 2 & ActiveRecord 2
125
+ test_files: []
126
+