class Akapen::Dsl

Akapen::Dsl

Attributes

questions[RW]

questions information

Public Class Methods

get_dynamic_field_names() click to toggle source

get dynamic define field names.

# File lib/akapen_dsl.rb, line 11
def get_dynamic_field_names
  Akapen::Dsl.instance_methods(false).delete_if {|e|e.match /(questions|method_missing)/}.delete_if {|e|e.match /^_.*$/}
end
new() click to toggle source

init Akapen::Dsl

# File lib/akapen_dsl.rb, line 17
def initialize
  @questions = []
end

Public Instance Methods

method_missing(method_name, *args, &block) click to toggle source

create dynamic define field or set question_ok or question_ng

# File lib/akapen_dsl.rb, line 25
def method_missing(method_name, *args, &block)
  arg = args[0]
  return if set_question_ok(method_name, arg)
  return if set_question_ng(method_name, arg)
  define_others(method_name, arg)
end

Private Instance Methods

define_others(method_name, arg) click to toggle source
# File lib/akapen_dsl.rb, line 61
    def define_others(method_name, arg)
      self.class.class_eval "attr_accessor :_#{method_name}"
      self.class.class_eval <<-EOS
def #{method_name}(_#{method_name})
  @_#{method_name} = _#{method_name}
end
      EOS
      self.method("#{method_name}").call(arg)
    end
set_question_ng(method_name, ng_message) click to toggle source
# File lib/akapen_dsl.rb, line 47
def set_question_ng(method_name, ng_message)
  return unless method_name.to_s.match /^q(\d+)_ng$/

  ret = @questions.find {|qe|qe.no == $1} 
  if ret
    ret.ng = ng_message
  else
    q = Question.new($1)
    q.ng = ng_message
    @questions << q
  end
  true
end
set_question_ok(method_name, ok_message) click to toggle source
# File lib/akapen_dsl.rb, line 33
def set_question_ok(method_name, ok_message)
  return unless method_name.to_s.match /^q(\d+)_ok$/

  ret = @questions.find {|qe|qe.no == $1} 
  if ret
    ret.ok = ok_message
  else
    q = Question.new($1)
    q.ok = ok_message
    @questions << q
  end
  true
end