winton-captcha 1.0.1 → 1.0.2

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.
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: