acts_as_textcaptcha 3.0.6 → 3.0.7
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.
- checksums.yaml +4 -4
- data/.travis.yml +2 -0
- data/Gemfile +1 -1
- data/README.rdoc +17 -18
- data/acts_as_textcaptcha.gemspec +2 -1
- data/lib/acts_as_textcaptcha/textcaptcha.rb +2 -2
- data/lib/acts_as_textcaptcha/version.rb +1 -1
- data/test/schema.rb +4 -0
- data/test/test_helper.rb +1 -2
- data/test/test_models.rb +9 -0
- data/test/textcaptcha_test.rb +19 -0
- metadata +20 -6
- checksums.yaml.gz.asc +0 -12
- data.tar.gz.asc +0 -12
- metadata.gz.asc +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d0ed524bfc8d05da4dcdf2fb6a8b86a3f5d8e687
|
4
|
+
data.tar.gz: 60b3dcfd3c6fb65c71d5d096000b7c61c155e569
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6342b17c8d96acfe3cc00c1880ce041bcda55859c133099ecea51d3ec26b4c4ef11f3b92fbc8e5a67616c9f86a93152d1bf03d097af272da0fa40c30bc16326e
|
7
|
+
data.tar.gz: 3ec376171d993c203a4c13b463feb8fb815cfb5adc0ba9897cb79b58e8a105cfe6e85ca213a6d828490bd86e6d8cee5232fafec05a30e0fed81e9953b611b2e9
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
source '
|
1
|
+
source 'https://rubygems.org'
|
2
2
|
gemspec
|
data/README.rdoc
CHANGED
@@ -4,9 +4,9 @@
|
|
4
4
|
|
5
5
|
ActsAsTextcaptcha provides spam protection for your Rails models using logic questions from the excellent {Text CAPTCHA}[http://textcaptcha.com/] web service (by {Rob Tuley}[http://openknot.com/me/] of {Openknot}[http://openknot.com/]). It is also possible to configure your own questions and answers instead of using this API (or as a fall back in the unlikely event of the web service being unavailable)
|
6
6
|
|
7
|
-
The gem makes use of {bcrypt}[http://bcrypt-ruby.rubyforge.org/] encryption when comparing a guess with the correct answer(s). This gem is actively maintained, has good test coverage and is compatible with Rails 2.3
|
7
|
+
The gem makes use of {bcrypt}[http://bcrypt-ruby.rubyforge.org/] encryption when comparing a guess with the correct answer(s). This gem is actively maintained, has good test coverage and is compatible with Rails 2.3.*, Rails 3 and 4. If you have any issues {please report them here}[https://github.com/matthutchinson/acts_as_textcaptcha/issues].
|
8
8
|
|
9
|
-
Text CAPTCHA's logic questions are aimed at a child's age of 7, so can be solved easily by
|
9
|
+
Text CAPTCHA's logic questions are aimed at a child's age of 7, so they can be solved easily by even the most cognitively impaired users. As they involve human logic, questions cannot be solved by a robot. There are both advantages and disadvantages for using logic questions over image based captchas, {find out more at Text CAPTCHA}[http://textcaptcha.com/why].
|
10
10
|
|
11
11
|
== Demo
|
12
12
|
|
@@ -14,7 +14,7 @@ Here's a {fully working demo on heroku}[http://textcaptcha.heroku.com]!
|
|
14
14
|
|
15
15
|
== Installing
|
16
16
|
|
17
|
-
=== Rails
|
17
|
+
=== Rails
|
18
18
|
|
19
19
|
Just add the following to your Gemfile, then `bundle install`;
|
20
20
|
|
@@ -26,13 +26,7 @@ Add this to your environment.rb file, then `gem install acts_as_textcaptcha`;
|
|
26
26
|
|
27
27
|
config.gem 'acts_as_textcaptcha'
|
28
28
|
|
29
|
-
===
|
30
|
-
|
31
|
-
Or install as a plugin with;
|
32
|
-
|
33
|
-
rails plugin install git@github.com:matthutchinson/acts_as_textcaptcha.git
|
34
|
-
OR
|
35
|
-
script/plugin install git@github.com:matthutchinson/acts_as_textcaptcha.git
|
29
|
+
=== Or as a plugin
|
36
30
|
|
37
31
|
If you do decide to install this as a Rails plugin, you'll have to manually include the bcrypt-ruby gem in your Gemfile or environment config. Like so;
|
38
32
|
|
@@ -40,15 +34,21 @@ If you do decide to install this as a Rails plugin, you'll have to manually incl
|
|
40
34
|
OR
|
41
35
|
config.gem 'bcrypt-ruby', :lib => 'bcrypt'
|
42
36
|
|
37
|
+
Then install the plugin with rails or script/rails as follows;
|
38
|
+
|
39
|
+
rails plugin install git@github.com:matthutchinson/acts_as_textcaptcha.git
|
40
|
+
OR
|
41
|
+
script/plugin install git@github.com:matthutchinson/acts_as_textcaptcha.git
|
42
|
+
|
43
43
|
== Setting up
|
44
44
|
|
45
45
|
*NOTE:* The procedure for configuring your app *changed significantly* from v2.* to v3.* If you are having problems please carefully check the instructions below.
|
46
46
|
|
47
|
-
First {grab an API key for your website}[http://textcaptcha.com/api] then open Rails console (or any irb session) and generate a new BCrypt salt by typing;
|
47
|
+
First {grab an API key for your website}[http://textcaptcha.com/api] then open you Rails console (or any irb session) and generate a new BCrypt salt by typing;
|
48
48
|
|
49
49
|
require 'bcrypt';BCrypt::Engine.generate_salt
|
50
50
|
|
51
|
-
Next
|
51
|
+
Next add the following code to models you'd like to spam protect;
|
52
52
|
|
53
53
|
class Comment < ActiveRecord::Base
|
54
54
|
# (this is the most basic way to configure the gem, with an API key and Salt only)
|
@@ -81,7 +81,7 @@ Finally, in your form view add the spam question and answer fields using the tex
|
|
81
81
|
</div>
|
82
82
|
<% end %>
|
83
83
|
|
84
|
-
*NOTE:* If you'd rather NOT use this helper and prefer to write
|
84
|
+
*NOTE:* If you'd rather NOT use this helper and prefer to write your own view code, see the html produced from the textcaptcha_fields method in the source code.
|
85
85
|
|
86
86
|
=== Toggling Textcaptcha
|
87
87
|
|
@@ -173,8 +173,8 @@ For more details on the code please check the {documentation}[http://rdoc.info/p
|
|
173
173
|
|
174
174
|
What do you need?
|
175
175
|
|
176
|
-
* {Rails}[http://github.com/rails/rails] >= 2.3.2 (including Rails 3)
|
177
|
-
* {Ruby}[http://ruby-lang.org/] >= 1.8.7 (also tested with REE
|
176
|
+
* {Rails}[http://github.com/rails/rails] >= 2.3.2 (including Rails 3 and 4)
|
177
|
+
* {Ruby}[http://ruby-lang.org/] >= 1.8.7 (also tested with REE, RBX, 1.9.2, 1.9.3, 2.0.0)
|
178
178
|
* {bcrypt-ruby}[http://bcrypt-ruby.rubyforge.org/] gem (to securely encrypt spam answers)
|
179
179
|
* {Text CAPTCHA API key}[http://textcaptcha.com/register] (_optional_, since you can define your own logic questions)
|
180
180
|
* {MiniTest}[https://rubygems.org/gems/minitest] (_optional_ if you want to run the tests, built into Ruby 1.9)
|
@@ -199,14 +199,13 @@ What do you need?
|
|
199
199
|
== Todo
|
200
200
|
|
201
201
|
* Achieve 100% test coverage, currently at 93%
|
202
|
+
* Remove support for Rails 2.3.* in a future gem release (clean code and tests for this)
|
202
203
|
|
203
204
|
== Usage
|
204
205
|
|
205
|
-
This gem is used in a number of production websites and apps. It was originally extracted from code developed for {Bugle}[http://bugleblogs.com]
|
206
|
+
This gem is used in a number of production websites and apps. It was originally extracted from code developed for {Bugle}[http://bugleblogs.com]. If you're happily using acts_as_textcaptcha in production, let me know and I'll add you to this list!
|
206
207
|
|
207
208
|
* {matthewhutchinson.net}[http://matthewhutchinson.net]
|
208
209
|
* {pmFAQtory.com}[http://pmfaqtory.com]
|
209
210
|
* {The FAQtory}[http://faqtory.heroku.com]
|
210
211
|
* {DPT Watch, San Francisco}[http://www.dptwatch.com]
|
211
|
-
|
212
|
-
(if you're happily using acts_as_textcaptcha in production, let me know and I'll add you to this list)
|
data/acts_as_textcaptcha.gemspec
CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |s|
|
|
21
21
|
s.test_files = `git ls-files -- {test}/*`.split("\n")
|
22
22
|
s.require_paths = ["lib"]
|
23
23
|
|
24
|
-
s.add_dependency('bcrypt-ruby')
|
24
|
+
s.add_dependency('bcrypt-ruby', '~> 3.0.1')
|
25
25
|
|
26
26
|
s.add_development_dependency('rails')
|
27
27
|
s.add_development_dependency('bundler')
|
@@ -30,4 +30,5 @@ Gem::Specification.new do |s|
|
|
30
30
|
s.add_development_dependency('rdoc')
|
31
31
|
s.add_development_dependency('sqlite3')
|
32
32
|
s.add_development_dependency('fakeweb')
|
33
|
+
s.add_development_dependency('strong_parameters')
|
33
34
|
end
|
@@ -35,10 +35,10 @@ module ActsAsTextcaptcha
|
|
35
35
|
attr_accessor :spam_question, :spam_answers, :spam_answer, :skip_textcaptcha
|
36
36
|
|
37
37
|
if respond_to?(:accessible_attributes)
|
38
|
-
if accessible_attributes.nil?
|
38
|
+
if accessible_attributes.nil? && respond_to?(:attr_protected)
|
39
39
|
attr_protected :spam_question
|
40
40
|
attr_protected :skip_textcaptcha
|
41
|
-
|
41
|
+
elsif respond_to?(:attr_accessible)
|
42
42
|
attr_accessible :spam_answer, :spam_answers
|
43
43
|
end
|
44
44
|
end
|
data/test/schema.rb
CHANGED
data/test/test_helper.rb
CHANGED
data/test/test_models.rb
CHANGED
@@ -49,3 +49,12 @@ class Contact
|
|
49
49
|
acts_as_textcaptcha :questions => [{ :question => 'one+1', :answers => "2,two,апельсин" }],
|
50
50
|
:bcrypt_salt => '$2a$10$j0bmycH.SVfD1b5mpEGPpe'
|
51
51
|
end
|
52
|
+
|
53
|
+
# ActiveRecord model using the strong parameters gem
|
54
|
+
require 'strong_parameters'
|
55
|
+
|
56
|
+
class StrongWidget < ActiveRecord::Base
|
57
|
+
include ActiveModel::ForbiddenAttributesProtection
|
58
|
+
acts_as_textcaptcha 'questions' => [{ 'question' => '1+1', 'answers' => '2,two' }],
|
59
|
+
'bcrypt_salt' => '$2a$10$j0bmycH.SVfD1b5mpEGPpe'
|
60
|
+
end
|
data/test/textcaptcha_test.rb
CHANGED
@@ -73,6 +73,25 @@ describe 'Textcaptcha' do
|
|
73
73
|
end
|
74
74
|
end
|
75
75
|
|
76
|
+
describe 'with strong parameters' do
|
77
|
+
|
78
|
+
before(:each) do
|
79
|
+
@widget = StrongWidget.new
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'should work' do
|
83
|
+
@widget.spam_answers.must_be_nil
|
84
|
+
@widget.textcaptcha
|
85
|
+
@widget.spam_question.must_equal('1+1')
|
86
|
+
@widget.valid?.must_equal false
|
87
|
+
@widget.errors[:spam_answer].first.must_equal('is incorrect, try another question instead')
|
88
|
+
|
89
|
+
@widget.spam_answer = 'two'
|
90
|
+
@widget.valid?.must_equal true
|
91
|
+
@widget.errors[:spam_answer].must_be_empty
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
76
95
|
describe 'encryption' do
|
77
96
|
|
78
97
|
before(:each) do
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts_as_textcaptcha
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Hutchinson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-04-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bcrypt-ruby
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 3.0.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 3.0.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rails
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,6 +122,20 @@ dependencies:
|
|
122
122
|
- - '>='
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: strong_parameters
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - '>='
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
125
139
|
description: |-
|
126
140
|
Simple question/answer based spam protection for your Rails models.
|
127
141
|
You can define your own logic questions and/or fetch questions from the textcaptcha.com API.
|
checksums.yaml.gz.asc
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
-----BEGIN PGP SIGNATURE-----
|
2
|
-
Version: GnuPG/MacGPG2 v2.0.19 (Darwin)
|
3
|
-
Comment: GPGTools - http://gpgtools.org
|
4
|
-
|
5
|
-
iQEcBAABAgAGBQJRQyWJAAoJEN3AtSzXeMK41+oH/iiYyOzTRe+jd2tcUvxBREtX
|
6
|
-
WEPaup/YfTYZ5lXcYC5fq8CCyFnHHf9cCypoRXkWTKFXicZ9je3I3P0aKohx94wO
|
7
|
-
yYhvBGIPrh0ZtEAGGgXIzOT3oFoqyFUqk+Bdzdig2jBmC1RMLnN6Eyk9YE+YMe6G
|
8
|
-
BFwKFeMyqtSL2i7Ch0L1VUX3u9UqkcOYiNnDp2viabkX7wF+tYVazjM5pD2e25Hh
|
9
|
-
/tH5xg7shsB7s48uf/JFzuTHyK/K5xim8T2ymkSfrFslnN5ipqgypK0NJIehTDK0
|
10
|
-
nxAPkKEj8LWVmy81xnYtA0iIY6VgzgLmbB/ynzK2kNLi3Q1tqYIqntmG6hFJR9I=
|
11
|
-
=R7cK
|
12
|
-
-----END PGP SIGNATURE-----
|
data.tar.gz.asc
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
-----BEGIN PGP SIGNATURE-----
|
2
|
-
Version: GnuPG/MacGPG2 v2.0.19 (Darwin)
|
3
|
-
Comment: GPGTools - http://gpgtools.org
|
4
|
-
|
5
|
-
iQEcBAABAgAGBQJRQyWJAAoJEN3AtSzXeMK4Ga4H/1nZEp/Bm2PYFsajQYVq725o
|
6
|
-
J25M5G9KjBdLjBqtxSCHUWpSO9ZUDpjdju211WQ95H79PrnUiNKRkJd7U7+cGLtm
|
7
|
-
hG1PjYn/xVqsY35enpQFnkTMHYElCUIOwxOsXygh137f810UWJ9Ekcfzaj7SAHXi
|
8
|
-
mN/qtQ5Nzl4wfWXDLeAJArBQ8lwPcevqmZ6L0ChPsOywJkpWFa/X+apB5dCwe+GY
|
9
|
-
Ri+lnU7ffHc/XM2evBXF710FxiEfjLkpuAu+ZHJsCM4ji46kcJ5ONqi7LF64WX/z
|
10
|
-
2jCayartkWVme9d/Ol5F75Cp7Jhqr9V4yU41zuOUK7CPaeUcGAEDVC3svsIQ+Z0=
|
11
|
-
=VZFb
|
12
|
-
-----END PGP SIGNATURE-----
|
metadata.gz.asc
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
-----BEGIN PGP SIGNATURE-----
|
2
|
-
Version: GnuPG/MacGPG2 v2.0.19 (Darwin)
|
3
|
-
Comment: GPGTools - http://gpgtools.org
|
4
|
-
|
5
|
-
iQEcBAABAgAGBQJRQyWJAAoJEN3AtSzXeMK4NZQH/0AYiZyO5bS/K5/u6AvRmOaY
|
6
|
-
kCaEPuBI3kSHT55R89+4V3JKVo28UwRXK8OdbNHeiq3TSNyl/goWNPYXHoVrG8UW
|
7
|
-
Am/SF7VPsxJGgzov/IlSMy3iRBD4ZXdV8rF75ngku5gB4/SXigHMB//Ni0IshLWY
|
8
|
-
t0Q34TSFY1Tj3uH4PwXRPWG/H7nB0T48NH4qy2xheKIzzq5dK+sD7Qy2PYm4JRc/
|
9
|
-
ZkjwZmBZNLzCR9GS8VwK/g9fvMLGwezsHz4UaXnFDY8iubq3CtWBbvrszvwss8/t
|
10
|
-
kgiSsLrM7vMrkKlLIZghWpHPVj27N5YZTFFfn6anhBFZ89h5PIVrr2FF9iSPcTk=
|
11
|
-
=wDji
|
12
|
-
-----END PGP SIGNATURE-----
|