Forum: Ruby on Rails Capitalize first letter of each word

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
JannaB (Guest)
on 2009-05-26 22:49
(Received via mailing list)
I am trying to capitalize first letter of each word in a string of
words, which is in a given string. I see there is a reference to this
at:

http://www.java2s.com/Code/Ruby/String/Addtwometho...

which states to add two method to string class to capitalize first
letter


class String
  def capitalize_first_letter
    self[0].chr.capitalize + self[1, size]
  end

  def capitalize_first_letter!
    unless self[0] == (c = self[0,1].upcase[0])
      self[0] = c
      self
    end
  end
end

My question is, if I create this String class -- what is it? Is it a
model? A helper? Where in the world would you put this creature in a
Rails framework? Thanks, Janna
Benjamin C. (Guest)
on 2009-05-26 23:21
(Received via mailing list)
Well, those two methods won't give you what you want, if you really want
to capitalize the first letter of every word in a sentence.  Also, if
you
just want to capitalize the first letter of the string, the built-in
capitalize method will do that for you:
'some string'.capitalize => 'Some string'

If you want to capitalize each word in a string, you could do this (a
naive
approach):

'some string'.split(' ').map {|w| w.capitalize }.join(' ')

If you then wanted to make this built-in to the String class, as you
were
referencing in your original request, you could add a method that does
this
to the String class by reopening it (like the example you posted):

class String
  def cap_words
    self.split(' ').map {|w| w.capitalize }.join(' ')
  end
end

You could put this snippet of code in a file in config/initializers or
(as
my preferred approach would be) in a file in lib (like
lib/extensions/string.rb) that is then required via an initializer (like
config/initializers/requires.rb): require 'extensions/string'

Now you have reopened String to add this method.  Whether that's a good
idea
is another matter entirely. :)

--
Benjamin C.
http://railskits.com/ - Ready-made Rails code
http://catchthebest.com/ - Team-powered recruiting
http://www.bencurtis.com/ - Personal blog
Philip H. (Guest)
on 2009-05-26 23:35
(Received via mailing list)
On May 26, 2009, at 11:48 AM, JannaB wrote:

>
> I am trying to capitalize first letter of each word in a string of
> words, which is in a given string. I see there is a reference to this
> at:
>

String#titleize is your friend...

 >> "this is some string. here is another! a question? oh my.".titleize
=> "This Is Some String. Here Is Another! A Question? Oh My."
Benjamin C. (Guest)
on 2009-05-27 00:57
(Received via mailing list)
Indeed... I got wrapped around the axle of re-opening classes in Ruby
and
forgot to mention the Rails extensions. :)
--
Benjamin C.
http://railskits.com/ - Ready-made Rails code
http://catchthebest.com/ - Team-powered recruiting
http://www.bencurtis.com/ - Personal blog
Amit K. (Guest)
on 2009-05-27 22:12
(Received via mailing list)
titleize --->>

def titleize(word)
  humanize(underscore(word)).gsub(/\b('?[a-z])/) { $1.capitalize }
end

output:

"at&t" --> "At&T"  (not the desired output)
"man-eater --> "Man Eater" (not the desired output)

"at&t".split(' ').map {|w| w.capitalize }.join(' ')  ---> "At&t" seems
to be better approach.

--
Amit
This topic is locked and can not be replied to.