def set_arg_at(pos, value)
arg_info = arg_info_alist(self.name)[pos]
case (arg_info[1])
when :string, :password, :text
case (value)
when String, NilClass
else
raise "not allowed as string: #{value.inspect}"
end
when :number
case (value)
when Integer, NilClass
else
raise "not allowed as integer: #{value.inspect}"
end
when :regexp
case (value)
when Regexp, NilClass
else
raise "not allowed as regexp: #{value.inspect}"
end
when :bool
case (value)
when TrueClass, FalseClass
else
raise "not allowed as bool: #{value.inspect}"
end
when :select, :radio
unless (arg_info[2].include? value) then
raise "not included in allowed list: #{value.inspect}"
end
when :checkset
case (value)
when Hash
key_check = Hash[*value.keys.map{|k| [ k, true ] }.flatten]
for key, flag in arg_info[2]
unless (value.include? key) then
raise "not allowed as checkset by lack of key: #{value.inspect}"
end
case (value[key])
when TrueClass, FalseClass
else
raise "not allowed as checkset by not boolean flag: #{value.inspect}"
end
key_check.delete(key)
end
unless (key_check.empty?) then
raise "not allowed as checkset by excessive key: #{value.inspect}"
end
else
raise "not allowed as checkset: #{value.inspect}"
end
else
raise "unknown argument type: #{arg_info[1]}"
end
@attrs['arguments'][pos] = value
end