Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

A simple way to filter spam in your rails forms

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 lib
Octocat-spinner-32 public
Octocat-spinner-32 test
Octocat-spinner-32 .gitignore
Octocat-spinner-32 .travis.yml
Octocat-spinner-32 Gemfile
Octocat-spinner-32 README.md
Octocat-spinner-32 Rakefile
Octocat-spinner-32 green_eggs_and_spam.gemspec
README.md

Green Eggs and Spam Build Status

A simple way to filter spam in your rails forms. GreenEggsAndSpam presents users with an easy question: What color is this image?

You'll supply the images and a key of which one's which. The gem will handle the rest.

Usage

Install the gem just like you would any other:

(sudo) gem install green_eggs_and_spam

# or with bundler

gem 'green_eggs_and_spam', '>= 0.2.1'

Create a handful of color coded images and name them something other than their color or design. 1.png, banana.png or firetruck.png for example. Tell GreenEggsandSpam which ones which with an initializer:

# config/initializers/green_eggs_and_spam.rb

GreenEggsAndSpam.options[:key_index] = { "1" => "blue", "banana" => "yellow", "firetruck" => "red" }

Or just use the defaults, making your images 1.png, 2.png, 3.png:

{ "1" => "red", "2" => "green", "3" => "blue" }

Include the helper in your form:

= form_for @comment, :url => comment_path do |f|
  %p
    = f.label :comment
    = f.text_field :comment

  // Here's what your interested in:
  %p
    = anti_spam_form "What color is this piece of bacon?"

    // the first optional argument is your custom question, the second is the form options hash

  = f.submit 'send'

Chances are your form is interacting with a model. If that's the case, hook up the validator to your model like so:

class Egg < ActiveRecord::Base

  validates_anti_spam

  # with options
  # validates_anti_spam :on => :create, :unless => proc{|r| # some logic }

end

Next, setup your controller with the has_anti_spam method. This will prepare the controller and give you access to the helper methods.

class EggsController < ApplicationController

  has_anti_spam

  def create

    # merge the antispam params into your model's params before validation
    @egg = Egg.new(params[:egg].merge(:antispam => params[:antispam]))

    # validate as usual
    if @egg.valid? && @egg.save
      # do something
    end

  end

end

That's it!

But what if my form isn't validating a model? No big deal, just use the anti_spam_valid? helper method in your controller.

class CommentsController < ApplicationController

  has_anti_spam

  def create

    if anti_spam_valid?
      # do something
    end

  end

end

Customization

So you're using .gif's or you're images aren't stored in /images/antispam. Here's some available options for the form helper.

# the defaults
{
  :alt => 'AntiSpam Image',
  :class => 'antispam-image',
  :path => '/images/antispam',
  :extension => 'jpg'
}

# inline
anti_spam_form, "Your custom color question?", { :extension => 'png', :path => '/images' }

# or set globally in your initializer
GreenEggsAndSpam.options[:form_options] = { :extension => 'png', :path => '/images' }

Demo

If you'd like to see GreenEggsAndSpam in action, there is a demo app running on heroku at http://green-eggs-and-spam-demo.heroku.com. There's a similar demo/test-app located in test/dummy if you'd like to run it locally.

git://github.com/citrus/green_eggs_and_spam.git
cd green_eggs_and_spam
bundle install
cd test/dummy
rake db:migrate
rails s

Testing

Tests can be run with rake test or just rake.

git://github.com/citrus/green_eggs_and_spam.git
cd green_eggs_and_spam
bundle
rake

License

Copyright (c) 2011 Spencer Steffen, released under the New BSD License All rights reserved.

Something went wrong with that request. Please try again.