winton-captcha 1.0.4 → 1.0.5

Sign up to get free protection for your applications and to get access to all the features.
data/README.markdown CHANGED
@@ -1,7 +1,7 @@
1
1
  captcha
2
2
  =======
3
3
 
4
- An Rmagick based, Google-style captcha generator for Rails.
4
+ An Rmagick based, Google-style captcha generator.
5
5
 
6
6
 
7
7
  Install
@@ -9,19 +9,69 @@ Install
9
9
 
10
10
  script/plugin install git://github.com/winton/captcha.git
11
11
 
12
- ### Generate config/captcha.rb
12
+ ### Create lib/captcha_config.rb (optional)
13
13
 
14
- rake captcha
14
+ <pre>
15
+ {
16
+ :colors => {
17
+ :background => '#1B1C20',
18
+ :font => '#7385C5'
19
+ },
20
+ # number of captcha images to generate
21
+ :count => 500,
22
+ :destination => "#{RAILS_ROOT}/public/images/captchas"
23
+ ),
24
+ :dimensions => {
25
+ # canvas height (px)
26
+ :height => 31,
27
+ # canvas width (px)
28
+ :width => 90
29
+ },
30
+ :generate_every => 24 * 60 * 60,
31
+ # http://www.imagemagick.org/RMagick/doc/image2.html#implode
32
+ :implode => 0.2,
33
+ :letters => {
34
+ # text baseline (px)
35
+ :baseline => 24,
36
+ # number of letters in captcha
37
+ :count => 6,
38
+ :ignore => ['a','e','i','o','u','l','j','q'],
39
+ # font size (pts)
40
+ :points => 34,
41
+ # width of a character (used to decrease or increase space between characters) (px)
42
+ :width => 14
43
+ },
44
+ :ttf => File.expand_path("#{File.dirname(__FILE__)}/../../resources/captcha.ttf"),
45
+ # http://www.imagemagick.org/RMagick/doc/image3.html#wave
46
+ :wave => {
47
+ # range is used for randomness (px)
48
+ :wavelength => (20..70),
49
+ # distance between peak and valley of sin wave (px)
50
+ :amplitude => 3
51
+ }
52
+ }
53
+ </pre>
15
54
 
16
- Take a look at the config file.
17
-
18
- ### Generate captchas
55
+ ### Create a captcha controller
19
56
 
20
- rake captcha:generate
57
+ script/generate controller Captchas
58
+
59
+ ### Add the resource to your routes.rb
60
+
61
+ map.resource :captcha
62
+
63
+ ### Add acts\_as\_captcha to captchas_controller.rb
64
+
65
+ <pre>
66
+ class CaptchasController < ApplicationController
67
+ acts_as_captcha
68
+ end
69
+ </pre>
21
70
 
22
- ### Add to .gitignore
71
+ ### Add public/images/captchas/* to your .gitignore
23
72
 
