¿Ruby regexp para convertir Snake_casing en PascalCasing?
-
12-12-2019 - |
Pregunta
He creado un marco web que utiliza la siguiente función:
def to_class(text)
text.capitalize
text.gsub(/(_|-)/, '')
end
Para convertir nombres de directorio que son snake_cased
o hyphen-cased
en PascalCased
nombres de clases para su proyecto.
El problema es que la función solo se eliminó _
y -
, y no pone en mayúscula la siguiente letra.Usando .capitalize
, o .upcase
, ¿hay alguna manera de lograr que tu snake/hyphen_/-cased
nombres en forma adecuada PascalCased
nombres de clases?
Solución
Esto divide la cadena _ en mayúsculas y minúsculas en una matriz;capitaliza a cada miembro y pega la matriz nuevamente a una cadena:
def to_pascal_case(str)
str.split(/-|_/).map(&:capitalize).join
end
p to_pascal_case("snake_cased") #=>"SnakeCased"
Su código no funciona por varias razones:
- El objeto resultante del método de capitalización se descarta: debe hacer algo como
text.capitalize!
otext = text.capitalize
. - Pero el
capitalize
método soloupcase
s La primera letra de la cadena, no la primera letra de cada palabra.
Otros consejos
gsub(/(?:^|[_-])([a-z])?/) { $1.upcase unless $1.nil? }
Rails tiene un método similar llamado camelizar.Básicamente, capitaliza cada parte de la cadena que consta de [a-z0-9]
y elimina todo lo demás.
Probablemente puedas reducirlo a algo más pequeño, pero:
txt = 'foo-bar_baz'
txt.gsub(/(?:^|[-_])([a-z])/) { |m| m.upcase }.gsub(/[-_]/, '') # FooBarBaz