invisible_captcha 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  # Invisible Captcha
2
- Simple spam protection for Rails applications using honeypot strategy. Support for ActiveModel (and ActiveRecord) forms and for non-RESTful resources.
2
+ Simple spam protection for Rails applications using honeypot strategy and for better user experience. Support for ActiveRecord (and ActiveModel) forms and for non-RESTful resources.
3
3
 
4
4
  ## Installation
5
5
  Add this line to you Gemfile:
@@ -16,8 +16,8 @@ gem install invisible_captcha
16
16
 
17
17
  ## Usage
18
18
 
19
- ### RESTful style
20
- In your form:
19
+ ### Model style
20
+ View code:
21
21
 
22
22
  ```erb
23
23
  <%= form_for(@topic) do |f| %>
@@ -31,14 +31,14 @@ In your form:
31
31
  <% end %>
32
32
  ```
33
33
 
34
- In your model:
34
+ Model code:
35
35
 
36
36
  ```ruby
37
37
  validates :subtitle, :invisible_captcha => true
38
38
  ```
39
39
 
40
- ### Non-RESTful style
41
- In your form:
40
+ ### Controller style
41
+ View code:
42
42
 
43
43
  ```erb
44
44
  <%= form_tag(search_path) do %>
@@ -48,10 +48,41 @@ In your form:
48
48
  <% end %>
49
49
  ```
50
50
 
51
- In your controller:
51
+ Controller code:
52
52
 
53
53
  ```ruby
54
- before_filter :check_invisible_captcha
54
+ before_filter :check_invisible_captcha, :only => [:create, :update]
55
+ ```
56
+
57
+ This filter returns a response that has no content (only headers). If you desire a different behaviour, this lib provides a method to check manualy if invisible captcha (fake field) is present:
58
+
59
+ ```ruby
60
+ if invisible_captcha?
61
+ # invalid
62
+ else
63
+ # valid
64
+ end
65
+ ```
66
+
67
+ If you want to use it in this way but using RESTful forms with `form_for`, you can call this method with the fake field as a parameters:
68
+
69
+ ```ruby
70
+ if invisible_captcha?(:topic, :subtitle)
71
+ # invalid
72
+ else
73
+ # valid
74
+ end
75
+ ```
76
+
77
+ ### Setup
78
+ If you want to customize some defaults, add the following to an initializer (config/initializers/invisible_captcha.rb):
79
+
80
+ ```
81
+ InvisibleCaptcha.setup do |ic|
82
+ ic.sentence_for_humans = 'Another sentence'
83
+ ic.error_message = 'Another error message'
84
+ ic.fake_fields << 'fake_field'
85
+ end
55
86
  ```
56
87
 
57
88
  ## License
data/Rakefile CHANGED
@@ -17,7 +17,7 @@ Jeweler::Tasks.new do |gem|
17
17
  gem.homepage = "http://github.com/markets/invisible_captcha"
18
18
  gem.license = "MIT"
19
19
  gem.summary = %Q{Simple honeypot protection for RoR apps}
20
- gem.description = %Q{Simple spam protection for Rails applications using honeypot strategy.}
20
+ gem.description = %Q{Simple spam protection for Rails applications using honeypot strategy for better user experience.}
21
21
  gem.email = "srmarc.ai@gmail.com"
22
22
  gem.authors = ["Marc Anguera Insa"]
23
23
  # dependencies defined in Gemfile
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.0
1
+ 0.6.0
@@ -5,12 +5,12 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "invisible_captcha"
8
- s.version = "0.5.0"
8
+ s.version = "0.6.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Marc Anguera Insa"]
12
- s.date = "2013-09-02"
13
- s.description = "Simple spam protection for Rails applications using honeypot strategy."
12
+ s.date = "2013-09-03"
13
+ s.description = "Simple spam protection for Rails applications using honeypot strategy for better user experience."
14
14
  s.email = "srmarc.ai@gmail.com"
15
15
  s.extra_rdoc_files = [
16
16
  "README.md"
@@ -5,17 +5,28 @@ require "#{GEM_PATH}/form_helpers.rb"
5
5
  require "#{GEM_PATH}/validator.rb"
6
6
 
7
7
  module InvisibleCaptcha
8
-
9
8
  # Default sentence for humans if text field is visible
10
9
  mattr_accessor :sentence_for_humans
11
10
  self.sentence_for_humans = 'If you are a human, ignore this field'
12
11
 
13
12
  # Default error message for validator
14
13
  mattr_accessor :error_message
15
- self.error_message = 'YOU ARE A ROBOT!'
14
+ self.error_message = 'You are a robot!'
15
+
16
+ # Default fake fields for controller based workflow
17
+ mattr_accessor :fake_fields
18
+ self.fake_fields = ['foo_id', 'bar_id', 'baz_id']
16
19
 
17
- # Default fake field name for text_field_tag
18
- mattr_accessor :fake_field
19
- self.fake_field = :query
20
+ # InvisibleCaptcha.setup do |ic|
21
+ # ic.sentence_for_humans = 'Another sentence'
22
+ # ic.error_message = 'Another error message'
23
+ # ic.fake_fields << 'fake_field'
24
+ # end
25
+ def self.setup
26
+ yield(self)
27
+ end
20
28
 
29
+ def self.fake_field
30
+ self.fake_fields.sample
31
+ end
21
32
  end
@@ -2,9 +2,19 @@ module InvisibleCaptcha
2
2
  module ControllerHelpers
3
3
 
4
4
  def check_invisible_captcha
5
- head 200 if params[InvisibleCaptcha.fake_field].present?
5
+ head 200 if invisible_captcha?
6
6
  end
7
7
 
8
+ def invisible_captcha?(fake_resource = nil, fake_field = nil)
9
+ if fake_resource && fake_field
10
+ return true if params[fake_resource][fake_field].present?
11
+ else
12
+ InvisibleCaptcha.fake_fields.each do |field|
13
+ return true if params[field].present?
14
+ end
15
+ end
16
+ false
17
+ end
8
18
  end
9
19
  end
10
20
 
@@ -4,7 +4,7 @@ module InvisibleCaptcha
4
4
  class InvisibleCaptchaValidator < ActiveModel::EachValidator
5
5
 
6
6
  def validate_each(record, attribute, value)
7
- if robot_presence?(record, attribute)
7
+ if invisible_captcha?(record, attribute)
8
8
  record.errors.clear
9
9
  record.errors[:base] = InvisibleCaptcha.error_message
10
10
  end
@@ -12,7 +12,7 @@ module InvisibleCaptcha
12
12
 
13
13
  private
14
14
 
15
- def robot_presence?(object, attribute)
15
+ def invisible_captcha?(object, attribute)
16
16
  object.send(attribute).present?
17
17
  end
18
18
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: invisible_captcha
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-09-02 00:00:00.000000000 Z
12
+ date: 2013-09-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activemodel
@@ -75,7 +75,8 @@ dependencies:
75
75
  - - ! '>='
76
76
  - !ruby/object:Gem::Version
77
77
  version: '0'
78
- description: Simple spam protection for Rails applications using honeypot strategy.
78
+ description: Simple spam protection for Rails applications using honeypot strategy
79
+ for better user experience.
79
80
  email: srmarc.ai@gmail.com
80
81
  executables: []
81
82
  extensions: []
@@ -107,7 +108,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
107
108
  version: '0'
108
109
  segments:
109
110
  - 0
110
- hash: -400465203
111
+ hash: 260613869
111
112
  required_rubygems_version: !ruby/object:Gem::Requirement
112
113
  none: false
113
114
  requirements: