def self.participant_send(participant, methods, arguments)
default = arguments.delete(:default)
arguments.each do |key, value|
setter = "#{key}="
participant.send(setter, value) if participant.respond_to?(setter)
end
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] }
return participant.send(method, *args)
end
return default unless default == nil
raise NoMethodError.new(
"undefined method `#{methods.first}' for #{participant.class}")
end