def self.read(elt)
case elt
when ParticipantEntry
elt.to_a
when Hash
options = elt['options'] || elt.reject { |k, v|
%w[ name regex regexp class classname ].include?(k)
}
name, _ = elt.find { |k, v| v == nil }
if name
elt.delete(name)
options.delete(name)
end
name = name || elt['name']
name = Ruote.regex_or_s(name)
regex = name
if name.nil?
regex = Ruote.regex_or_s(elt['regex'] || elt['regexp'])
regex = regex.is_a?(String) ? Regexp.new(regex) : regex
end
klass = (elt['classname'] || elt['class']).to_s
[ regex, [ klass, options ] ]
when Array
if elt.size == 3
[ Ruote.regex_or_s(elt[0]), [ elt[1].to_s, elt[2] ] ]
else
[ Ruote.regex_or_s(elt[0]), elt[1] ]
end
else
raise ArgumentError.new(
"cannot read participant out of #{elt.inspect} (#{elt.class})")
end
end