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?

¿Fue útil?

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! o text = text.capitalize.
  • Pero el capitalize método solo upcases 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top