Skip to content

Commit

Permalink
Adds titleize/titlecase to AS::Multibyte::Chars
Browse files Browse the repository at this point in the history
[#2794 state:resolved]

Signed-off-by: José Valim <jose.valim@gmail.com>
  • Loading branch information
norman authored and josevalim committed Jun 19, 2010
1 parent 95a8f25 commit 667522c
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 0 deletions.
10 changes: 10 additions & 0 deletions activesupport/lib/active_support/multibyte/chars.rb
Expand Up @@ -371,6 +371,16 @@ def capitalize
(slice(0) || chars('')).upcase + (slice(1..-1) || chars('')).downcase
end

# Capitalizes the first letter of every word, when possible.
#
# Example:
# "ÉL QUE SE ENTERÓ".mb_chars.titleize # => "Él Que Se Enteró"
# "日本語".mb_chars.titleize # => "日本語"
def titleize
chars(downcase.to_s.gsub(/\b('?[\S])/u) { Unicode.apply_mapping $1, :uppercase_mapping })
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.
#
Expand Down
14 changes: 14 additions & 0 deletions activesupport/test/multibyte_chars_test.rb
Expand Up @@ -443,6 +443,11 @@ def test_capitalize_should_work_on_ascii_characters
assert_equal 'Abc', 'abc'.mb_chars.capitalize
end

def test_titleize_should_work_on_ascii_characters
assert_equal '', ''.mb_chars.titleize
assert_equal 'Abc Abc', 'abc abc'.mb_chars.titleize
end

def test_respond_to_knows_which_methods_the_proxy_responds_to
assert ''.mb_chars.respond_to?(:slice) # Defined on Chars
assert ''.mb_chars.respond_to?(:capitalize!) # Defined on Chars
Expand Down Expand Up @@ -480,6 +485,15 @@ def test_capitalize_should_be_unicode_aware
end
end

def test_titleize_should_be_unicode_aware
assert_equal "Él Que Se Enteró", chars("ÉL QUE SE ENTERÓ").titleize
assert_equal "Абвг Абвг", chars("аБвг аБвг").titleize
end

def test_titleize_should_not_affect_characters_that_do_not_case_fold
assert_equal "日本語", chars("日本語").titleize
end

def test_limit_should_not_break_on_blank_strings
example = chars('')
assert_equal example, example.limit(0)
Expand Down

0 comments on commit 667522c

Please sign in to comment.