winton-captcha 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/lib/captcha.rb ADDED
@@ -0,0 +1,46 @@
1
+ require 'RMagick'
2
+
3
+ Dir[File.expand_path('*/*.rb', File.dirname(__FILE__))].each do |f|
4
+ require [ File.dirname(f), File.basename(f, '.rb') ].join('/')
5
+ end
6
+
7
+ class Captcha
8
+
9
+ include Magick
10
+ attr_reader :code, :code_image
11
+
12
+ JIGGLE = 15
13
+ WOBBLE = 25
14
+
15
+ def initialize(len)
16
+ chars = ('a'..'z').to_a - ['a','e','i','o','u','l','j']
17
+ code_array = []
18
+ 1.upto(len) { code_array << chars[rand(chars.length)] }
19
+ granite = Magick::ImageList.new('granite:')
20
+ canvas = Magick::ImageList.new
21
+ canvas.new_image(32*len, 50, Magick::TextureFill.new(granite))
22
+ text = Magick::Draw.new
23
+ text.font = File.expand_path('vendor/plugins/captcha/resources/captcha.ttf')
24
+ text.pointsize = 40
25
+ cur = 10
26
+
27
+ code_array.each { |c|
28
+ rot = rand(10) > 5 ? rand(WOBBLE) : -rand(WOBBLE)
29
+ weight = rand(10) > 5 ? NormalWeight : BoldWeight
30
+ text.annotate(canvas,0,0,cur,30+rand(JIGGLE), c) {
31
+ self.rotation = rot
32
+ self.font_weight = weight
33
+ self.fill = '#98999B'
34
+ }
35
+ cur += 30
36
+ }
37
+
38
+ @code = code_array.to_s
39
+ @code_image = canvas.to_blob {
40
+ self.format = "JPG"
41
+ }
42
+
43
+ GC.start
44
+ end
45
+
46
+ end
@@ -0,0 +1,26 @@
1
+ module CaptchaActions
2
+
3
+ def self.included(base)
4
+ base.extend ClassMethods
5
+ end
6
+
7
+ module ClassMethods
8
+ def acts_as_captcha
9
+ include CaptchaActions::InstanceMethods
10
+ end
11
+ end
12
+
13
+ module InstanceMethods
14
+ def index
15
+ new unless session[:captcha]
16
+ send_file "#{RAILS_ROOT}/public/images/captchas/#{session[:captcha]}.jpg", :type => 'image/jpeg', :disposition => 'inline'
17
+ end
18
+
19
+ def new
20
+ files = Dir["#{RAILS_ROOT}/public/images/captchas/*.jpg"]
21
+ session[:captcha] = File.basename(files[rand(files.length)], '.jpg')
22
+ index
23
+ end
24
+ end
25
+
26
+ end
Binary file
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.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Winton Welsh
@@ -23,10 +23,11 @@ extra_rdoc_files: []
23
23
 
24
24
  files:
25
25
  - init.rb
26
- - lib/*
27
- - lib/**/*
26
+ - lib/captcha.rb
27
+ - lib/captcha
28
+ - lib/captcha/actions.rb
28
29
  - README.markdown
29
- - resources/*
30
+ - resources/captcha.ttf
30
31
  has_rdoc: false
31
32
  homepage: http://github.com/winton/captcha
32
33
  post_install_message: