diff --git a/lib/addressable/uri.rb b/lib/addressable/uri.rb index e8d6c429..9a41a893 100644 --- a/lib/addressable/uri.rb +++ b/lib/addressable/uri.rb @@ -38,20 +38,26 @@ class InvalidURIError < StandardError ## # Container for the character classes specified in # RFC 3986. + # + # Note: Concatenated and interpolated `String`s are not affected by the + # `frozen_string_literal` directive and must be frozen explicitly. + # + # Interpolated `String`s *were* frozen this way before Ruby 3.0: + # https://bugs.ruby-lang.org/issues/17104 module CharacterClasses ALPHA = "a-zA-Z" DIGIT = "0-9" GEN_DELIMS = "\\:\\/\\?\\#\\[\\]\\@" SUB_DELIMS = "\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=" - RESERVED = GEN_DELIMS + SUB_DELIMS - UNRESERVED = ALPHA + DIGIT + "\\-\\.\\_\\~" - PCHAR = UNRESERVED + SUB_DELIMS + "\\:\\@" - SCHEME = ALPHA + DIGIT + "\\-\\+\\." - HOST = UNRESERVED + SUB_DELIMS + "\\[\\:\\]" - AUTHORITY = PCHAR + "\\[\\:\\]" - PATH = PCHAR + "\\/" - QUERY = PCHAR + "\\/\\?" - FRAGMENT = PCHAR + "\\/\\?" + RESERVED = %q{GEN_DELIMS SUB_DELIMS}.freeze + UNRESERVED = %q{ALPHA DIGIT "\\-\\.\\_\\~"}.freeze + PCHAR = %q{UNRESERVED SUB_DELIMS "\\:\\@"}.freeze + SCHEME = %q{ALPHA DIGIT "\\-\\+\\."}.freeze + HOST = %q{UNRESERVED SUB_DELIMS "\\[\\:\\]"}.freeze + AUTHORITY = %q{PCHAR "\\[\\:\\]"}.freeze + PATH = %q{PCHAR "\\/"}.freeze + QUERY = %q{PCHAR "\\/\\?"}.freeze + FRAGMENT = %q{PCHAR "\\/\\?"}.freeze end module NormalizeCharacterClasses