<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -19,7 +19,7 @@ module Rakismet
            self.akismet_attrs[fieldname] = args.delete(field) || field
         end
         [:user_ip, :user_agent, :referrer].each do |field|
-          self.akismet_attrs[field] = (args.delete(field) || field) if args.has_key?(field) or self.public_instance_methods.include?(field.to_s)
+          self.akismet_attrs[field] = args.delete(field)
         end
         args.each_pair do |f,v|
           self.akismet_attrs[f] = v
@@ -56,12 +56,14 @@ module Rakismet
           self.class.akismet_attrs.keys.inject({}) do |data,attr|
             data.merge attr =&gt;  if self.class.akismet_attrs[attr].is_a?(Proc)
                                   instance_eval(&amp;self.class.akismet_attrs[attr])
-                                elsif respond_to?(self.class.akismet_attrs[attr])
+                                elsif !self.class.akismet_attrs[attr].nil? &amp;&amp; respond_to?(self.class.akismet_attrs[attr])
                                   send(self.class.akismet_attrs[attr])
-                                else
+                                elsif !self.class.akismet_attrs[attr].nil?
                                   self.class.akismet_attrs[attr]
+                                elsif respond_to?(attr)
+                                  send(attr)
                                 end
-          end
+          end.delete_if { |k,v| v.blank? }
         end
     end
     </diff>
      <filename>lib/rakismet/model_extensions.rb</filename>
    </modified>
    <modified>
      <diff>@@ -26,6 +26,12 @@ describe AkismetModel do
      end
   end
   
+  it &quot;should have nil placeholders for optional binding variables&quot; do
+    [:user_ip, :user_agent, :referrer].each do |field|
+      AkismetModel.akismet_attrs.should have_key(field)
+     end
+  end
+
   mapped_params = { :comment_type =&gt; :type2, :author =&gt; :author2, :content =&gt; :content2,
                     :author_email =&gt; :author_email2, :author_url =&gt; :author_url2 }
     
@@ -37,18 +43,10 @@ describe AkismetModel do
        end
     end
   end
-  
-  describe implicit = AkismetModel.subclass('Implicit') { attr_accessor(:user_ip, :user_agent, :referrer); has_rakismet } do
-    it &quot;should map optional fields if they are present in the model&quot; do
-      [:user_ip, :user_agent, :referrer].each do |field|
-        implicit.akismet_attrs[field].should eql(field)
-      end
-    end
-  end
-  
+
   extended_params = { :user_ip =&gt; :stored_ip, :user_agent =&gt; :stored_agent,
                       :referrer =&gt; :stored_referrer }
-                      
+
   describe extended = AkismetModel.subclass('Extended') { has_rakismet(extended_params.dup) } do
     
     before do</diff>
      <filename>spec/models/model_extension_spec.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>2138021cccd074a8e0eb1da86a2d5894700e8fe4</id>
    </parent>
  </parents>
  <author>
    <name>Josh French</name>
    <email>josh@digitalpulp.com</email>
  </author>
  <url>http://github.com/jfrench/rakismet/commit/b2d7ac4e49707523c1a8f36b9d6835ed75fd3dc2</url>
  <id>b2d7ac4e49707523c1a8f36b9d6835ed75fd3dc2</id>
  <committed-date>2009-11-05T14:03:56-08:00</committed-date>
  <authored-date>2009-11-05T14:03:56-08:00</authored-date>
  <message>Allow custom attributes to fall through to instance methods *or* attributes</message>
  <tree>e87e7ddaedc7fff77cb03f750a65c3ec686127a7</tree>
  <committer>
    <name>Josh French</name>
    <email>josh@digitalpulp.com</email>
  </committer>
</commit>
