module Humanizer

Constants

VERSION

Attributes

humanizer_answer[RW]
humanizer_question_id[W]

Public Class Methods

included(base) click to toggle source
# File lib/humanizer.rb, line 3
def self.included(base)
  base.extend(ClassMethods)
end

Public Instance Methods

change_humanizer_question(current=nil) click to toggle source
# File lib/humanizer.rb, line 18
def change_humanizer_question(current=nil)
  @humanizer_question_ids = nil if humanizer_question_ids.compact.count == 1
  humanizer_question_ids.delete(current) if current
  @humanizer_question_id = random_humanizer_question_id
end
humanizer_correct_answer?() click to toggle source
# File lib/humanizer.rb, line 24
def humanizer_correct_answer?
  humanizer_answer && humanizer_answers_for_id(humanizer_question_id).include?(humanizer_answer.mb_chars.downcase.strip)
end
humanizer_question() click to toggle source
# File lib/humanizer.rb, line 10
def humanizer_question
  humanizer_questions[humanizer_question_id.to_i]["question"]
end
humanizer_question_id() click to toggle source
# File lib/humanizer.rb, line 14
def humanizer_question_id
  (@humanizer_question_id ||= random_humanizer_question_id).to_i
end

Private Instance Methods

humanizer_answers_for_id(id) click to toggle source
# File lib/humanizer.rb, line 54
def humanizer_answers_for_id(id)
  question = humanizer_questions[id.to_i]

  return [] unless question

  Array(question["answer"] || question["answers"]).map { |a| a.to_s.mb_chars.downcase }
end
humanizer_check_answer() click to toggle source
# File lib/humanizer.rb, line 62
def humanizer_check_answer
  errors.add(:humanizer_answer, I18n.translate("humanizer.validation.error")) unless humanizer_correct_answer?
end
humanizer_question_ids() click to toggle source
# File lib/humanizer.rb, line 46
def humanizer_question_ids
  @humanizer_question_ids ||= (0...humanizer_questions.count).to_a
end
humanizer_questions() click to toggle source
# File lib/humanizer.rb, line 30
def humanizer_questions
  @humanizer_questions ||= begin
    questions = I18n.translate!("humanizer.questions")
    # Poor man's HashWithIndifferentAccess
    questions.map do |question|
      question.default_proc = proc do |h, k|
         case k
           when String then sym = k.to_sym; h[sym] if h.key?(sym)
           when Symbol then str = k.to_s; h[str] if h.key?(str)
         end
      end
    end
    questions
  end
end
random_humanizer_question_id() click to toggle source
# File lib/humanizer.rb, line 50
def random_humanizer_question_id
  humanizer_question_ids.sample
end