74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
# File 'lib/tap/declarations.rb', line 74
def declare(baseclass, const_name, configs={}, &block)
const_name = const_name.to_s.camelize
subclass = Class.new(env.constant(baseclass))
@namespace.const_set(const_name, subclass)
configs.each_pair do |key, value|
opts = {:desc => ""}
opts[:short] = key if key.to_s.length == 1
config_block = Configurable::Validation.guess(value)
subclass.send(:config, key, value, opts, &config_block)
end
if block
arity = block.arity
arity -= arity > 0 ? 1 : -1
signature = Array.new(arity < 0 ? arity.abs - 1 : arity, 'arg')
signature << '*args' if arity < 0
subclass.const_attrs[:process] = signature.join(' ')
subclass.send(:define_method, :process) do |*args|
block.call(self, *args)
end
end
constant = env.set(subclass, nil)
if @desc
subclass.desc = @desc
constant.register_as(subclass.type, @desc)
@desc = nil
end
subclass
end
|