rakismet 0.4.0 → 0.4.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.
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ = 0.4.0
2
+ * Rakismet is no longer injected into ActiveRecord or ActionController
3
+ * API changes to support newly decoupled modules
4
+ * Use Jeweler to manage gemspec
1
5
  = 0.3.6
2
6
  * Allow attributes to fall through to methods or AR attributes
3
7
  = 0.3.5
data/README.md CHANGED
@@ -72,8 +72,8 @@ however. If yours differ, just tell Rakismet what to call them:
72
72
  class Comment
73
73
  include Rakismet::Model
74
74
  attr_accessor :commenter_name, :commenter_email
75
- rakismet_attributes :author => :commenter_name,
76
- :author_email => :commenter_email
75
+ rakismet_attrs :author => :commenter_name,
76
+ :author_email => :commenter_email
77
77
  end
78
78
 
79
79
  Or you can pass in a proc, to access associations:
@@ -81,8 +81,8 @@ Or you can pass in a proc, to access associations:
81
81
  class Comment < ActiveRecord::Base
82
82
  include Rakismet::Model
83
83
  belongs_to :author
84
- rakismet_attributes :author => proc { author.name },
85
- :author_email => proc { author.email }
84
+ rakismet_attrs :author => proc { author.name },
85
+ :author_email => proc { author.email }
86
86
  end
87
87
 
88
88
  Rakismet::Controller
data/VERSION.yml CHANGED
@@ -1,4 +1,5 @@
1
- ---
2
- :major: 0
1
+ ---
3
2
  :minor: 4
4
- :patch: 0
3
+ :build:
4
+ :patch: 1
5
+ :major: 0
data/lib/rakismet.rb CHANGED
@@ -2,6 +2,10 @@ require 'net/http'
2
2
  require 'uri'
3
3
  require 'yaml'
4
4
 
5
+ require 'rakismet/model'
6
+ require 'rakismet/filter'
7
+ require 'rakismet/controller'
8
+
5
9
  module Rakismet
6
10
  def self.version
7
11
  @version ||= begin
@@ -11,7 +15,7 @@ module Rakismet
11
15
  end
12
16
 
13
17
  class Base
14
- cattr_accessor :valid_key, :rakismet_binding
18
+ cattr_accessor :valid_key, :current_request
15
19
 
16
20
  class << self
17
21
  def validate_key
@@ -58,7 +62,6 @@ module Rakismet
58
62
  end
59
63
 
60
64
  Undefined = Class.new(NameError)
61
- NoBinding = Class.new(NameError)
62
65
 
