module Fluent::Configurable::ClassMethods
def config_param(name, *args, &block)
def config_param(name, *args, &block) name = name.to_sym opts = {} args.each {|a| if a.is_a?(Symbol) opts[:type] = a elsif a.is_a?(Hash) opts.merge!(a) else raise ArgumentError, "wrong number of arguments (#{1+args.length} for #{block ? 2 : 3})" end } type = opts[:type] if block && type raise ArgumentError, "wrong number of arguments (#{1+args.length} for #{block ? 2 : 3})" end block ||= case type when :string, nil Proc.new {|val| val } when :integer Proc.new {|val| val.to_i } when :float Proc.new {|val| val.to_f } when :size Proc.new {|val| Config.size_value(val) } when :bool Proc.new {|val| Config.bool_value(val) } when :time Proc.new {|val| Config.time_value(val) } else raise ArgumentError, "unknown config_param type `#{type}'" end params = config_params_set params.delete(name) params[name] = [block, opts] if opts.has_key?(:default) config_set_default(name, opts[:default]) end attr_accessor name end