defender 2.0.0 → 2.0.1

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.
@@ -44,14 +44,29 @@ module Defender
44
44
  # database and in defensio.
45
45
  # @option options [String] :api_key Your Defensio API key. Get one at
46
46
  # defensio.com.
47
+ # @option options [Boolean] :test_mode Set Defender in test mode. See
48
+ # {#test_mode}.
47
49
  #
48
50
  def configure_defender(options)
49
51
  keys = options.delete(:keys)
50
52
  _defensio_keys.merge!(keys) unless keys.nil?
51
53
  api_key = options.delete(:api_key)
52
54
  Defender.api_key = api_key unless api_key.nil?
55
+ self.test_mode = options.delete(:test_mode)
53
56
  end
54
57
 
58
+ ##
59
+ # Set this to true to put Defender in "test mode". When in test mode, you
60
+ # can check if your code is working properly you can specify in the
61
+ # content field what kind of response you want. If you want a comment to
62
+ # be marked as spam with a spaminess of 0.85 you write [spam,0.85]
63
+ # somewhere in the content field of the document. If you want a malicious
64
+ # response with a spaminess of 0.99 you write [malicious,0.99] and for an
65
+ # innocent response you write [innocent,0.25]. This is the preferred way
66
+ # of testing, if you write spammy comments you might hurt the Defensio
67
+ # performance.
68
+ attr_accessor :test_mode
69
+
55
70
  ##
56
71
  # Returns the key-attribute mapping used.
57
72
  #
@@ -122,7 +137,7 @@ module Defender
122
137
  end
123
138
  data.merge!({
124
139
  'platform' => 'ruby',
125
- 'type' => 'comment'
140
+ 'type' => (self.class.test_mode ? 'test' : 'comment')
126
141
  })
127
142
  data.merge!(defensio_data) if defined?(@_defensio_data)
128
143
  document = Defender.defensio.post_document(data).last
@@ -1,4 +1,4 @@
1
1
  module Defender
2
2
  # Current Defender version
3
- VERSION = '2.0.0'
3
+ VERSION = '2.0.1'
4
4
  end
metadata CHANGED
@@ -1,127 +1,96 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: defender
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 2
7
- - 0
8
- - 0
9
- version: 2.0.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.1
5
+ prerelease:
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - Henrik Hodne
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
-
17
- date: 2011-01-19 00:00:00 +00:00
12
+ date: 2011-07-02 00:00:00.000000000 +02:00
18
13
  default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
21
16
  name: defensio
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
17
+ requirement: &2168669980 !ruby/object:Gem::Requirement
24
18
  none: false
25
- requirements:
19
+ requirements:
26
20
  - - ~>
27
- - !ruby/object:Gem::Version
28
- segments:
29
- - 0
30
- - 9
31
- - 1
21
+ - !ruby/object:Gem::Version
32
22
  version: 0.9.1
33
23
  type: :runtime
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
36
- name: activemodel
37
24
  prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
25
+ version_requirements: *2168669980
26
+ - !ruby/object:Gem::Dependency
27
+ name: activemodel
28
+ requirement: &2168669400 !ruby/object:Gem::Requirement
39
29
  none: false
40
- requirements:
30
+ requirements:
41
31
  - - ~>
42
- - !ruby/object:Gem::Version
43
- segments:
44
- - 3
45
- - 0
46
- - 0
32
+ - !ruby/object:Gem::Version
47
33
  version: 3.0.0
48
34
  type: :runtime
49
- version_requirements: *id002
50
- - !ruby/object:Gem::Dependency
35
+ prerelease: false
36
+ version_requirements: *2168669400
37
+ - !ruby/object:Gem::Dependency
51
38
  name: bundler
39
+ requirement: &2168668920 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ type: :development
52
46
  prerelease: false
53
- requirement: &id003 !ruby/object:Gem::Requirement
47
+ version_requirements: *2168668920
48
+ - !ruby/object:Gem::Dependency
49
+ name: rake
50
+ requirement: &2168668400 !ruby/object:Gem::Requirement
54
51
  none: false
