14: def add(name, options = {})
15: method = name.to_s + "?"
16: if self.class.respond_to?(method)
17: raise ArgumentError, "Feature %s is already defined" % name
18: end
19:
20: if block_given?
21: begin
22: result = yield
23: rescue => detail
24: warn "Failed to load feature test for %s: %s" % [name, detail]
25: result = false
26: end
27: @results[name] = result
28: end
29:
30: meta_def(method) do
31: unless @results.include?(name)
32: @results[name] = test(name, options)
33: end
34: @results[name]
35: end
36: end