def add( *args, &block )
name = priority = nil
options = {}
klass = nil
element = nil
if [ Symbol, String ].any? { |i| args.first.is_a?( i ) }
name = args.shift.to_s.intern
end
priority = args.shift if args.first.is_a?( Numeric )
klass = args.shift if args.first.respond_to?( :new ) && block.nil?
options = args.shift if args.first.is_a?( Hash )
raise ArgumentError,
"bad argument list #{args.inspect}" unless args.empty?
if block
element = BlockElement.new( @service_point, name, priority,
options, block )
else
klass ||= @service_point.container[:pipeline_elements].fetch( name )
element = klass.new( @service_point, name, priority, options )
end
@elements << element
self
end