55
- requirements:
56
- - - ~>
57
- - !ruby/object:Gem::Version
58
- segments:
59
- - 1
60
- - 0
61
- - 0
62
- version: 1.0.0
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
63
56
  type: :development
64
- version_requirements: *id003
65
- description: An ActiveModel plugin for Defensio.
66
- email:
57
+ prerelease: false
58
+ version_requirements: *2168668400
59
+ description:
60
+ email:
67
61
  - dvyjones@dvyjones.com
68
62
  executables: []
69
-
70
63
  extensions: []
71
-
72
64
  extra_rdoc_files: []
73
-
74
- files:
75
- - .document
76
- - .gitignore
77
- - Gemfile
78
- - LICENSE
79
- - README.md
80
- - Rakefile
81
- - defender.gemspec
82
- - lib/defender.rb
65
+ files:
83
66
  - lib/defender/defender_error.rb
84
67
  - lib/defender/spammable.rb
85
68
  - lib/defender/test/comment.rb
86
69
  - lib/defender/version.rb
87
- - spec/defender/spammable_spec.rb
88
- - spec/fake_defensio.rb
89
- - spec/spec.opts
90
- - spec/spec_helper.rb
70
+ - lib/defender.rb
91
71
  has_rdoc: true
92
- homepage: http://rubygems.org/gems/dvyjones
72
+ homepage:
93
73
  licenses: []
94
-
95
74
  post_install_message:
96
75
  rdoc_options: []
97
-
98
- require_paths:
99
- - - lib
100
- required_ruby_version: !ruby/object:Gem::Requirement
76
+ require_paths:
77
+ - lib
78
+ required_ruby_version: !ruby/object:Gem::Requirement
101
79
  none: false
102
- requirements:
103
- - - ">="
104
- - !ruby/object:Gem::Version
105
- segments:
106
- - 0
107
- version: "0"
108
- required_rubygems_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ! '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ required_rubygems_version: !ruby/object:Gem::Requirement
109
85
  none: false
110
- requirements:
111
- - - ">="
112
- - !ruby/object:Gem::Version
113
- segments:
114
- - 0
115
- version: "0"
86
+ requirements:
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
116
90
  requirements: []
117
-
118
91
  rubyforge_project:
119
- rubygems_version: 1.3.7
92
+ rubygems_version: 1.6.2
120
93
  signing_key:
121
94
  specification_version: 3
122
95
  summary: ActiveModel plugin for Defensio.
