class Akapen::Dsl
Akapen::Dsl
¶ ↑
Attributes
Public Class Methods
get_dynamic_field_names()
click to toggle source
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¶ ↑
-
if you call qX_ok, call
set_question_ok
-
if you call qX_ng, call
set_question_ng
-
others, you define field by called name & value.
# 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