lib/active_support/multibyte/chars.rb in activesupport-6.0.6.1 vs lib/active_support/multibyte/chars.rb in activesupport-6.1.0.rc1

- old
+ new

@@ -1,10 +1,11 @@ # frozen_string_literal: true require "active_support/json" require "active_support/core_ext/string/access" require "active_support/core_ext/string/behavior" +require "active_support/core_ext/symbol/starts_ends_with" require "active_support/core_ext/module/delegation" module ActiveSupport #:nodoc: module Multibyte #:nodoc: # Chars enables you to work transparently with UTF-8 encoding in the Ruby @@ -46,22 +47,22 @@ include Comparable attr_reader :wrapped_string alias to_s wrapped_string alias to_str wrapped_string - delegate :<=>, :=~, :acts_like_string?, to: :wrapped_string + delegate :<=>, :=~, :match?, :acts_like_string?, to: :wrapped_string # Creates a new Chars instance by wrapping _string_. def initialize(string) @wrapped_string = string @wrapped_string.force_encoding(Encoding::UTF_8) unless @wrapped_string.frozen? end # Forward all undefined methods to the wrapped string. def method_missing(method, *args, &block) result = @wrapped_string.__send__(method, *args, &block) - if /!$/.match?(method) + if method.end_with?("!") self if result else result.kind_of?(String) ? chars(result) : result end end @@ -71,21 +72,10 @@ # evaluates to +true+. def respond_to_missing?(method, include_private) @wrapped_string.respond_to?(method, include_private) end - # Returns +true+ when the proxy class can handle the string. Returns - # +false+ otherwise. - def self.consumes?(string) - ActiveSupport::Deprecation.warn(<<-MSG.squish) - ActiveSupport::Multibyte::Chars.consumes? is deprecated and will be - removed from Rails 6.1. Use string.is_utf8? instead. - MSG - - string.encoding == Encoding::UTF_8 - end - # Works just like <tt>String#split</tt>, with the exception that the items # in the resulting list are Chars instances instead of String. This makes # chaining methods easier. # # 'Café périferôl'.mb_chars.split(/é/).map { |part| part.upcase.to_s } # => ["CAF", " P", "RIFERÔL"] @@ -132,38 +122,10 @@ def titleize chars(downcase.to_s.gsub(/\b('?\S)/u) { $1.upcase }) end alias_method :titlecase, :titleize - # Returns the KC normalization of the string by default. NFKC is - # considered the best normalization form for passing strings to databases - # and validations. - # - # * <tt>form</tt> - The form you want to normalize in. Should be one of the following: - # <tt>:c</tt>, <tt>:kc</tt>, <tt>:d</tt>, or <tt>:kd</tt>. Default is - # ActiveSupport::Multibyte::Unicode.default_normalization_form - def normalize(form = nil) - form ||= Unicode.default_normalization_form - - # See https://www.unicode.org/reports/tr15, Table 1 - if alias_form = Unicode::NORMALIZATION_FORM_ALIASES[form] - ActiveSupport::Deprecation.warn(<<-MSG.squish) - ActiveSupport::Multibyte::Chars#normalize is deprecated and will be - removed from Rails 6.1. Use #unicode_normalize(:#{alias_form}) instead. - MSG - - send(:unicode_normalize, alias_form) - else - ActiveSupport::Deprecation.warn(<<-MSG.squish) - ActiveSupport::Multibyte::Chars#normalize is deprecated and will be - removed from Rails 6.1. Use #unicode_normalize instead. - MSG - - raise ArgumentError, "#{form} is not a valid normalization variant", caller - end - end - # Performs canonical decomposition on all the characters. # # 'é'.length # => 2 # 'é'.mb_chars.decompose.to_s.length # => 3 def decompose @@ -199,10 +161,10 @@ to_s.as_json(options) end %w(reverse tidy_bytes).each do |method| define_method("#{method}!") do |*args| - @wrapped_string = send(method, *args).to_s + @wrapped_string = public_send(method, *args).to_s self end end private