lib/rakismet/model.rb in rakismet-0.4.2 vs lib/rakismet/model.rb in rakismet-1.0.0
- old
+ new
@@ -2,27 +2,27 @@
module Model
def self.included(base)
base.class_eval do
attr_accessor :akismet_response
- class_inheritable_hash :akismet_attrs
+ class << self; attr_accessor :akismet_attrs; end
extend ClassMethods
include InstanceMethods
self.rakismet_attrs
end
end
module ClassMethods
def rakismet_attrs(args={})
self.akismet_attrs ||= {}
[:comment_type, :author, :author_url, :author_email, :content].each do |field|
- # clunky, but throwing around +type+ will break your heart
- fieldname = field.to_s =~ %r(^comment_) ? field : "comment_#{field}".intern
- self.akismet_attrs[fieldname] = args.delete(field) || field
+ # clunky, but throwing around +type+ will break your heart
+ fieldname = field.to_s =~ %r(^comment_) ? field : "comment_#{field}".intern
+ self.akismet_attrs[fieldname] = args.delete(field) || field
end
[:user_ip, :user_agent, :referrer].each do |field|
- self.akismet_attrs[field] = args.delete(field)
+ self.akismet_attrs[field] = args.delete(field) || field
end
args.each_pair do |f,v|
self.akismet_attrs[f] = v
end
end
@@ -32,47 +32,49 @@
def spam?
if instance_variable_defined? :@_spam
@_spam
else
data = akismet_data
-
- unless Rakismet::Base.current_request.nil?
- { :referrer => :referer, :user_ip => :remote_ip,
- :user_agent => :user_agent }.each_pair do |k,v|
- data[k] = Rakismet::Base.current_request.send(v) || ''
- end
- end
-
- self.akismet_response = Rakismet::Base.akismet_call('comment-check', data)
+ self.akismet_response = Rakismet.akismet_call('comment-check', data)
@_spam = self.akismet_response == 'true'
end
end
def spam!
- Rakismet::Base.akismet_call('submit-spam', akismet_data)
+ Rakismet.akismet_call('submit-spam', akismet_data)
@_spam = true
end
def ham!
- Rakismet::Base.akismet_call('submit-ham', akismet_data)
+ Rakismet.akismet_call('submit-ham', akismet_data)
@_spam = false
end
private
def akismet_data
- self.class.akismet_attrs.keys.inject({}) do |data,attr|
- data.merge attr => if self.class.akismet_attrs[attr].is_a?(Proc)
- instance_eval(&self.class.akismet_attrs[attr])
- elsif !self.class.akismet_attrs[attr].nil? && respond_to?(self.class.akismet_attrs[attr])
- send(self.class.akismet_attrs[attr])
- elsif !self.class.akismet_attrs[attr].nil?
- self.class.akismet_attrs[attr]
+ akismet = self.class.akismet_attrs.keys.inject({}) do |data,attr|
+ mapped_field = self.class.akismet_attrs[attr]
+ data.merge attr => if mapped_field.is_a?(Proc)
+ instance_eval(&mapped_field)
+ elsif !mapped_field.nil? && respond_to?(mapped_field)
+ send(mapped_field)
+ elsif not [:comment_type, :author, :author_email,
+ :author_url, :content, :user_ip, :referrer,
+ :user_agent].include?(mapped_field)
+ # we've excluded any fields that appear to
+ # have their default unmapped values
+ mapped_field
elsif respond_to?(attr)
send(attr)
+ elsif Rakismet.request.respond_to?(attr)
+ Rakismet.request.send(attr)
end
- end.delete_if { |k,v| v.blank? }
+ end
+ akismet.delete_if { |k,v| v.nil? || v.empty? }
+ akismet[:comment_type] ||= 'comment'
+ akismet
end
end
end
-end
\ No newline at end of file
+end