function prepare_attributes (Optional[Hash[String, Any]] $attributes) { $attributes.lest || { {} }.filter |$items| { $items[1] != undef }.reduce({}) |Hash $memo, Variant[Tuple[Enum[before, consume, export, notify, require, subscribe], Array[Variant[Type[Resource], Pattern[/\A[A-Z][a-z]*(?:::[A-Z][a-z]*)*\[[^\[\]]+\]\Z/]]]], Tuple[String, Data]] $items| { if $items =~ Tuple[String, Data] { $memo + Hash.new($items) } else { $resources = $items[1].map |$item| { case $item { Resource: { $item } /\A([A-Z][a-z]*(?:::[A-Z][a-z]*)*)\[([^\[\]]+)\]\Z/: { Resource[$1][$2] } } } $memo + { $items[0] => $resources } } } }