def instantiate (pinfo, opts={})
irt = opts[:if_respond_to?]
pinfo = @instantiated_participants[pinfo] if pinfo.is_a?(String)
if pinfo.respond_to?(:consume)
return (pinfo.respond_to?(irt) ? pinfo : nil) if irt
return pinfo
end
return nil unless pinfo
pa_class_name, options = pinfo
if rp = options['require_path']
require(rp)
end
if lp = options['load_path']
load(lp)
end
pa_class = Ruote.constantize(pa_class_name)
pa_m = pa_class.instance_methods
if irt && ! (pa_m.include?(irt.to_s) || pa_m.include?(irt.to_sym))
return nil
end
pa = if pa_class.instance_method(:initialize).arity > 0
pa_class.new(options)
else
pa_class.new
end
pa.context = @context if pa.respond_to?(:context=)
pa
end