Reputation: 4632
I know you can do something like:
"SomeWordHere".underscore.gsub("_", " ")
to get "some word here".
I thought that might be a little too much for something so simple. Is there a more efficient way (maybe a built-in method?) to convert "SomeWordHere" to "some word here"?
Upvotes: 18
Views: 10183
Reputation: 6712
I think this is a simpler solution:
"SomeWordHere".titleize.downcase
Upvotes: 15
Reputation: 141879
The methods underscore and humanize are designed for conversions between tables, class/package names, etc. You are better off using your own code to do the replacement to avoid surprises. See comments.
"SomeWordHere".underscore => "some_word_here"
"SomeWordHere".underscore.humanize => "Some word here"
"SomeWordHere".underscore.humanize.downcase => "some word here"
Upvotes: 31
Reputation: 838216
You can use a regular expression:
puts "SomeWordHere".gsub(/[a-zA-Z](?=[A-Z])/, '\0 ').downcase
Output:
some word here
One reason you might prefer this is if your input could contain dashes or underscores and you don't want to replace those with spaces:
puts "Foo-BarBaz".underscore.gsub('_', ' ')
puts "Foo-BarBaz".gsub(/[a-zA-Z](?=[A-Z])/, '\0 ').downcase
Output:
foo bar baz
foo-bar baz
Upvotes: 6
Reputation: 40543
Nope there is no built-in method that I know of. Any more efficient then a one-liner? Don't thinks so. Maybe humanize
instead of the gsub
, but you don't get exactly the same output.
Upvotes: 1