Pergunta

Criei um framework web que usa a seguinte função:

def to_class(text)
    text.capitalize
    text.gsub(/(_|-)/, '')
end

Para transformar nomes de diretórios que são snake_cased ou hyphen-cased em PascalCased nomes de classe para o seu projeto.

O problema é que a função só foi removida _ e -, e não coloca a próxima letra em maiúscula.Usando .capitalize, ou .upcase, existe uma maneira de conseguir fazer o seu snake/hyphen_/-cased nomes em nome próprio PascalCased nomes de classes?

Foi útil?

Solução

Isso divide a string _cased em uma matriz;coloca todos os membros em maiúscula e cola o array de volta em uma string:

def to_pascal_case(str)
  str.split(/-|_/).map(&:capitalize).join
end

p to_pascal_case("snake_cased") #=>"SnakeCased"

Seu código não funciona por vários motivos:

  • O objeto resultante do método de capitalização é descartado - você deve fazer algo como text.capitalize! ou text = text.capitalize.
  • Mas o capitalize método apenas upcases a primeira letra da cadeia de caracteres, não a primeira letra de cada palavra.

Outras dicas

gsub(/(?:^|[_-])([a-z])?/) { $1.upcase unless $1.nil? }

Rails tem um método semelhante chamado camelizar.Basicamente, ele coloca em maiúscula cada parte da string que consiste em [a-z0-9] e remove todo o resto.

Você provavelmente pode reduzir para algo menor, mas:

txt = 'foo-bar_baz'
txt.gsub(/(?:^|[-_])([a-z])/) { |m| m.upcase }.gsub(/[-_]/, '') # FooBarBaz
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top