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