123
- test_files:
124
- - spec/defender/spammable_spec.rb
125
- - spec/fake_defensio.rb
126
- - spec/spec.opts
127
- - spec/spec_helper.rb
96
+ test_files: []
data/.document DELETED
@@ -1,5 +0,0 @@
1
- README.md
2
- lib/**/*.rb
3
- bin/*
4
- features/**/*.feature
5
- LICENSE
data/.gitignore DELETED
@@ -1,25 +0,0 @@
1
- ## MAC OS
2
- .DS_Store
3
-
4
- ## TEXTMATE
5
- *.tmproj
6
- tmtags
7
-
8
- ## EMACS
9
- *~
10
- \#*
11
- .\#*
12
-
13
- ## VIM
14
- *.swp
15
-
16
- ## PROJECT::GENERAL
17
- coverage
18
- rdoc
19
- pkg
20
- doc
21
- .yardoc
22
-
23
- ## PROJECT::SPECIFIC
24
-
25
- .bundle
data/Gemfile DELETED
@@ -1,7 +0,0 @@
1
- source :rubygems
2
-
3
- gemspec
4
-
5
- gem 'watchr', '~> 0.7'
6
- gem 'rspec', '~> 2.1.0'
7
- gem 'yard', '~> 0.6.3'
data/LICENSE DELETED
@@ -1,20 +0,0 @@
1
- Copyright (c) 2009-2010 Henrik Hodne
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining
4
- a copy of this software and associated documentation files (the
5
- "Software"), to deal in the Software without restriction, including
6
- without limitation the rights to use, copy, modify, merge, publish,
7
- distribute, sublicense, and/or sell copies of the Software, and to
8
- permit persons to whom the Software is furnished to do so, subject to
9
- the following conditions:
10
-
11
- The above copyright notice and this permission notice shall be
12
- included in all copies or substantial portions of the Software.
13
-
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md DELETED
@@ -1,193 +0,0 @@
1
- Defender
2
- ========
3
-
4
- Defender is a wrapper for the [Defensio][0] spam filtering API. From
5
- their own site:
6
-
7
- > More than just another spam filter, Defensio also eliminates malware
8
- > and other unwanted or risky content to fully protect your blog or Web
9
- > 2.0 application.
10
-
11
- Defensio is able to not only find spam, but also filter profanity and
12
- other similarities. It can also see the difference between malicious
13
- material and spammy material.
14
-
15
-
16
- Overview
17
- --------
18
-
19
- With Defender you can submit documents to Defensio, which will look for
20
- spam and malicious content in the documents.
21
-
22
- A document contains content to be analyzed by Defensio, or that has been
23
- analyzed.
24
-
25
- To use Defender, you need to retrieve an API key from
26
- [Defensio][4]. Then add Defender (`gem 'defender'`) to your Gemfile and run
27
- `bundle install`. To set up Defender, open your Comment class and include
28
- Defender::Spammable, and configure it by adding your API key. Your comment
29
- class should look something like this:
30
-
31
- class Comment < ActiveRecord::Base
32
- include Defender::Spammable
33
- configure_defender :api_key => '0123456789abcdef'
34
- end
35
-
36
- Now you need to add a few fields to your model. Defender requires a boolean
37
- field named "spam" (this will be `true` for comments marked as spam, and
38
- `false otherwise`), and a string field named "defensio_sig" (this will include
39
- a unique identifier so you can later mark false positives and negatives).
40
- Defender will also set the spaminess field if it exists (the spaminess field
41
- should be a float that can range between 0.00 and 1.00, where 0.00 is the
42
- least spammy and 1.00 is the most spammy). After you've done this, you're
43
- probably done setting up Defender, although you should read on as there's some
44
- more things you should know.
45
-
46
- Defender will automatically get the comment body, author name, email, IP and
47
- URL if you have them in your comment class with "standard names". Defender
48
- will look for fields named "body", "content" and "comment" (in that order) for
49
- the comment content, "author_name", "author" for the author name,
50
- "author_email", "email" for the author email, "author_ip", "ip" for the author
51
- IP, "author_url", "url" for the author URL. Only the comment content is the
52
- required one of these. If you're not using those attribute names, look further
53
- down in the readme under "Defining your own attribute names".
54
-
55
- Not using ActiveRecord? No problem, Defender supports all libraries that
56
- support ActiveModel, including Mongoid, MongoMapper and DataMapper. The syntax
57
- is the exact same, just use the method your library uses to set up the fields
58
- needed.
59
-
60
-
61
- Defining your own attribute names
62
- ---------------------------------
63
-
64
- Defensio supports a large amount of attributes you can send to it, and the
65
- more you send the more accurately it can determine whether it's spam or not.
66
- For some of these attributes, Defender will use conventions and try to find
67
- the attribute, but not all are set up (look at
68
- Defender::Spammable::DEFENSIO_KEYS for the exact keys it uses). If you are
69
- using other attribute names, or want to add more to get more accurate spam
70
- evaluation, you do that in the `configure_defender` method. Pass in another
71
- option called `:keys`, which should be a hash of defensio key names and
72
- attribute names. The list of defensio key names are after the code example,
73
- and the attribute name is just a symbol. So if your comment content field is
74
- called "the_comment_itself", your comment class should look like this:
75
-
76
- class Comment
77
- include Defender::Spammable
78
- configure_defender :api_key => '0123456789abcdef', :keys => { 'content' => :the_comment_itself }
79
- end
80
-
81
- If you don't want to store all the information in the database, you can also
82
- use the `defensio_data` method. In the model, before saving, call
83
- `defensio_data` with a hash containing the data you want to send. The keys
84
- should be strings, you can see all the possible values listed below. The
85
- `defensio_data` method can be called several times with more data.
86
-
87
- These are the keys defensio supports (at the time of writing, see
88
- http://defensio.com/api for a completely up-to-date list):
89
-
90
- * **author-email**: The email address of the author of the document.
91
- * **author-ip**: The IP address of the author of the document.
92
- * **author-logged-in**: Whether or not the user posting the document is logged
93
- onto your Web site, either through your own authentication method or
94
- through OpenID.
95
- * **author-name**: The name of the author of the document.
96
- * **author-openid**: The OpenID URL of the logged-on user. Must be used in
97
- conjunction with user-logged-in=true.
98
- * **author-trusted**: Whether or not the user is an administrator, moderator,
99
- or editor of your Web site. Pass true only if you can guarantee that the
100
- user has been authenticated, has a role of responsibility, and can be
101
- trusted as a good Web citizen.
102
- * **author-url**: The URL of the person posting the document.
103
- * **browser-cookies**: Whether or not the Web browser used to post the
104
- document (ie. the comment) has cookies enabled. If no such detection has
105
- been made, leave this value empty.
106
- * **browser-javascript**: Whether or not the Web browser used to post the
107
- document (ie. the comment) has JavaScript enabled. If no such detection
108
- has been made, leave this value empty.
109
- * **document-permalink**: The URL to the document being posted.
110
- * **http-headers**: Contains the HTTP headers sent with the request. You can
111
- send a few values or all values. Because this information helps Defensio
112
- determine if a document is innocent or not, the more headers you send, the
113
- better. The format of this value is one key/value pair per line, each line
114
- starting with the key followed by a colon and then the value.
115
- * **parent-document-date**: The date the parent document was posted. For
116
- example, on a blog, this would be the date the article related to the
117
- comment (document) was posted. If you're using threaded comments, send the
118
- date the article was posted, not the date the parent comment was posted.
119
- * **parent-document-permalink**: The URL of the parent document. For example,
120
- on a blog, this would be the URL the article related to the comment
121
- (document) was posted.
122
- * **referrer**: Provide the value of the HTTP_REFERER (note spelling) in this
123
- field.
124
- * **title**: Provide the title of the document being sent. For example, this
125
- might be the title of a blog article.
126
-
127
-
128
- Development
129
- -----------
130
-
131
- Want to help out on Defender?
132
-
133
- First, you should clone the repo and run the features and specs:
134
-
135
- git clone git://github.com/dvyjones/defender.git
136
- cd defender
137
- rake spec
138
-
139
- Feel free to ping the mailing list if you have any problems and we'll
140
- try to sort it out.
141
-
142
-
143
- Contributing
144
- ------------
145
-
146
- Once you've made your great commits:
147
-
148
- 1. [Fork][1] defender
149
- 2. Create a topic branch - `git checkout -b my_branch`
150
- 3. Push to your branch - `git push origin my_branch`
151
- 4. Create an [Issue][2] with a link to your branch
152
- 5. That's it!
153
-
154
- You might want to checkout our [Contributing][cb] wiki page for
155
- information on coding standards, new features, etc.
156
-
157
-
158
- Mailing List
159
- ------------
160
-
161
- To join the list simply send an email to <defender@librelist.com>. This
162
- will subscribe you and send you information about your subscription,
163
- include unsubscribe information.
164
-
165
- The archive can be found at <http://librelist.com/browser/>.
166
-
167
-
168
- Meta
169
- ----
170
-
171
- * Code: `git clone git://github.com/dvyjones/defender.git`
172
- * Home: <http://github.com/dvyjones/defender/>
173
- * Docs: <http://rubydoc.info/github/dvyjones/defender/maser/frames>
174
- * Bugs: <http://github.com/dvyjones/defender/issues>
175
- * List: <defender@librelist.com>
176
- * Gems: <http://rubygems.org/gems/defender>
177
-
178
- This project uses [Semantic Versioning][sv].
179
-
180
-
181
- Author
182
- ------
183
-
184
- Henrik Hodne :: <dvyjones@binaryhex.com> :: @[dvyjones][5]
185
-
186
- [0]: http://defensio.com
187
- [1]: http://help.github.com/forking/
188
- [2]: http://github.com/dvyjones/defender/issues
189
- [3]: http://defensio.com/api
190
- [4]: http://defensio.com/signup/
191
- [5]: http://twitter.com/dvyjones
192
- [sv]: http://semver.org
193
- [cb]: http://wiki.github.com/dvyjones/defender/contributing
data/Rakefile DELETED
@@ -1,25 +0,0 @@
1
- # coding:utf-8
2
- $:.unshift File.expand_path('../lib', __FILE__)
3
-
4
- require 'bundler'
5
- require 'rubygems'
6
- require 'rubygems/specification'
7
- require 'defender'
8
-
9
- Bundler::GemHelper.install_tasks
10
-
11
- require 'rspec/core/rake_task'
12
- RSpec::Core::RakeTask.new(:spec) do |t|
13
- t.rspec_opts = %w{-fs --color}
14
- end
15
-
16
- begin
17
- require 'yard'
18
- rescue LoadError
19
- raise 'Run `gem install yard` to generate docs'
20
- else
21
- YARD::Rake::YardocTask.new do |conf|
22
- conf.options = ['-mmarkdown', '-rREADME.md']
23
- conf.files = ['lib/**/*.rb', '-', 'LICENSE']
24
- end
25
- end
@@ -1,22 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- require File.expand_path("../lib/defender/version", __FILE__)
3
-
4
- Gem::Specification.new do |s|
5
- s.name = "defender"
6
- s.version = Defender::VERSION
7
- s.platform = Gem::Platform::RUBY
8
- s.authors = ['Henrik Hodne']
9
- s.email = ['dvyjones@dvyjones.com']
10
- s.homepage = 'http://rubygems.org/gems/dvyjones'
11
- s.summary = 'ActiveModel plugin for Defensio.'
12
- s.description = 'An ActiveModel plugin for Defensio.'
13
-
14
- s.add_dependency('defensio', '~> 0.9.1')
15
- s.add_dependency('activemodel', '~> 3.0.0')
16
- s.add_development_dependency('bundler', '~> 1.0.0')
17
-
18
- s.files = `git ls-files`.split("\n")
19
- s.test_files = `git ls-files -- spec/*`.split("\n")
20
-
21
- s.require_path = ['lib']
22
- end
@@ -1,124 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Defender
4
- describe Spammable do
5
- describe '.configure_defender' do
6
- it 'sets the attribute-data key mappers' do
7
- Comment.configure_defender(:keys => {'foo' => :bar, 'foobar' => :baz})
8
- Comment._defensio_keys.should include({'foo' => :bar, 'foobar' => :baz})
9
- end
10
-
11
- it 'sets the API key' do
12
- Comment.configure_defender(:api_key => 'foobar')
13
- Defender.api_key.should == 'foobar'
14
- end
15
- end
16
-
17
- describe '#spam?' do
18
- it 'returns the "spam" attribute unless it is nil' do
19
- comment_class = Class.new
20
- comment_class.instance_eval { attr_accessor :spam }
21
- def comment_class.before_save(*args, &block); end
22
- comment_class.send(:define_method, :new_record?) { false }
23
- comment_class.send(:include, Defender::Spammable)
24
- comment = comment_class.new
25
- comment.spam = true
26
- comment.spam?.should be_true
27
- end
28
-
29
- it 'returns nil for a new record' do
30
- comment_class = Class.new
31
- comment_class.instance_eval { attr_accessor :spam }
32
- def comment_class.before_save(*args, &block); end
33
- comment_class.send(:define_method, :new_record?) { true }
34
- comment_class.send(:include, Defender::Spammable)
35
- comment = comment_class.new
36
- comment.spam?.should be_nil
37
- end
38
-
39
- it 'raises a DefenderError if no spam attribute exists' do
40
- comment_class = Class.new
41
- def comment_class.before_save(*args, &block); end
42
- comment_class.send(:define_method, :new_record?) { false }
43
- comment_class.send(:include, Defender::Spammable)
44
- comment = comment_class.new
45
- expect { comment.spam? }.to raise_error(Defender::DefenderError)
46
- end
47
- end
48
-
49
- describe '#defensio_data' do
50
- it 'merges in more data to be sent to Defensio' do
51
- comment = Comment.new
52
- comment.defensio_data({'foo' => 'FOOBAR', 'foobar' => 'baz'})
53
- comment.defensio_data.should include({'foo' => 'FOOBAR', 'foobar' => 'baz'})
54
- end
55
-
56
- it 'overwrites values repassed' do
57
- comment = Comment.new
58
- comment.defensio_data({'foo' => 'FOOBAR'})
59
- comment.defensio_data({'foo' => 'baz'})
60
- comment.defensio_data['foo'].should == 'baz'
61
- end
62
-
63
- it 'leaves values that aren\'t modified' do
64
- comment = Comment.new
65
- comment.defensio_data({'foo' => 'baz'})
66
- comment.defensio_data({'bar' => 'foobar'})
67
- comment.defensio_data['foo'].should == 'baz'
68
- end
69
- end
70
-
71
- describe '#_defender_before_save' do
72
- it 'sets the attributes returned from defensio' do
73
- comment = Comment.new
74
- comment.body = '[innocent,0.9]'
75
- comment.save
76
- comment.spam.should be_false
77
- comment.defensio_sig.should_not be_nil
78
- end
79
-
80
- it 'sends the information off to Defensio' do
81
- old_defensio = Defender.defensio
82
- defensio = double('defensio')
83
- defensio.should_receive(:post_document) { [200, {'signature' => 1234567890, 'spaminess' => 0.9, 'allow' => true}] }
84
- Defender.defensio = defensio
85
- comment = Comment.new
86
- comment.body = 'Hello, world!'
87
- comment.save
88
- Defender.defensio = old_defensio
89
- end
90
- end
91
-
92
- describe '#_pick_attribute' do
93
- it 'returns the value of the attribute passed if it exists' do
94
- comment = Comment.new
95
- comment.body = 'Foobar!'
96
- comment.send(:_pick_attribute, :body).should == 'Foobar!'
97
- end
98
-
99
- it 'returns the value for the first attribute that exists in a list of attributes' do
100
- comment = Comment.new
101
- comment.body = 'Foobar!'
102
- comment.send(:_pick_attribute, [:content, :body]).should == 'Foobar!'
103
- end
104
-
105
- it 'returns nil if no attribute with the given names exists' do
106
- comment = Comment.new
107
- comment.send(:_pick_attribute, :bogus_attribute).should be_nil
108
- end
109
- end
110
-
111
- describe '#_get_defensio_document' do
112
- it 'retrieves the document from Defensio' do
113
- old_defensio = Defender.defensio
114
- defensio = double('defensio')
115
- defensio.should_receive(:get_document) { [200, {'status' => 'succeed'}] }
116
- Defender.defensio = defensio
117
- comment = Comment.new
118
- comment.defensio_sig = '0123456789abcdef'
119
- comment.send(:_get_defensio_document)
120
- Defender.defensio = old_defensio
121
- end
122
- end
123
- end
124
- end
@@ -1,36 +0,0 @@
1
- class FakeDefensio
2
- def initialize
3
- @documents = {}
4
- end
5
-
6
- def post_document(data)
7
- content = data[:content] || data['content']
8
- classification, spaminess = content[1..-2].split(',')
9
- signature = "#{rand}#{content}".hash
10
-
11
- @documents[signature] = {
12
- 'api-version' => '2.0',
13
- 'status' => 'success',
14
- 'message' => '',
15
- 'signature' => signature,
16
- 'allow' => (classification == 'innocent'),
17
- 'classification' => classification,
18
- 'spaminess' => spaminess.to_f,
19
- 'profanity-match' => false
20
- }
21
-
22
- [200, @documents[signature]]
23
- end
24
-
25
- def get_document(signature)
26
- if @documents.has_key?(signature)
27
- [200, @documents[signature]]
28
- else
29
- [404,
30
- 'api-version' => '2.0',
31
- 'status' => 'failure',
32
- 'message' => 'document not found'
33
- ]
34
- end
35
- end
36
- end
@@ -1,2 +0,0 @@
1
- --color
2
- --format nested
@@ -1,7 +0,0 @@
1
- require 'defender'
2
- require 'defender/test/comment'
3
- require 'fake_defensio'
4
-
5
- Comment = Defender::Test::Comment
6
-
7
- Defender.defensio = FakeDefensio.new