63
66
  HEADERS = {
64
67
  'User-Agent' => "Rails/#{Rails::VERSION::STRING} | Rakismet/#{Rakismet.version}",
@@ -4,22 +4,15 @@ module Rakismet
4
4
  def self.included(base)
5
5
  base.class_eval do
6
6
  extend ClassMethods
7
- around_filter :rakismet
7
+ around_filter Rakismet::Filter
8
8
  end
9
9
  end
10
-
11
- def rakismet(&block)
12
- Rakismet::Base.rakismet_binding = binding
13
- yield
14
- Rakismet::Base.rakismet_binding = nil
15
- end
16
- private :rakismet
17
10
 
18
11
  module ClassMethods
19
12
  def rakismet_filter(opts={})
20
- skip_filter :rakismet # in case we're inheriting from another Rakismeted controller
13
+ skip_filter Rakismet::Filter # in case we're inheriting/overriding an existing Rakismet filter
21
14
  opts.assert_valid_keys(:only, :except)
22
- self.around_filter :rakismet, opts
15
+ self.around_filter Rakismet::Filter, opts
23
16
  end
24
17
  end
25
18
 
@@ -0,0 +1,10 @@
1
+ class Rakismet::Filter
2
+ def self.filter(controller)
3
+ begin
4
+ Rakismet::Base.current_request = controller.request
5
+ yield
6
+ ensure
7
+ Rakismet::Base.current_request = nil
8
+ end
9
+ end
10
+ end
@@ -30,25 +30,31 @@ module Rakismet
30
30
 
31
31
  module InstanceMethods
32
32
  def spam?
33
- data = akismet_data
33
+ if instance_variable_defined? :@_spam
34
+ @_spam
35
+ else
36
+ data = akismet_data
34
37
 
35
- unless Rakismet::Base.rakismet_binding.nil?
36
- { :referrer => 'request.referer', :user_ip => 'request.remote_ip',
37
- :user_agent => 'request.user_agent' }.each_pair do |k,v|
38
- data[k] = eval(v, Rakismet::Base.rakismet_binding) || ''
38
+ unless Rakismet::Base.current_request.nil?
39
+ { :referrer => :referer, :user_ip => :remote_ip,
40
+ :user_agent => :user_agent }.each_pair do |k,v|
41
+ data[k] = Rakismet::Base.current_request.send(v) || ''
42
+ end
39
43
  end
40
- end
41
44
 
42
- self.akismet_response = Rakismet::Base.akismet_call('comment-check', data)
43
- self.akismet_response == 'true'
45
+ self.akismet_response = Rakismet::Base.akismet_call('comment-check', data)
46
+ @_spam = self.akismet_response == 'true'
47
+ end
44
48
  end
45
49
 
46
50
  def spam!
47
51
  Rakismet::Base.akismet_call('submit-spam', akismet_data)
52
+ @_spam = true
48
53
  end
49
54
 
50
55
  def ham!
51
56
  Rakismet::Base.akismet_call('submit-ham', akismet_data)
57
+ @_spam = false
52
58
  end
53
59
 
54
60
  private
@@ -11,31 +11,20 @@ class StubController < ActionController::Base
11
11
  end
12
12
 
13
13
  describe StubController do
14
-
15
- it "should set Rakismet::Base.rakismet_binding" do
16
- Rakismet::Base.should_receive(:rakismet_binding=).twice
17
- get :one
18
- end
19
-
20
- it "should return Rakismet::Base.rakismet_binding to nil after request" do
21
- get :one
22
- Rakismet::Base.rakismet_binding.should be_nil
23
- end
24
-
25
14
  it "should add around_filter" do
26
- StubController.filter_chain.map(&:class).should include(ActionController::Filters::AroundFilter)
15
+ StubController.filter_chain.map(&:method).should include(Rakismet::Filter)
27
16
  end
28
17
  end
29
18
 
30
19
  describe StubController.subclass('OnlyActions') { rakismet_filter(:only => :one) } do
31
20
 
32
21
  it "should add around filter to specified actions" do
33
- Rakismet::Base.should_receive(:rakismet_binding=).twice
22
+ Rakismet::Base.should_receive(:current_request=).twice
34
23
  get :one
35
24
  end
36
25
 
37
26
  it "should not add around filter to unspecified actions" do
38
- Rakismet::Base.should_not_receive(:rakismet_binding=)
27
+ Rakismet::Base.should_not_receive(:current_request=)
39
28
  get :two
40
29
  end
41
30
  end
@@ -43,12 +32,12 @@ end
43
32
  describe StubController.subclass('ExceptActions') { rakismet_filter(:except => :one) } do
44
33
 
45
34
  it "should not add around filter to specified actions" do
46
- Rakismet::Base.should_not_receive(:rakismet_binding=)
35
+ Rakismet::Base.should_not_receive(:current_request=)
47
36
  get :one
48
37
  end
49
38
 
50
39
  it "should add around filter to other actions" do
51
- Rakismet::Base.should_receive(:rakismet_binding=).twice
40
+ Rakismet::Base.should_receive(:current_request=).twice
52
41
  get :two
53
42
  end
54
43
  end
@@ -2,7 +2,7 @@ require File.dirname(__FILE__) + '/../spec_helper'
2
2
 
3
3
  describe Rakismet::Base do
4
4
 
5
- before do
5
+ before :all do
6
6
  load File.join(RAILS_ROOT, 'config', 'initializers', 'rakismet.rb')
7
7
  end
8
8
 
@@ -0,0 +1,24 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ Rakismet::TestingError = Class.new(StandardError)
4
+
5
+ describe Rakismet::Base do
6
+ before do
7
+ @request = mock('request')
8
+ @controller = mock('controller', :request => @request)
9
+ end
10
+
11
+ it "should set Rakismet::Base.current_request" do
12
+ Rakismet::Base.should_receive(:current_request=).with(@request).ordered
13
+ Rakismet::Base.should_receive(:current_request=).with(nil).ordered
14
+ Rakismet::Filter.filter(@controller, &lambda{})
15
+ end
16
+
17
+ it "should not retain the request object in case of error" do
18
+ begin
19
+ Rakismet::Filter.filter(@controller, &lambda{ raise Rakismet::TestingError })
20
+ rescue Rakismet::TestingError
21
+ Rakismet::Base.current_request.should be_nil
22
+ end
23
+ end
24
+ end
@@ -11,7 +11,7 @@ class StoredParams
11
11
  end
12
12
 
13
13
  describe AkismetModel do
14
-
14
+
15
15
  before do
16
16
  @model = AkismetModel.new
17
17
  comment_attrs.each_pair { |k,v| @model.stub!(k).and_return(v) }
@@ -125,7 +125,7 @@ describe AkismetModel do
125
125
  describe ".spam?" do
126
126
 
127
127
  before do
128
- Rakismet::Base.rakismet_binding = request_binding
128
+ Rakismet::Base.current_request = request
129
129
  end
130
130
 
131
131
  it "should eval request variables in context of Base.rakismet_binding" do
@@ -136,6 +136,12 @@ describe AkismetModel do
136
136
  @model.spam?
137
137
  end
138
138
 
139
+ it "should cache result of #spam?" do
140
+ Rakismet::Base.should_receive(:akismet_call).once
141
+ @model.spam?
142
+ @model.spam?
143
+ end
144
+
139
145
  it "should be true if comment is spam" do
140
146
  Rakismet::Base.stub!(:akismet_call).and_return('true')
141
147
  @model.should be_spam
@@ -153,14 +159,14 @@ describe AkismetModel do
153
159
  end
154
160
 
155
161
  it "should not throw an error if request vars are missing" do
156
- Rakismet::Base.rakismet_binding = nil_binding
162
+ Rakismet::Base.current_request = empty_request
157
163
  lambda { @model.spam? }.should_not raise_error(NoMethodError)
158
164
  end
159
165
  end
160
166
 
161
167
  describe StoredParams do
162
168
  before do
163
- Rakismet::Base.rakismet_binding = nil
169
+ Rakismet::Base.current_request = nil
164
170
  @model = StoredParams.new
165
171
  comment_attrs.each_pair { |k,v| @model.stub!(k).and_return(v) }
166
172
  end
@@ -183,6 +189,13 @@ describe AkismetModel do
183
189
  Rakismet::Base.should_receive(:akismet_call).with('submit-spam', akismet_attrs)
184
190
  @model.spam!
185
191
  end
192
+
193
+ it "should mutate #spam?" do
194
+ Rakismet::Base.stub!(:akismet_call)
195
+ @model.instance_variable_set(:@_spam, false)
196
+ @model.spam!
197
+ @model.should be_spam
198
+ end
186
199
  end
187
200
 
188
201
  describe ".ham!" do
@@ -190,6 +203,13 @@ describe AkismetModel do
190
203
  Rakismet::Base.should_receive(:akismet_call).with('submit-ham', akismet_attrs)
191
204
  @model.ham!
192
205
  end
206
+
207
+ it "should mutate #spam?" do
208
+ Rakismet::Base.stub!(:akismet_call)
209
+ @model.instance_variable_set(:@_spam, true)
210
+ @model.ham!
211
+ @model.should_not be_spam
212
+ end
193
213
  end
194
214
 
195
215
  private
@@ -206,18 +226,16 @@ describe AkismetModel do
206
226
  :comment_content => 'comment content' }.merge(attrs)
