green_eggs_and_spam 0.1.0
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/.gitignore +5 -0
- data/Gemfile +4 -0
- data/README.md +83 -0
- data/Rakefile +2 -0
- data/green_eggs_and_spam.gemspec +23 -0
- data/lib/green_eggs_and_spam.rb +7 -0
- data/lib/green_eggs_and_spam/action_controller.rb +33 -0
- data/lib/green_eggs_and_spam/anti_spam.rb +29 -0
- data/lib/green_eggs_and_spam/form_helper.rb +22 -0
- data/lib/green_eggs_and_spam/version.rb +3 -0
- data/public/images/antispam/1.jpg +0 -0
- data/public/images/antispam/2.jpg +0 -0
- data/public/images/antispam/3.jpg +0 -0
- metadata +79 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
Green Eggs and Spam
|
2
|
+
===================
|
3
|
+
|
4
|
+
A simple way to filter spam in your rails forms. Green eggs and spam presents the user with a simple question: **What color is this image?**
|
5
|
+
|
6
|
+
You'll supply the images and a key of which one's which. The gem will handle the rest.
|
7
|
+
|
8
|
+
|
9
|
+
** ----- under development ----- **
|
10
|
+
|
11
|
+
|
12
|
+
Usage
|
13
|
+
-----
|
14
|
+
|
15
|
+
Install the gem just like you would any other:
|
16
|
+
|
17
|
+
(sudo) gem install green_eggs_and_spam
|
18
|
+
|
19
|
+
# or with bundler
|
20
|
+
|
21
|
+
gem 'green_eggs_and_spam', '>= 0.1.0'
|
22
|
+
|
23
|
+
|
24
|
+
Create a handful of color coded images and name them `1.png`, `2.png`, etc. Tell Green Eggs and Spam which ones which with an initializer:
|
25
|
+
|
26
|
+
# config/initializers/green_eggs_and_spam.rb
|
27
|
+
|
28
|
+
GreenEggsAndSpam::AntiSpam.key_index = { "1" => "blue", "2" => "green", "3" => "red" }
|
29
|
+
|
30
|
+
|
31
|
+
In your controller:
|
32
|
+
|
33
|
+
class CommentsController < ApplicationController
|
34
|
+
|
35
|
+
has_anti_spam
|
36
|
+
|
37
|
+
def create
|
38
|
+
... # your code
|
39
|
+
|
40
|
+
# add an error unless the anti spam question was answered correctly
|
41
|
+
@comment.errors[:base] << "Spam Detected! Please make sure you've properly answered the anti spam question." unless anti_spam_valid?
|
42
|
+
|
43
|
+
... # the rest of your action
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
In your form:
|
50
|
+
|
51
|
+
= form_for @comment, :url => comment_path do |f|
|
52
|
+
%p
|
53
|
+
= f.label :comment
|
54
|
+
= f.text_field :comment
|
55
|
+
|
56
|
+
// Here's what your interested in:
|
57
|
+
%p
|
58
|
+
= anti_spam_form, "What color is this piece of bacon?" # the optional argument is your custom question
|
59
|
+
|
60
|
+
= f.submit 'send'
|
61
|
+
|
62
|
+
|
63
|
+
Customization:
|
64
|
+
|
65
|
+
So you're using `.gif`'s or you don't want the images stored in `/images/antispam`. Here's some available options for the form helper.
|
66
|
+
|
67
|
+
# the defaults
|
68
|
+
{
|
69
|
+
:alt => 'AntiSpam Image',
|
70
|
+
:class => 'antispam-image',
|
71
|
+
:path => '/images/antispam',
|
72
|
+
:extension => 'jpg'
|
73
|
+
}
|
74
|
+
|
75
|
+
# usage
|
76
|
+
anti_spam_form, "Your custom color question?", { :extension => 'png', :path => '/images' }
|
77
|
+
|
78
|
+
|
79
|
+
|
80
|
+
License
|
81
|
+
-------
|
82
|
+
|
83
|
+
Copyright (c) 2011 Spencer Steffen, released under the New BSD License All rights reserved.
|
data/Rakefile
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "green_eggs_and_spam/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "green_eggs_and_spam"
|
7
|
+
s.version = GreenEggsAndSpam::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Spencer Steffen"]
|
10
|
+
s.email = ["spencer@citrusme.com"]
|
11
|
+
s.homepage = ""
|
12
|
+
s.summary = %q{A simple way to filter spam in your rails forms.}
|
13
|
+
s.description = %q{Green eggs and spam presents the user with a simple question: What color is this image? You'll supply the images and a key of which one's which, and the gem will help with the rest.}
|
14
|
+
|
15
|
+
s.rubyforge_project = "green_eggs_and_spam"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
|
22
|
+
s.add_dependency("rails", ">= 3.0.0")
|
23
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module GreenEggsAndSpam
|
2
|
+
|
3
|
+
module ActionController
|
4
|
+
|
5
|
+
def self.included(base)
|
6
|
+
base.extend GreenEggsAndSpam::ActionController::ClassMethods
|
7
|
+
end
|
8
|
+
|
9
|
+
module ClassMethods
|
10
|
+
def has_anti_spam
|
11
|
+
self.send(:include, GreenEggsAndSpam::ActionController::InstanceMethods)
|
12
|
+
self.class_eval do
|
13
|
+
helper GreenEggsAndSpam::AntiSpamFormHelper
|
14
|
+
before_filter :setup_anti_spam, :only => [:index,:new, :create]
|
15
|
+
private
|
16
|
+
def setup_anti_spam
|
17
|
+
@antispam_key = GreenEggsAndSpam::AntiSpam.random_key
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
module InstanceMethods
|
24
|
+
def anti_spam_valid?
|
25
|
+
GreenEggsAndSpam::AntiSpam.valid?(params)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
ActionController::Base.send(:include, GreenEggsAndSpam::ActionController) if defined?(ActionController)
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module GreenEggsAndSpam
|
2
|
+
module AntiSpam
|
3
|
+
|
4
|
+
extend self
|
5
|
+
|
6
|
+
def key_index
|
7
|
+
@key_index ||= { "1" => "blue", "2" => "green", "3" => "red" }
|
8
|
+
end
|
9
|
+
|
10
|
+
def key_index=(value)
|
11
|
+
@key_index = value
|
12
|
+
end
|
13
|
+
|
14
|
+
def random_key
|
15
|
+
rand(key_index.keys.length) + 1
|
16
|
+
end
|
17
|
+
|
18
|
+
def valid?(params={})
|
19
|
+
key = params[:antispam_key].to_s
|
20
|
+
val = params[:antispam].to_s
|
21
|
+
return false if key.empty? || val.empty?
|
22
|
+
answer = key_index[key.to_s]
|
23
|
+
regex = Regexp.new(answer, 'i')
|
24
|
+
return val.match(regex) != nil
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module GreenEggsAndSpam
|
2
|
+
|
3
|
+
module AntiSpamFormHelper
|
4
|
+
|
5
|
+
def anti_spam_form(question="What color is this image?", options={})
|
6
|
+
key = @antispam_key || 0
|
7
|
+
options = { :alt => 'AntiSpam Image', :class => 'antispam-image', :path => '/images/antispam', :extension => 'jpg' }.merge(options)
|
8
|
+
choices = GreenEggsAndSpam::AntiSpam.key_index.values.to_a
|
9
|
+
choices[choices.length - 1] = "or #{choices.last}"
|
10
|
+
[
|
11
|
+
label_tag(:antispam, question, :class => 'antispam-label'),
|
12
|
+
tag(:br),
|
13
|
+
text_field_tag(:antispam, '', :class => 'antispam-field text required', :title => choices.join(", ")),
|
14
|
+
hidden_field_tag(:antispam_key, key),
|
15
|
+
tag(:br, :class => 'clear'),
|
16
|
+
image_tag(File.join(options[:path], "#{key}.#{options[:extension]}"), :alt => options[:alt], :class => options[:class])
|
17
|
+
].join("\n").html_safe
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
Binary file
|
Binary file
|
Binary file
|
metadata
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: green_eggs_and_spam
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.1.0
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Spencer Steffen
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-02-22 00:00:00 -08:00
|
14
|
+
default_executable:
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: rails
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: 3.0.0
|
25
|
+
type: :runtime
|
26
|
+
version_requirements: *id001
|
27
|
+
description: "Green eggs and spam presents the user with a simple question: What color is this image? You'll supply the images and a key of which one's which, and the gem will help with the rest."
|
28
|
+
email:
|
29
|
+
- spencer@citrusme.com
|
30
|
+
executables: []
|
31
|
+
|
32
|
+
extensions: []
|
33
|
+
|
34
|
+
extra_rdoc_files: []
|
35
|
+
|
36
|
+
files:
|
37
|
+
- .gitignore
|
38
|
+
- Gemfile
|
39
|
+
- README.md
|
40
|
+
- Rakefile
|
41
|
+
- green_eggs_and_spam.gemspec
|
42
|
+
- lib/green_eggs_and_spam.rb
|
43
|
+
- lib/green_eggs_and_spam/action_controller.rb
|
44
|
+
- lib/green_eggs_and_spam/anti_spam.rb
|
45
|
+
- lib/green_eggs_and_spam/form_helper.rb
|
46
|
+
- lib/green_eggs_and_spam/version.rb
|
47
|
+
- public/images/antispam/1.jpg
|
48
|
+
- public/images/antispam/2.jpg
|
49
|
+
- public/images/antispam/3.jpg
|
50
|
+
has_rdoc: true
|
51
|
+
homepage: ""
|
52
|
+
licenses: []
|
53
|
+
|
54
|
+
post_install_message:
|
55
|
+
rdoc_options: []
|
56
|
+
|
57
|
+
require_paths:
|
58
|
+
- lib
|
59
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
60
|
+
none: false
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: "0"
|
65
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: "0"
|
71
|
+
requirements: []
|
72
|
+
|
73
|
+
rubyforge_project: green_eggs_and_spam
|
74
|
+
rubygems_version: 1.5.0
|
75
|
+
signing_key:
|
76
|
+
specification_version: 3
|
77
|
+
summary: A simple way to filter spam in your rails forms.
|
78
|
+
test_files: []
|
79
|
+
|