24
- public/images/captchas
73
+ public/images/captchas/*
25
74
 
75
+ Captchas will generate and re-generate automatically (see the <code>generate_every</code> option).
26
76
 
27
- ##### Copyright &copy; 2008 [Winton Welsh](mailto:mail@wintoni.us)
77
+ Access <code>/captcha</code> to retrieve the image, <code>/captcha/new</code> to grab a new image, and <code>session[:captcha]</code> for the captcha code.
data/captcha.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'captcha'
3
- s.version = '1.0.4'
3
+ s.version = '1.0.5'
4
4
  s.date = '2009-03-23'
5
5
 
6
6
  s.summary = "An Rmagick based, Google-style captcha generator"
@@ -8,33 +8,23 @@ module Captcha
8
8
  module ClassMethods
9
9
  def acts_as_captcha
10
10
  include Captcha::Action::InstanceMethods
11
- self.around_filter CaptchaFilter.new
12
11
  end
13
12
  end
14
13
 
15
14
  module InstanceMethods
16
15
  def new
17
- files = Dir["#{RAILS_ROOT}/#{CAPTCHAS.options[:destination]}/*.jpg"]
18
- @captcha = File.basename(files[rand(files.length)], '.jpg')
19
- show
16
+ files = Dir["#{Captcha::Config.options[:destination]}/*.jpg"]
17
+ session[:captcha] = File.basename(files[rand(files.length)], '.jpg')
18
+ redirect_to(:action => :show)
20
19
  end
21
20
 
22
21
  def show
23
- new unless @captcha
24
- send_file "#{RAILS_ROOT}/#{CAPTCHAS.options[:destination]}/#{@captcha}.jpg", :type => 'image/jpeg', :disposition => 'inline'
25
- end
26
- end
27
-
28
- private
29
-
30
- class CaptchaFilter
31
- def before(controller)
32
- @captcha = session[:captcha]
33
- end
34
- def after(controller)
35
- if session[:captcha] != @captcha
36
- session[:captcha] = @captcha
37
- end
22
+ new and return unless session[:captcha]
23
+ send_file(
24
+ "#{Captcha::Config.options[:destination]}/#{session[:captcha]}.jpg",
25
+ :disposition => 'inline',
26
+ :type => 'image/jpeg'
27
+ )
38
28
  end
39
29
  end
40
30
 
@@ -1,46 +1,49 @@
1
1
  module Captcha
2
2
  class Config
3
+
4
+ PRODUCTION = defined?(RAILS_ENV) && RAILS_ENV == 'production'
5
+ ROOT = defined?(RAILS_ROOT) ? "#{RAILS_ROOT}/" : ''
6
+
7
+ @@options = {
8
+ :colors => {
9
+ :background => '#1B1C20',
10
+ :font => '#7385C5'
11
+ },
12
+ # number of captcha images to generate
13
+ :count => PRODUCTION ? 500 : 10,
14
+ :destination => "#{ROOT}public/images/captchas",
15
+ :dimensions => {
16
+ # canvas height (px)
17
+ :height => 31,
18
+ # canvas width (px)
19
+ :width => 90
20
+ },
21
+ :generate_every => PRODUCTION ? 24 * 60 * 60 : 10 ** 8,
22
+ # http://www.imagemagick.org/RMagick/doc/image2.html#implode
23
+ :implode => 0.2,
24
+ :letters => {
25
+ # text baseline (px)
26
+ :baseline => 24,
27
+ # number of letters in captcha
28
+ :count => 6,
29
+ :ignore => ['a','e','i','o','u','l','j','q'],
30
+ # font size (pts)
31
+ :points => 34,
32
+ # width of a character (used to decrease or increase space between characters) (px)
33
+ :width => 14
34
+ },
35
+ :ttf => File.expand_path("#{File.dirname(__FILE__)}/../../resources/captcha.ttf"),
36
+ # http://www.imagemagick.org/RMagick/doc/image3.html#wave
37
+ :wave => {
38
+ # range is used for randomness (px)
39
+ :wavelength => (20..70),
40
+ # distance between peak and valley of sin wave (px)
41
+ :amplitude => 3
42
+ }
43
+ }
44
+
3
45
  def initialize(options={})
4
- @@options = {
5
- :colors => {
6
- :background => '#1B1C20',
7
- :font => '#7385C5'
8
- },
9
- # number of captcha images to generate
10
- :count => 500,
11
- :destination => File.expand_path(
12
- (defined?(RAILS_ROOT) ? "#{RAILS_ROOT}/" : '') +
13
- "public/images/captchas"
14
- ),
15
- :dimensions => {
16
- # canvas height (px)
17
- :height => 31,
18
- # canvas width (px)
19
- :width => 90
20
- },
21
- :generate_every => 24 * 60 * 60,
22
- # http://www.imagemagick.org/RMagick/doc/image2.html#implode
23
- :implode => 0.2,
24
- :letters => {
25
- # text baseline (px)
26
- :baseline => 24,
27
- # number of letters in captcha
28
- :count => 6,
29
- :ignore => ['a','e','i','o','u','l','j','q'],
30
- # font size (pts)
31
- :points => 34,
32
- # width of a character (used to decrease or increase space between characters) (px)
33
- :width => 14
34
- },
35
- :ttf => File.expand_path("#{File.dirname(__FILE__)}/../../resources/captcha.ttf"),
36
- # http://www.imagemagick.org/RMagick/doc/image3.html#wave
37
- :wave => {
38
- # range is used for randomness (px)
39
- :wavelength => (20..70),
40
- # distance between peak and valley of sin wave (px)
41
- :amplitude => 3
42
- }
43
- }.merge(options)
46
+ @@options.merge!(options)
44
47
  end
45
48
 
46
49
  def self.captchas_ordered_by_modified
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: winton-captcha
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Winton Welsh
@@ -1,24 +0,0 @@
1
- {
2
- :count => 100, # number of captcha images to generate
3
- :width => 90, # canvas width (px)
4
- :height => 31, # canvas height (px)
5
- :colors => {
6
- :background => '#1B1C20',
7
- :font => '#7385C5'
8
- },
9
- :letters => {
10
- :baseline => 24,# text baseline (px)
11
- :count => 6, # number of letters in captcha
12
- :ignore => ['a','e','i','o','u','l','j','q'],
13
- :points => 34, # font size (pts)
14
- :width => 14, # width of a character (used to decrease or increase space between characters) (px)
15
- },
16
- :implode => 0.2, # http://www.imagemagick.org/RMagick/doc/image2.html#implode
17
- :wave => { # http://www.imagemagick.org/RMagick/doc/image3.html#wave
18
- :wavelength => (20..70), # range is used for randomness (px)
19
- :amplitude => 3 # distance between peak and valley of sin wave (px)
20
- },
21
- :generate_on_startup => RAILS_ENV == 'production',
22
- :destination => 'tmp/captchas',
23
- :ttf => 'vendor/plugins/captcha/resources/captcha.ttf'
24
- }
data/tasks/captcha.rake DELETED
@@ -1,55 +0,0 @@
1
- require File.expand_path('../lib/captcha/captcha.rb', File.dirname(__FILE__))
2
-
3
- desc 'Updates config/captcha.rb'
4
- task :captcha => 'captcha:config'
5
-
6
- namespace :captcha do
7
-
8
- desc 'Updates config/captcha.rb'
9
- task :config => 'captcha:config:to_app'
10
-
11
- desc 'Generates captchas'
12
- task :generate do
13
- Captchas.new
14
- end
15
-
16
- namespace :config do
17
- desc 'Copies plugin resources to app'
18
- task :to_app do
19
- captcha_resource 'captchas.rb', 'config/captchas.rb'
20
- end
21
-
22
- desc 'Copies app resources to plugin'
23
- task :to_plugin do
24
- captcha_resource 'captchas.rb', 'config/captchas.rb', true
25
- end
26
-
27
- desc 'Removes plugin resources from app'
28
- task :remove do
29
- rm_rf 'config/captchas.rb'
30
- end
31
- end
32
-
33
- def captcha_resource(type, to, reverse=false, overwrite=true)
34
- from = "#{File.dirname(__FILE__)}/../resources/#{type}"
35
- from, to = to, from if reverse
36
- puts "=> Removing old #{type}..."
37
- puts to
38
- return if File.exists?(to) && !overwrite
39
- if File.directory?(from)
40
- FileUtils.remove_dir(to, true) if File.exists?(to)
41
- FileUtils.mkdir_p to
42
- else
43
- File.unlink(to) if File.exists?(to)
44
- end
45
- puts "=> Copying #{type}..."
46
- (File.directory?(from) ? Dir["#{from}/*"] : [from]).each do |f|
47
- if File.directory? f
48
- FileUtils.mkdir_p "#{to}/#{File.basename(f)}"
49
- FileUtils.cp_r f, to
50
- else
51
- FileUtils.cp f, to
52
- end
53
- end if File.exists?(from)
54
- end
55
- end