207
227
  end
208
228
 
209
- def request_binding
210
- request = OpenStruct.new(:remote_ip => '127.0.0.1',
211
- :user_agent => 'RSpec',
212
- :referer => 'http://test.host/referrer')
213
- binding
214
- end
215
-
216
- def nil_binding
217
- request = OpenStruct.new(:remote_ip => nil,
218
- :user_agent => nil,
219
- :referer => nil)
220
- binding
229
+ def request
230
+ OpenStruct.new(:remote_ip => '127.0.0.1',
231
+ :user_agent => 'RSpec',
232
+ :referer => 'http://test.host/referrer')
233
+ end
234
+
235
+ def empty_request
236
+ OpenStruct.new(:remote_ip => nil,
237
+ :user_agent => nil,
238
+ :referer => nil)
221
239
  end
222
240
 
223
241
  end
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rakismet
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ hash: 13
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 4
9
+ - 1
10
+ version: 0.4.1
5
11
  platform: ruby
6
12
  authors:
7
13
  - Josh French
@@ -9,7 +15,7 @@ autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
17
 
12
- date: 2010-02-25 00:00:00 -05:00
18
+ date: 2010-05-27 00:00:00 -04:00
13
19
  default_executable:
14
20
  dependencies: []
15
21
 
@@ -33,9 +39,11 @@ files:
33
39
  - install.rb
34
40
  - lib/rakismet.rb
35
41
  - lib/rakismet/controller.rb
42
+ - lib/rakismet/filter.rb
36
43
  - lib/rakismet/model.rb
37
44
  - spec/controllers/rakismet_controller_spec.rb
38
45
  - spec/models/base_spec.rb
46
+ - spec/models/rakismet_filter_spec.rb
39
47
  - spec/models/rakismet_model_spec.rb
40
48
  - spec/spec.opts
41
49
  - spec/spec_helper.rb
@@ -50,26 +58,33 @@ rdoc_options:
50
58
  require_paths:
51
59
  - lib
52
60
  required_ruby_version: !ruby/object:Gem::Requirement
61
+ none: false
53
62
  requirements:
54
63
  - - ">="
55
64
  - !ruby/object:Gem::Version
65
+ hash: 3
66
+ segments:
67
+ - 0
56
68
  version: "0"
57
- version:
58
69
  required_rubygems_version: !ruby/object:Gem::Requirement
70
+ none: false
59
71
  requirements:
60
72
  - - ">="
61
73
  - !ruby/object:Gem::Version
74
+ hash: 3
75
+ segments:
76
+ - 0
62
77
  version: "0"
63
- version:
64
78
  requirements: []
65
79
 
66
80
  rubyforge_project: rakismet
67
- rubygems_version: 1.3.5
81
+ rubygems_version: 1.3.7
68
82
  signing_key:
69
83
  specification_version: 3
70
84
  summary: Akismet and TypePad AntiSpam integration for Rails.
71
85
  test_files:
72
86
  - spec/controllers/rakismet_controller_spec.rb
73
87
  - spec/models/base_spec.rb
88
+ - spec/models/rakismet_filter_spec.rb
74
89
  - spec/models/rakismet_model_spec.rb
75
90
  - spec/spec_helper.rb