# File lib/ruote/svc/dispatch_pool.rb, line 193
  def self.participant_send(participant, methods, arguments)

    default = arguments.delete(:default)

    # set instance variables if possible

    arguments.each do |key, value|
      setter = "#{key}="
      participant.send(setter, value) if participant.respond_to?(setter)
    end

    # call the method, with the right arity

    Array(methods).each do |method|

      next unless participant.respond_to?(method)

      return participant.send(method) if participant.method(method).arity == 0

      args = arguments.keys.sort.collect { |k| arguments[k] }
        # luckily, our arg keys are in the alphabetical order (fei, flavour)

      return participant.send(method, *args)
    end

    return default unless default == nil

    raise NoMethodError.new(
      "undefined method `#{methods.first}' for #{participant.class}")
  end