class RussianPost::Captcha::Patterns
Attributes
patterns[R]
Public Class Methods
built_in()
click to toggle source
# File lib/russian_post/captcha/patterns.rb, line 8 def built_in @builtin_patterns ||= RussianPost::Captcha::Patterns.new(File.expand_path('characters.dat', File.dirname(__FILE__))) end
new(file)
click to toggle source
# File lib/russian_post/captcha/patterns.rb, line 14 def initialize(file) @patterns = load_patterns(file) end
Public Instance Methods
add(pattern)
click to toggle source
# File lib/russian_post/captcha/patterns.rb, line 22 def add(pattern) @patterns << pattern end
each(&block)
click to toggle source
# File lib/russian_post/captcha/patterns.rb, line 18 def each(&block) @patterns.each(&block) end
find(image, x, y)
click to toggle source
# File lib/russian_post/captcha/patterns.rb, line 26 def find(image, x, y) each do |pattern| return pattern if pattern.match?(image, x, y) end return false end
Private Instance Methods
deserialize(data)
click to toggle source
# File lib/russian_post/captcha/patterns.rb, line 47 def deserialize(data) raw_data = Marshal.load(data) raw_data.inject([]) do |result, data| character, patterns = data result += patterns.map { |points| RussianPost::Captcha::Pattern.new(points, character) } end end
load_patterns(file)
click to toggle source
# File lib/russian_post/captcha/patterns.rb, line 61 def load_patterns(file) raise "Specified patterns file not exists (#{file})" unless File.exists?(file) deserialize(File.open(file, 'rb') { |file| file.read }) end
save_patterns(file, patterns)
click to toggle source
# File lib/russian_post/captcha/patterns.rb, line 57 def save_patterns(file, patterns) File.open(file, 'wb') { |file| file.write(serialize(patterns)) } end
serialize(patterns)
click to toggle source
# File lib/russian_post/captcha/patterns.rb, line 36 def serialize(patterns) array_hash = Hash.new{ |hash, key| hash[key] = []} data = patterns.inject(array_hash) do |result, pattern| result[pattern.character] << pattern.points result end Marshal.dump(data) end