acts_as_textcaptcha 4.0.0 → 4.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +11 -0
- data/README.rdoc +22 -40
- data/lib/acts_as_textcaptcha.rb +1 -1
- data/lib/acts_as_textcaptcha/textcaptcha.rb +0 -10
- data/lib/acts_as_textcaptcha/textcaptcha_helper.rb +1 -6
- data/lib/acts_as_textcaptcha/version.rb +1 -1
- data/test/test_helper.rb +0 -2
- metadata +179 -159
- checksums.yaml +0 -7
- data/lib/acts_as_textcaptcha/framework/rails2.rb +0 -2
data/CHANGELOG
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
4.1.0 (2 January 2014)
|
2
|
+
* Dropping support for Rails 2
|
3
|
+
* README updated
|
4
|
+
* CHANGELOG (this file) added
|
5
|
+
|
6
|
+
4.0.0 (1 January 2014)
|
7
|
+
* Using a cache store to persist answers between requests
|
8
|
+
* README updated
|
9
|
+
* Test coverage improved
|
10
|
+
|
11
|
+
(no change log available for older releases)
|
data/README.rdoc
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
== ActAsTextcaptcha
|
2
2
|
|
3
|
-
{<img src="https://secure.travis-ci.org/matthutchinson/acts_as_textcaptcha.png" alt="Travis Build Status" align="absmiddle"/>}[https://travis-ci.org/matthutchinson/acts_as_textcaptcha] {<img src="https://coveralls.io/repos/matthutchinson/acts_as_textcaptcha/badge.png" alt="Coverage Status" align="absmiddle" />}[https://coveralls.io/r/matthutchinson/acts_as_textcaptcha] {<img src="https://codeclimate.com/
|
3
|
+
{<img src="https://secure.travis-ci.org/matthutchinson/acts_as_textcaptcha.png" alt="Travis Build Status" align="absmiddle"/>}[https://travis-ci.org/matthutchinson/acts_as_textcaptcha] {<img src="https://coveralls.io/repos/matthutchinson/acts_as_textcaptcha/badge.png" alt="Coverage Status" align="absmiddle" />}[https://coveralls.io/r/matthutchinson/acts_as_textcaptcha] {<img align="absmiddle" src="https://codeclimate.com/github/matthutchinson/acts_as_textcaptcha.png" />}[https://codeclimate.com/github/matthutchinson/acts_as_textcaptcha]
|
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 text captcha questions (instead, or as a fall back in the event of any remote API issues).
|
6
6
|
|
7
|
-
This gem is actively maintained, has good test coverage and is compatible with Rails >=
|
7
|
+
This gem is actively maintained, has good test coverage and is compatible with Rails >= 3.0.0 (including Rails 4). If you have any issues {please report them here}[https://github.com/matthutchinson/acts_as_textcaptcha/issues/new].
|
8
8
|
|
9
9
|
Logic questions from the web service 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
|
|
@@ -14,31 +14,13 @@ Try a {working demo here}[http://textcaptcha.heroku.com]!
|
|
14
14
|
|
15
15
|
== Installing
|
16
16
|
|
17
|
-
|
17
|
+
*NOTE:* The steps to configure your app changed with the v4.0.* release. If you are having problems please carefully check the steps or {upgrade instructions}[https://github.com/matthutchinson/acts_as_textcaptcha#upgrading-from-3010] below.
|
18
18
|
|
19
|
-
|
19
|
+
First add the following to your Gemfile, then `bundle install`;
|
20
20
|
|
21
21
|
gem 'acts_as_textcaptcha'
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
Add this to your environment.rb file, then `gem install acts_as_textcaptcha`;
|
26
|
-
|
27
|
-
config.gem 'acts_as_textcaptcha'
|
28
|
-
|
29
|
-
=== Or as a plugin (pre Rails 4)
|
30
|
-
|
31
|
-
Install with rails or script/rails as follows;
|
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
|
36
|
-
|
37
|
-
== Setting up
|
38
|
-
|
39
|
-
*NOTE:* The steps to configure your app changed with the v4.0.* release. If you are having problems please carefully check the steps or {upgrade instructions}[https://github.com/matthutchinson/acts_as_textcaptcha#upgrading-from-3010] below.
|
40
|
-
|
41
|
-
First {grab an API key for your website}[http://textcaptcha.com/api]. Next add the following code to any models you would like to protect;
|
23
|
+
Next {grab an API key for your website}[http://textcaptcha.com/api], then add the following code to models you would like to protect;
|
42
24
|
|
43
25
|
class Comment < ActiveRecord::Base
|
44
26
|
# (this is the simplest way to configure the gem, with an API key only)
|
@@ -54,7 +36,6 @@ Next in your controller's *new* action you'll want to generate and assign the lo
|
|
54
36
|
|
55
37
|
Finally, in your form view add the textcaptcha question and answer fields using the textcaptcha_fields helper. Feel free to arrange the HTML within this block as you like;
|
56
38
|
|
57
|
-
# for Rails 2.3.* change <%= to <% on the next line
|
58
39
|
<%= textcaptcha_fields(f) do %>
|
59
40
|
<div class="field">
|
60
41
|
<%= f.label :textcaptcha_answer, @comment.textcaptcha_question %><br/>
|
@@ -78,15 +59,15 @@ Due to a relatively {large hole}[https://github.com/matthutchinson/acts_as_textc
|
|
78
59
|
=== Toggling Textcaptcha
|
79
60
|
|
80
61
|
You can toggle textcaptcha on/off for your models by overriding the `perform_textcaptcha?` method. If it returns false, no questions will be fetched from
|
81
|
-
the web service and textcaptcha validation is disabled.
|
62
|
+
the web service and textcaptcha validation is disabled.
|
82
63
|
|
83
|
-
This is useful for writing your own custom logic for toggling spam protection on/off e.g. for logged in users. By default the `perform_textcaptcha?` method {checks if the form object is a new (unsaved) record}[https://github.com/matthutchinson/acts_as_textcaptcha/blob/master/lib/acts_as_textcaptcha/textcaptcha.rb#L54].
|
64
|
+
This is useful for writing your own custom logic for toggling spam protection on/off e.g. for logged in users. By default the `perform_textcaptcha?` method {checks if the form object is a new (unsaved) record}[https://github.com/matthutchinson/acts_as_textcaptcha/blob/master/lib/acts_as_textcaptcha/textcaptcha.rb#L54].
|
84
65
|
|
85
66
|
So out of the box, spam protection is only enabled for creating new records (not updating). Here is a typical example showing how to overwrite the `perform_textcaptcha?` method, while maintaining the new record check.
|
86
67
|
|
87
68
|
class Comment < ActiveRecord::Base
|
88
69
|
acts_as_textcaptcha :api_key => 'YOUR_TEXTCAPTCHA_API_KEY'
|
89
|
-
|
70
|
+
|
90
71
|
def perform_textcaptcha?
|
91
72
|
super && user.admin?
|
92
73
|
end
|
@@ -119,18 +100,13 @@ The gem can be configured for models individually (as shown above) or with a con
|
|
119
100
|
|
120
101
|
rake textcaptcha:config
|
121
102
|
|
122
|
-
*NOTE:* For Rails 2.3.*, you'll have to add the following to your Rakefile to reveal this task;
|
123
|
-
|
124
|
-
# load textcaptcha rake tasks
|
125
|
-
Dir["#{Gem.searcher.find('acts_as_textcaptcha').full_gem_path}/lib/tasks/**/*.rake"].each { |ext| load ext } if Gem.searcher.find('acts_as_textcaptcha')
|
126
|
-
|
127
103
|
=== Confguring _without_ the TextCAPTCHA web service
|
128
104
|
|
129
105
|
To use only your own logic questions, simply ommit the api_key from the configuration and define at least 1 logic question and answer (see above).
|
130
106
|
|
131
107
|
== Translations
|
132
108
|
|
133
|
-
The gem uses the standard Rails I18n translation approach
|
109
|
+
The gem uses the standard Rails I18n translation approach (with a fall-back to English). Unfortunately at present, the Text CAPTCHA web service only provides logic questions in English.
|
134
110
|
|
135
111
|
en:
|
136
112
|
activerecord:
|
@@ -146,8 +122,6 @@ The gem uses the standard Rails I18n translation approach for error messages, wi
|
|
146
122
|
comment:
|
147
123
|
textcaptcha_answer: "Textcaptcha answer"
|
148
124
|
|
149
|
-
*NOTE:* currently the Text CAPTCHA API web service only offers logic questions in English.
|
150
|
-
|
151
125
|
== Without Rails or ActiveRecord
|
152
126
|
|
153
127
|
Although this gem has been built with Rails in mind, is entirely possible to use it without ActiveRecord, or Rails. As an example, take a look at the {Contact}[https://github.com/matthutchinson/acts_as_textcaptcha/blob/master/test/test_models.rb#L44] model used in the test suite {here}[https://github.com/matthutchinson/acts_as_textcaptcha/blob/master/test/test_models.rb#L44].
|
@@ -180,7 +154,7 @@ For more details on the code please check the {documentation}[http://rdoc.info/p
|
|
180
154
|
|
181
155
|
What do you need?
|
182
156
|
|
183
|
-
* {Rails}[http://github.com/rails/rails] >=
|
157
|
+
* {Rails}[http://github.com/rails/rails] >= 3.0.0 (including Rails 4)
|
184
158
|
* {Rails.cache}[http://api.rubyonrails.org/classes/ActiveSupport/Cache/Store.html] - some basic cache configuration is nessecary
|
185
159
|
* {Ruby}[http://ruby-lang.org/] >= 1.8.7 (also tested with REE, 1.9.2, 1.9.3, 2.0.0, 2.1.0)
|
186
160
|
* {Text CAPTCHA API key}[http://textcaptcha.com/register] (_optional_, since you can define your own logic questions)
|
@@ -189,6 +163,18 @@ What do you need?
|
|
189
163
|
|
190
164
|
*Note*: The built-in {TextcaptchaCache}[https://github.com/matthutchinson/acts_as_textcaptcha/blob/master/lib/acts_as_textcaptcha/textcaptcha_cache.rb] class directly wraps the {Rails.cache}[http://api.rubyonrails.org/classes/ActiveSupport/Cache/Store.html] object.
|
191
165
|
|
166
|
+
== Rails 2 support
|
167
|
+
|
168
|
+
Support for Rails 2 was dropped with the release of v4.1.0. If you would like to continue to use this gem with an older version of Rails (>= 2.3.8), please lock the version to `4.0.0`. Like so;
|
169
|
+
|
170
|
+
# in your Gemfile
|
171
|
+
gem 'acts_as_textcaptcha', '=4.0.0'
|
172
|
+
|
173
|
+
# or in environment.rb
|
174
|
+
config.gem 'acts_as_textcaptcha', :version => '=4.0.0'
|
175
|
+
|
176
|
+
Check out the {README}[https://github.com/matthutchinson/acts_as_textcaptcha/tree/v4.0.0] for this release for more information.
|
177
|
+
|
192
178
|
== Links
|
193
179
|
|
194
180
|
* {Demo}[http://textcaptcha.heroku.com]
|
@@ -219,10 +205,6 @@ After doing this, you should be able to install the gem with;
|
|
219
205
|
# or with Bundler, specify the HighSecurity trust policy
|
220
206
|
bundle install --trust-policy HighSecurity
|
221
207
|
|
222
|
-
== Todo
|
223
|
-
|
224
|
-
* Remove support for Rails 2.3.* in a future gem release (clean code and tests for this)
|
225
|
-
|
226
208
|
== Usage
|
227
209
|
|
228
210
|
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!
|
data/lib/acts_as_textcaptcha.rb
CHANGED
@@ -6,16 +6,6 @@ require 'acts_as_textcaptcha/textcaptcha_api'
|
|
6
6
|
|
7
7
|
module ActsAsTextcaptcha
|
8
8
|
|
9
|
-
# dont use Railtie if Rails < 3
|
10
|
-
unless Rails::VERSION::MAJOR < 3
|
11
|
-
class Railtie < ::Rails::Railtie
|
12
|
-
rake_tasks do
|
13
|
-
load "tasks/textcaptcha.rake"
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
|
19
9
|
module Textcaptcha #:nodoc:
|
20
10
|
|
21
11
|
def acts_as_textcaptcha(options = nil)
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,186 +1,197 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts_as_textcaptcha
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 59
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 4
|
8
|
+
- 1
|
9
|
+
- 0
|
10
|
+
version: 4.1.0
|
5
11
|
platform: ruby
|
6
|
-
authors:
|
12
|
+
authors:
|
7
13
|
- Matthew Hutchinson
|
8
14
|
autorequire:
|
9
15
|
bindir: bin
|
10
|
-
cert_chain:
|
16
|
+
cert_chain:
|
11
17
|
- gem-public_cert.pem
|
12
|
-
date: 2014-01-
|
13
|
-
dependencies:
|
14
|
-
- !ruby/object:Gem::Dependency
|
18
|
+
date: 2014-01-02 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
15
21
|
name: mime-types
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
22
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
23
|
+
none: false
|
24
|
+
requirements:
|
25
|
+
- - ~>
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
hash: 113
|
28
|
+
segments:
|
29
|
+
- 1
|
30
|
+
- 25
|
31
|
+
- 1
|
20
32
|
version: 1.25.1
|
21
|
-
type: :development
|
22
33
|
prerelease: false
|
23
|
-
version_requirements: !ruby/object:Gem::Requirement
|
24
|
-
requirements:
|
25
|
-
- - "~>"
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
version: 1.25.1
|
28
|
-
- !ruby/object:Gem::Dependency
|
29
|
-
name: rails
|
30
|
-
requirement: !ruby/object:Gem::Requirement
|
31
|
-
requirements:
|
32
|
-
- - ">="
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version: '0'
|
35
34
|
type: :development
|
35
|
+
requirement: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rails
|
38
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
hash: 3
|
44
|
+
segments:
|
45
|
+
- 0
|
46
|
+
version: "0"
|
36
47
|
prerelease: false
|
37
|
-
version_requirements: !ruby/object:Gem::Requirement
|
38
|
-
requirements:
|
39
|
-
- - ">="
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
version: '0'
|
42
|
-
- !ruby/object:Gem::Dependency
|
43
|
-
name: bundler
|
44
|
-
requirement: !ruby/object:Gem::Requirement
|
45
|
-
requirements:
|
46
|
-
- - ">="
|
47
|
-
- !ruby/object:Gem::Version
|
48
|
-
version: '0'
|
49
48
|
type: :development
|
49
|
+
requirement: *id002
|
50
|
+
- !ruby/object:Gem::Dependency
|
51
|
+
name: bundler
|
52
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
hash: 3
|
58
|
+
segments:
|
59
|
+
- 0
|
60
|
+
version: "0"
|
50
61
|
prerelease: false
|
51
|
-
version_requirements: !ruby/object:Gem::Requirement
|
52
|
-
requirements:
|
53
|
-
- - ">="
|
54
|
-
- !ruby/object:Gem::Version
|
55
|
-
version: '0'
|
56
|
-
- !ruby/object:Gem::Dependency
|
57
|
-
name: minitest
|
58
|
-
requirement: !ruby/object:Gem::Requirement
|
59
|
-
requirements:
|
60
|
-
- - ">="
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version: '0'
|
63
62
|
type: :development
|
63
|
+
requirement: *id003
|
64
|
+
- !ruby/object:Gem::Dependency
|
65
|
+
name: minitest
|
66
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
hash: 3
|
72
|
+
segments:
|
73
|
+
- 0
|
74
|
+
version: "0"
|
64
75
|
prerelease: false
|
65
|
-
version_requirements: !ruby/object:Gem::Requirement
|
66
|
-
requirements:
|
67
|
-
- - ">="
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: '0'
|
70
|
-
- !ruby/object:Gem::Dependency
|
71
|
-
name: simplecov
|
72
|
-
requirement: !ruby/object:Gem::Requirement
|
73
|
-
requirements:
|
74
|
-
- - ">="
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
version: '0'
|
77
76
|
type: :development
|
77
|
+
requirement: *id004
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: simplecov
|
80
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ">="
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
hash: 3
|
86
|
+
segments:
|
87
|
+
- 0
|
88
|
+
version: "0"
|
78
89
|
prerelease: false
|
79
|
-
version_requirements: !ruby/object:Gem::Requirement
|
80
|
-
requirements:
|
81
|
-
- - ">="
|
82
|
-
- !ruby/object:Gem::Version
|
83
|
-
version: '0'
|
84
|
-
- !ruby/object:Gem::Dependency
|
85
|
-
name: rdoc
|
86
|
-
requirement: !ruby/object:Gem::Requirement
|
87
|
-
requirements:
|
88
|
-
- - ">="
|
89
|
-
- !ruby/object:Gem::Version
|
90
|
-
version: '0'
|
91
90
|
type: :development
|
91
|
+
requirement: *id005
|
92
|
+
- !ruby/object:Gem::Dependency
|
93
|
+
name: rdoc
|
94
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
95
|
+
none: false
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
hash: 3
|
100
|
+
segments:
|
101
|
+
- 0
|
102
|
+
version: "0"
|
92
103
|
prerelease: false
|
93
|
-
version_requirements: !ruby/object:Gem::Requirement
|
94
|
-
requirements:
|
95
|
-
- - ">="
|
96
|
-
- !ruby/object:Gem::Version
|
97
|
-
version: '0'
|
98
|
-
- !ruby/object:Gem::Dependency
|
99
|
-
name: sqlite3
|
100
|
-
requirement: !ruby/object:Gem::Requirement
|
101
|
-
requirements:
|
102
|
-
- - ">="
|
103
|
-
- !ruby/object:Gem::Version
|
104
|
-
version: '0'
|
105
104
|
type: :development
|
105
|
+
requirement: *id006
|
106
|
+
- !ruby/object:Gem::Dependency
|
107
|
+
name: sqlite3
|
108
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
109
|
+
none: false
|
110
|
+
requirements:
|
111
|
+
- - ">="
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
hash: 3
|
114
|
+
segments:
|
115
|
+
- 0
|
116
|
+
version: "0"
|
106
117
|
prerelease: false
|
107
|
-
version_requirements: !ruby/object:Gem::Requirement
|
108
|
-
requirements:
|
109
|
-
- - ">="
|
110
|
-
- !ruby/object:Gem::Version
|
111
|
-
version: '0'
|
112
|
-
- !ruby/object:Gem::Dependency
|
113
|
-
name: fakeweb
|
114
|
-
requirement: !ruby/object:Gem::Requirement
|
115
|
-
requirements:
|
116
|
-
- - ">="
|
117
|
-
- !ruby/object:Gem::Version
|
118
|
-
version: '0'
|
119
118
|
type: :development
|
119
|
+
requirement: *id007
|
120
|
+
- !ruby/object:Gem::Dependency
|
121
|
+
name: fakeweb
|
122
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
123
|
+
none: false
|
124
|
+
requirements:
|
125
|
+
- - ">="
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
hash: 3
|
128
|
+
segments:
|
129
|
+
- 0
|
130
|
+
version: "0"
|
120
131
|
prerelease: false
|
121
|
-
version_requirements: !ruby/object:Gem::Requirement
|
122
|
-
requirements:
|
123
|
-
- - ">="
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
version: '0'
|
126
|
-
- !ruby/object:Gem::Dependency
|
127
|
-
name: strong_parameters
|
128
|
-
requirement: !ruby/object:Gem::Requirement
|
129
|
-
requirements:
|
130
|
-
- - ">="
|
131
|
-
- !ruby/object:Gem::Version
|
132
|
-
version: '0'
|
133
132
|
type: :development
|
133
|
+
requirement: *id008
|
134
|
+
- !ruby/object:Gem::Dependency
|
135
|
+
name: strong_parameters
|
136
|
+
version_requirements: &id009 !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ">="
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
hash: 3
|
142
|
+
segments:
|
143
|
+
- 0
|
144
|
+
version: "0"
|
134
145
|
prerelease: false
|
135
|
-
version_requirements: !ruby/object:Gem::Requirement
|
136
|
-
requirements:
|
137
|
-
- - ">="
|
138
|
-
- !ruby/object:Gem::Version
|
139
|
-
version: '0'
|
140
|
-
- !ruby/object:Gem::Dependency
|
141
|
-
name: coveralls
|
142
|
-
requirement: !ruby/object:Gem::Requirement
|
143
|
-
requirements:
|
144
|
-
- - ">="
|
145
|
-
- !ruby/object:Gem::Version
|
146
|
-
version: '0'
|
147
146
|
type: :development
|
147
|
+
requirement: *id009
|
148
|
+
- !ruby/object:Gem::Dependency
|
149
|
+
name: coveralls
|
150
|
+
version_requirements: &id010 !ruby/object:Gem::Requirement
|
151
|
+
none: false
|
152
|
+
requirements:
|
153
|
+
- - ">="
|
154
|
+
- !ruby/object:Gem::Version
|
155
|
+
hash: 3
|
156
|
+
segments:
|
157
|
+
- 0
|
158
|
+
version: "0"
|
148
159
|
prerelease: false
|
149
|
-
version_requirements: !ruby/object:Gem::Requirement
|
150
|
-
requirements:
|
151
|
-
- - ">="
|
152
|
-
- !ruby/object:Gem::Version
|
153
|
-
version: '0'
|
154
|
-
- !ruby/object:Gem::Dependency
|
155
|
-
name: pry
|
156
|
-
requirement: !ruby/object:Gem::Requirement
|
157
|
-
requirements:
|
158
|
-
- - ">="
|
159
|
-
- !ruby/object:Gem::Version
|
160
|
-
version: '0'
|
161
160
|
type: :development
|
161
|
+
requirement: *id010
|
162
|
+
- !ruby/object:Gem::Dependency
|
163
|
+
name: pry
|
164
|
+
version_requirements: &id011 !ruby/object:Gem::Requirement
|
165
|
+
none: false
|
166
|
+
requirements:
|
167
|
+
- - ">="
|
168
|
+
- !ruby/object:Gem::Version
|
169
|
+
hash: 3
|
170
|
+
segments:
|
171
|
+
- 0
|
172
|
+
version: "0"
|
162
173
|
prerelease: false
|
163
|
-
|
164
|
-
|
165
|
-
- - ">="
|
166
|
-
- !ruby/object:Gem::Version
|
167
|
-
version: '0'
|
174
|
+
type: :development
|
175
|
+
requirement: *id011
|
168
176
|
description: |-
|
169
177
|
Simple question/answer based spam protection for your Rails models.
|
170
178
|
You can define your own logic questions and/or fetch questions from the textcaptcha.com API.
|
171
179
|
The questions involve human logic and are tough for spam bots to crack.
|
172
180
|
For more reasons on why logic questions are a good idea visit; http://textcaptcha.com/why
|
173
|
-
email:
|
181
|
+
email:
|
174
182
|
- matt@hiddenloop.com
|
175
183
|
executables: []
|
184
|
+
|
176
185
|
extensions: []
|
177
|
-
|
186
|
+
|
187
|
+
extra_rdoc_files:
|
178
188
|
- README.rdoc
|
179
189
|
- LICENSE
|
180
|
-
files:
|
181
|
-
-
|
182
|
-
-
|
183
|
-
-
|
190
|
+
files:
|
191
|
+
- .coveralls.yml
|
192
|
+
- .gitignore
|
193
|
+
- .travis.yml
|
194
|
+
- CHANGELOG
|
184
195
|
- Gemfile
|
185
196
|
- LICENSE
|
186
197
|
- README.rdoc
|
@@ -191,7 +202,6 @@ files:
|
|
191
202
|
- init.rb
|
192
203
|
- lib/acts_as_textcaptcha.rb
|
193
204
|
- lib/acts_as_textcaptcha/framework/rails.rb
|
194
|
-
- lib/acts_as_textcaptcha/framework/rails2.rb
|
195
205
|
- lib/acts_as_textcaptcha/textcaptcha.rb
|
196
206
|
- lib/acts_as_textcaptcha/textcaptcha_api.rb
|
197
207
|
- lib/acts_as_textcaptcha/textcaptcha_cache.rb
|
@@ -207,26 +217,36 @@ files:
|
|
207
217
|
- test/textcaptcha_test.rb
|
208
218
|
homepage: http://github.com/matthutchinson/acts_as_textcaptcha
|
209
219
|
licenses: []
|
210
|
-
|
220
|
+
|
211
221
|
post_install_message:
|
212
222
|
rdoc_options: []
|
213
|
-
|
223
|
+
|
224
|
+
require_paths:
|
214
225
|
- lib
|
215
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
216
|
-
|
226
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
227
|
+
none: false
|
228
|
+
requirements:
|
217
229
|
- - ">="
|
218
|
-
- !ruby/object:Gem::Version
|
219
|
-
|
220
|
-
|
221
|
-
|
230
|
+
- !ruby/object:Gem::Version
|
231
|
+
hash: 3
|
232
|
+
segments:
|
233
|
+
- 0
|
234
|
+
version: "0"
|
235
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
236
|
+
none: false
|
237
|
+
requirements:
|
222
238
|
- - ">="
|
223
|
-
- !ruby/object:Gem::Version
|
224
|
-
|
239
|
+
- !ruby/object:Gem::Version
|
240
|
+
hash: 3
|
241
|
+
segments:
|
242
|
+
- 0
|
243
|
+
version: "0"
|
225
244
|
requirements: []
|
245
|
+
|
226
246
|
rubyforge_project:
|
227
|
-
rubygems_version:
|
247
|
+
rubygems_version: 1.8.25
|
228
248
|
signing_key:
|
229
|
-
specification_version:
|
230
|
-
summary: Spam protection for your models via logic questions and the textcaptcha.com
|
231
|
-
API
|
249
|
+
specification_version: 3
|
250
|
+
summary: Spam protection for your models via logic questions and the textcaptcha.com API
|
232
251
|
test_files: []
|
252
|
+
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 98ad0396a537ab06e540f42880d1fcd24993f59c
|
4
|
-
data.tar.gz: 57ee900760402ed0cc2e22c609efe2d550b841c4
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: aa692657b0f23e1fc0410cfa5c8f996c6465148b09fa0f4ab17d47f1f1008b2db5fe3c42f5f2a777d729645589f6e5883d9dd25c7f03a49396e5de79ec20b1a4
|
7
|
-
data.tar.gz: 2e53ec3dc94736c4ccaeba1fa5670b6e79d0c74e8e191d25b8bf7e0643493293999253d05aa60b73176b8e44fc20d3f9e7ef901fe934ed9a7f274e83f079978d
|