acts_as_textcaptcha 4.1.1 → 4.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.travis.yml +4 -4
- data/CHANGELOG +5 -0
- data/README.rdoc +8 -8
- data/Rakefile +11 -0
- data/acts_as_textcaptcha.gemspec +1 -1
- data/lib/acts_as_textcaptcha/version.rb +1 -1
- data/test/test_helper.rb +0 -3
- metadata +158 -179
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f35995a8199f3941f0f25e19493b8ce0ace5e9f4
|
4
|
+
data.tar.gz: e7ab7133d65ac5a2b18ab957604a43fdb9055dd6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 22513b29f7bca5cd3fdafcc008e2b28706043460f1ec5c5f5ee5257700e5391e490d6b1c4788f9589daa13cacfe7b127936f687595e348626a0eb3da55e3f7e5
|
7
|
+
data.tar.gz: 3c7abfa93194c776ee1ba6d241093224637d6fed600245b6cb216faa45081fe7d3a409a04cf5ddfc17ca0c56e9c2e9c6cc32da65cdb97213ec189e4f077f614b
|
data/.travis.yml
CHANGED
data/CHANGELOG
CHANGED
data/README.rdoc
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
== ActAsTextcaptcha
|
2
2
|
|
3
|
-
{<img src="https://
|
3
|
+
{<img src="https://img.shields.io/gem/v/acts_as_textcaptcha.svg?style=flat" alt="Gem Version" align="absmiddle"/>}[http://rubygems.org/gems/acts_as_textcaptcha] {<img src="https://img.shields.io/travis/matthutchinson/acts_as_textcaptcha.svg?style=flat" alt="Travis Build Status" align="absmiddle"/>}[https://travis-ci.org/matthutchinson/acts_as_textcaptcha] {<img src="https://img.shields.io/coveralls/matthutchinson/acts_as_textcaptcha.svg?style=flat" alt="Coverage Status" align="absmiddle" />}[https://coveralls.io/r/matthutchinson/acts_as_textcaptcha] {<img src="https://img.shields.io/codeclimate/github/matthutchinson/acts_as_textcaptcha.svg?style=flat" alt="Code Climate" align="absmiddle"/>}[https://codeclimate.com/github/matthutchinson/acts_as_textcaptcha] {<img src="https://img.shields.io/gemnasium/matthutchinson/acts_as_textcaptcha.svg?style=flat" alt="Gemnasium Dependencies" align="absmiddle"/>}[https://gemnasium.com/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
|
|
@@ -77,11 +77,11 @@ So out of the box, spam protection is only enabled for creating new records (not
|
|
77
77
|
|
78
78
|
You can configure acts_as_textcaptcha with the following options;
|
79
79
|
|
80
|
-
* *api_key* - get a free key from http://textcaptcha.com/api
|
81
|
-
* *questions* (
|
82
|
-
* *cache_expiry_minutes* (
|
83
|
-
* *http_read_timeout* (
|
84
|
-
* *http_open_timeout* (
|
80
|
+
* *api_key* (_required_) - get a free key from http://textcaptcha.com/api
|
81
|
+
* *questions* (_optional_) - array of question and answer hashes (see below) A random question from this array will be asked if the web service fails OR if no API key has been set. Multiple answers to the same question are comma separated (e.g. 2,two). So do not use commas in your answers!
|
82
|
+
* *cache_expiry_minutes* (_optional_) - minutes for answers to persist in the cache (default 10 minutes), see {below for details}[https://github.com/matthutchinson/acts_as_textcaptcha#what-does-the-code-do]
|
83
|
+
* *http_read_timeout* (_optional_) - Net::HTTP option, seconds to wait for one block to be read from the remote API
|
84
|
+
* *http_open_timeout* (_optional_) - Net::HTTP option, seconds to wait for the connection to open to the remote API
|
85
85
|
|
86
86
|
For example;
|
87
87
|
|
@@ -156,7 +156,7 @@ What do you need?
|
|
156
156
|
|
157
157
|
* {Rails}[http://github.com/rails/rails] >= 3.0.0 (including Rails 4)
|
158
158
|
* {Rails.cache}[http://api.rubyonrails.org/classes/ActiveSupport/Cache/Store.html] - some basic cache configuration is nessecary
|
159
|
-
* {Ruby}[http://ruby-lang.org/] >= 1.
|
159
|
+
* {Ruby}[http://ruby-lang.org/] >= 1.9.2 (also tested with 1.9.3, 2.0.0, 2.1.1) - 1.8.7 support ended at version 4.1.1
|
160
160
|
* {Text CAPTCHA API key}[http://textcaptcha.com/register] (_optional_, since you can define your own logic questions)
|
161
161
|
* {MiniTest}[https://rubygems.org/gems/minitest] (_optional_ if you want to run the tests, built into Ruby 1.9)
|
162
162
|
* {SimpleCov}[https://rubygems.org/gems/simplecov] (_optional_ if you want to run the tests with code coverage reporting)
|
@@ -199,5 +199,5 @@ This gem is used in a number of production websites and apps. It was originally
|
|
199
199
|
|
200
200
|
* {matthewhutchinson.net}[http://matthewhutchinson.net]
|
201
201
|
* {pmFAQtory.com}[http://pmfaqtory.com]
|
202
|
-
* {The FAQtory}[http://
|
202
|
+
* {The FAQtory}[http://faqtoryapp.com]
|
203
203
|
* {DPT Watch, San Francisco}[http://www.dptwatch.com]
|
data/Rakefile
CHANGED
@@ -3,6 +3,17 @@ gem 'rdoc'
|
|
3
3
|
# default rake
|
4
4
|
task :default => [:test]
|
5
5
|
|
6
|
+
# helpful console
|
7
|
+
desc "Irb console that requires this gem"
|
8
|
+
task :console do
|
9
|
+
require 'irb'
|
10
|
+
require 'irb/completion'
|
11
|
+
require 'acts_as_textcaptcha'
|
12
|
+
ARGV.clear
|
13
|
+
IRB.start
|
14
|
+
end
|
15
|
+
|
16
|
+
|
6
17
|
# bundler tasks
|
7
18
|
require 'bundler'
|
8
19
|
Bundler::GemHelper.install_tasks
|
data/acts_as_textcaptcha.gemspec
CHANGED
@@ -22,7 +22,7 @@ Gem::Specification.new do |s|
|
|
22
22
|
s.require_paths = ["lib"]
|
23
23
|
|
24
24
|
# lock mime-types to pre 2.0 since we want to support 1.8.7/REE in tests
|
25
|
-
s.add_development_dependency('mime-types'
|
25
|
+
s.add_development_dependency('mime-types')
|
26
26
|
s.add_development_dependency('rails')
|
27
27
|
s.add_development_dependency('bundler')
|
28
28
|
s.add_development_dependency('minitest')
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,196 +1,185 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts_as_textcaptcha
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 4
|
8
|
-
- 1
|
9
|
-
- 1
|
10
|
-
version: 4.1.1
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 4.1.2
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- Matthew Hutchinson
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
11
|
+
date: 2014-05-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
21
14
|
name: mime-types
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
hash: 113
|
28
|
-
segments:
|
29
|
-
- 1
|
30
|
-
- 25
|
31
|
-
- 1
|
32
|
-
version: 1.25.1
|
33
|
-
prerelease: false
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
34
20
|
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"
|
47
21
|
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rails
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
48
34
|
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"
|
61
35
|
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
62
48
|
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"
|
75
49
|
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: minitest
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
76
62
|
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"
|
89
63
|
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: simplecov
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
90
76
|
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"
|
103
77
|
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rdoc
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
104
90
|
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"
|
117
91
|
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: sqlite3
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
118
104
|
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"
|
131
105
|
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: fakeweb
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
132
118
|
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"
|
145
119
|
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
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'
|
146
132
|
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"
|
159
133
|
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: coveralls
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
160
146
|
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"
|
173
147
|
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: pry
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
174
160
|
type: :development
|
175
|
-
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
176
167
|
description: |-
|
177
168
|
Simple question/answer based spam protection for your Rails models.
|
178
169
|
You can define your own logic questions and/or fetch questions from the textcaptcha.com API.
|
179
170
|
The questions involve human logic and are tough for spam bots to crack.
|
180
171
|
For more reasons on why logic questions are a good idea visit; http://textcaptcha.com/why
|
181
|
-
email:
|
172
|
+
email:
|
182
173
|
- matt@hiddenloop.com
|
183
174
|
executables: []
|
184
|
-
|
185
175
|
extensions: []
|
186
|
-
|
187
|
-
extra_rdoc_files:
|
176
|
+
extra_rdoc_files:
|
188
177
|
- README.rdoc
|
189
178
|
- LICENSE
|
190
|
-
files:
|
191
|
-
- .coveralls.yml
|
192
|
-
- .gitignore
|
193
|
-
- .travis.yml
|
179
|
+
files:
|
180
|
+
- ".coveralls.yml"
|
181
|
+
- ".gitignore"
|
182
|
+
- ".travis.yml"
|
194
183
|
- CHANGELOG
|
195
184
|
- Gemfile
|
196
185
|
- LICENSE
|
@@ -216,36 +205,26 @@ files:
|
|
216
205
|
- test/textcaptcha_test.rb
|
217
206
|
homepage: http://github.com/matthutchinson/acts_as_textcaptcha
|
218
207
|
licenses: []
|
219
|
-
|
208
|
+
metadata: {}
|
220
209
|
post_install_message:
|
221
210
|
rdoc_options: []
|
222
|
-
|
223
|
-
require_paths:
|
211
|
+
require_paths:
|
224
212
|
- lib
|
225
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
226
|
-
|
227
|
-
requirements:
|
213
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
214
|
+
requirements:
|
228
215
|
- - ">="
|
229
|
-
- !ruby/object:Gem::Version
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
version: "0"
|
234
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
235
|
-
none: false
|
236
|
-
requirements:
|
216
|
+
- !ruby/object:Gem::Version
|
217
|
+
version: '0'
|
218
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
219
|
+
requirements:
|
237
220
|
- - ">="
|
238
|
-
- !ruby/object:Gem::Version
|
239
|
-
|
240
|
-
segments:
|
241
|
-
- 0
|
242
|
-
version: "0"
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: '0'
|
243
223
|
requirements: []
|
244
|
-
|
245
224
|
rubyforge_project:
|
246
|
-
rubygems_version:
|
225
|
+
rubygems_version: 2.2.2
|
247
226
|
signing_key:
|
248
|
-
specification_version:
|
249
|
-
summary: Spam protection for your models via logic questions and the textcaptcha.com
|
227
|
+
specification_version: 4
|
228
|
+
summary: Spam protection for your models via logic questions and the textcaptcha.com
|
229
|
+
API
|
250
230
|
test_files: []
|
251
|
-
|