Is there any ready function which converts camel case Strings into underscore separated string?
I want something like this:
"CamelCaseString".to_underscore
to return "camel_case_string".
...
Is there any ready function which converts camel case Strings into underscore separated string?
I want something like this:
"CamelCaseString".to_underscore
to return "camel_case_string".
...
You can use
"CamelCasedName".tableize.singularize
Or just
"CamelCasedName".underscore
Both options ways will yield "camel_cased_name". You can check more details it here.
In case someone looking for case when he need to apply underscore to string with spaces and want to convert them to underscores as well you can use something like this
'your String will be converted To underscore'.parameterize.underscore
#your_string_will_be_converted_to_underscore
Or just use .parameterize('_') but keep in mind that this one is deprecated
'your String will be converted To underscore'.parameterize('_')
#your_string_will_be_converted_to_underscore
I would like this:
class String
# \n returns the capture group of "n" index
def snakize
self.gsub(/::/, '/')
.gsub(/([a-z\d])([A-Z])/, "\1_\2")
.downcase
end
# or
def snakize
self.gsub(/::/, '/')
.gsub(/([a-z\d])([A-Z])/) do
"#{$1}_#{$2}"
end
.downcase
end
end
Monkey patch of String class. There are class that begin with two or more letters in uppercase.
The ruby core itself has no support to convert a string from (upper) camel case to (also known as pascal case) to underscore (also known as snake case).
So you need either to make your own implementation or use an existing gem.
There is a small ruby gem called lucky_case which allows you to convert a string from any of the 10+ supported cases to another case easily:
require 'lucky_case'
# convert to snake case string
LuckyCase.snake_case('CamelCaseString') # => 'camel_case_string'
# or the opposite way
LuckyCase.pascal_case('camel_case_string') # => 'CamelCaseString'
You can even monkey patch the String class if you want to:
require 'lucky_case/string'
'CamelCaseString'.snake_case # => 'camel_case_string'
'CamelCaseString'.snake_case! # => 'camel_case_string' and overwriting original
Have a look at the offical repository for more examples and documentation:
I had trouble running "CamelCaseString".underscore in a rake task. This helped me:
ActiveSupport::Inflector.underscore "CamelCaseString"
=> "camel_case_string"
Of course, you need to require ActiveSupport