code: def preparse(unparsed, args = [], opts = {})
          case unparsed
          when Hash  then opts.merge! unparsed
          when Array then unparsed.each { |e| preparse(e, args, opts) }
          else args << unparsed.to_s
          end
          [args, opts]
        end
docs: can't use flatten as it will flatten hashes