def |(other)
      return super unless converted = self.class.try_convert(other, **options)
      return super unless converted.names.empty? or names.empty?
      self.class.new(safe_string + "|" + converted.safe_string, **options)
    end
def |(other)
      return super unless converted = self.class.try_convert(other, **options)
      return super unless converted.names.empty? or names.empty?
      self.class.new(safe_string + "|" + converted.safe_string, **options)
    end
Creates a pattern that matches any string matching either one of the patterns.
 If a string is supplied, it is treated as a fully escaped Sinatra pattern.

 If the other pattern is also a Sintara pattern, it might join the two to a third
 sinatra pattern instead of generating a composite for efficiency reasons.

 This only happens if the sinatra pattern behaves exactly the same as a composite
 would in regards to matching, parsing, expanding and template generation.

 @example
   pattern = Mustermann.new('/foo/:name') | Mustermann.new('/:first/:second')
   pattern === '/foo/bar' # => true
   pattern === '/fox/bar' # => true
   pattern === '/foo'     # => false

 @param [Mustermann::Pattern, String] other the other pattern
 @return [Mustermann::Pattern] a composite pattern
 @see Mustermann::Pattern#|