molasses_jar

A simple ActiveRecord extension for creating inverse captchas using the Honeypot pattern.

An inverse captcha uses a specific form field that the user does not see, but bots and spiders will. If a value is set on the input, then the model is marked as being either spam or invalid depending on how you chose to implement the gem.

Nuts and Bolts

MolassesJar will add simple honeypot verification to any model you wish. It creates an attribute called :molasses_jar on the desired object and then checks to see if there is a value assigned to it.

MolassesJar will look for a boolean attribute called spam on your model. If it finds it, it will update the attribute to be true if it thinks the record is being submitted by a robot, thus preventing the loss of legitimate content.

If it does not find a spam attribute on your model, it will add an error to the molasses_jar attribute, thus preventing the model from validating and saving.

How To Use

Install the gem through Bundler

    gem "molasses_jar"

If flagging is desired, add a spam attribute to your Model

Generate a migration to add the spam attribute to your model. It is recommended that you index the attribute sice it will appear in a where clause through the included scope

    def change
            add_column :contact_forms, :spam, :boolean, :default => false
            add_index :contact_forms, :spam
            ContactForm.update_all(:spam => false)
    end

Add the Extensions to your Model

    class ContactForm < ActiveRecord::Base  
            include MolassesJar::Extensions  
    end

Add the input to your forms

You will need to add an input to your object’s form with the attribute :molasses_jar. Then use css, to either display: none; or move the form off the screen using absolute positioning. Best practices suggests you include a label with your input field and include some sort of message that says “If you’re a human, please leave this field blank” to insure accessability.

HTML/HAML

    = form.label :molasses_jar, "If you are a human, please leave this field blank", :class => "agglutinative"
    = form.text_field :molasses_jar, :class => "agglutinative"

CSS

    .agglutinative {
            display: none;
    }

Testing

Specs are current. Please refer to spec/molasses_jar_spec.rb for testing examples. More to come soon.

Coming Soon

Interesting Reads on the Honeypot Approach

Contributing to molasses_jar

Copyright © 2012 mindtonic. See LICENSE.txt for further details.