From 0aa664d0f3a9d6dc861cbaef5889b9877b8a125d Mon Sep 17 00:00:00 2001 From: Guillaume DOTT Date: Fri, 11 Jan 2013 15:10:54 +0100 Subject: [PATCH] Use an hash for default options and merge to define params for RMagick --- .../captcha/plain_captcha.rb | 43 ++++++++----------- 1 file changed, 19 insertions(+), 24 deletions(-) diff --git a/lib/really_simple_captcha/captcha/plain_captcha.rb b/lib/really_simple_captcha/captcha/plain_captcha.rb index 1bb6ebf..abf43e1 100644 --- a/lib/really_simple_captcha/captcha/plain_captcha.rb +++ b/lib/really_simple_captcha/captcha/plain_captcha.rb @@ -3,6 +3,17 @@ require 'base64' module ReallySimpleCaptcha::Captcha module PlainCaptcha + DEFAULT_OPTIONS = { + width: 120, + height: 40, + wave_amplitude: 4.0, + wave_length: 60.0, + implode_amount: 0.2, + pointsize: 22, + text_fill: 'darkblue', + background_color: 'white' + } + include ActiveSupport::Configurable config_accessor :field_name @@ -28,14 +39,8 @@ module ReallySimpleCaptcha::Captcha def plain_captcha_tag session[PlainCaptcha.field_name] = ReallySimpleCaptcha::Util.random_string(PlainCaptcha.text_length) - image = PlainCaptcha.generate_image(session[:plain_captcha], { - implode_amount: PlainCaptcha.implode_amount, - wave_amplitude: PlainCaptcha.wave_amplitude, - wave_length: PlainCaptcha.wave_length, - pointsize: PlainCaptcha.pointsize, - fill: PlainCaptcha.fill, - background_color: PlainCaptcha.background_color, - }) + image = PlainCaptcha.generate_image(session[:plain_captcha], + PlainCaptcha.config.select { |k,v| DEFAULT_OPTIONS.has_key?(k) }) content_tag :div, class: 'plain_captcha' do html = image_tag "data:image/gif;base64,#{image}", alt: "Captcha" @@ -56,31 +61,21 @@ module ReallySimpleCaptcha::Captcha end def self.generate_image(captcha_text, args={}) - width = args[:width] || 120 - height = args[:height] || 40 + options = DEFAULT_OPTIONS.merge(args) - wave_amplitude = args[:wave_amplitude] || 4.0 - wave_length = args[:wave_length] || 60.0 - implode_amount = args[:implode_amount] || 0.2 - - pointsize = args[:pointsize] || 22 - text_fill = args[:fill] || 'darkblue' - - background_color = args[:background_color] || 'white' - - image = ::Magick::Image.new(width, height) do - self.background_color = background_color + image = ::Magick::Image.new(options[:width], options[:height]) do + self.background_color = options[:background_color] end text = ::Magick::Draw.new do - self.pointsize = pointsize + self.pointsize = options[:pointsize] self.gravity = ::Magick::CenterGravity - self.fill = text_fill + self.fill = options[:text_fill] end text.annotate(image, 0, 0, 0, 0, captcha_text) - image = image.wave(wave_amplitude, wave_length).implode(implode_amount) + image = image.wave(options[:wave_amplitude], options[:wave_length]).implode(options[:implode_amount]) Base64.strict_encode64(image.to_blob { self.format = 'GIF' }) end