Estou tentando converter um nome de estojo de cobra para estojo de camelo. Existem métodos internos?
Por exemplo: "app_user"
para"AppUser"
(Eu tenho uma string que "app_user"
eu quero converter isso em modelo AppUser
).
ruby-on-rails
ruby
string
Lohith MV
fonte
fonte
ruby-on-rails
, então, acho que não é um problema. Mas obrigado por mencionar.#classify
vez disso."some_namespace/module/class_name".classify => "SomeNamespace::Module::ClassName"
require "active_support/core_ext/string"
basta que o Rails já esteja instalado.Que tal este?
Encontrado nos comentários aqui: Classifique uma string Ruby
Ver comentário de Wayne Conrad
fonte
Se você usa Rails, use
classify
. Ele lida bem com casos de borda.Nota:
Esta resposta é específica para a descrição dada na pergunta (não é específica para o título da pergunta). Se alguém estiver tentando converter uma string em caixa de camelo, deve usar a resposta de Sergio . O interlocutor afirma que ele deseja converter
app_user
paraAppUser
(nãoApp_user
), portanto, esta resposta ..fonte
classify
retorna uma string, você precisa chamarconstantize
depois para convertê-la em uma classe real.classify
é que as seqüências de caracteres pluralizadas se tornarão singulares ...'age_in_years'.classify
tornaAgeInYear
4.2.11
Fonte: http://rubydoc.info/gems/extlib/0.9.15/String#camel_case-instance_method
Para fins de aprendizado:
E para a variante lowerCase:
fonte
self.split('_').inject([]){ |buffer,e| buffer + [buffer.empty? ? e : e.capitalize] }.join
Referência para soluções Ruby puras
Eu tomei todas as possibilidades que eu tinha em mente para fazê-lo com código ruby puro, aqui estão elas:
capitalizar e gsub
dividir e mapear usando
&
abreviação (graças à resposta do usuário3869936)divisão e mapa (graças à resposta do Sr. Black)
E aqui está o Benchmark para todos esses, podemos ver que o gsub é muito ruim para isso. Eu usei 126 080 palavras.
fonte
Cheguei aqui procurando o inverso da sua pergunta, passando de estojo de camelo para estojo de cobra. Use sublinhado para isso (não decamelize):
AppUser.name.underscore # => "app_user"
ou, se você já tiver uma sequência de camel case:
"AppUser".underscore # => "app_user"
ou, se você deseja obter o nome da tabela, provavelmente é por isso que deseja o caso da cobra:
AppUser.name.tableize # => "app_users"
fonte
AppUser.table_name
? Você também garantirá o nome da tabela verdadeira, se não for app_users, mas algo definido em outro lugar.Sinto-me um pouco desconfortável ao adicionar mais respostas aqui. Decidiu optar pela abordagem de rubi puro mais legível e mínima, desconsiderando a boa referência do @ ulysse-bn. Embora
:class
mode seja uma cópia de @ user3869936, o:method
modo que não vejo em nenhuma outra resposta aqui.O resultado é:
fonte
PascalCase
são um subconjunto deCamelCase
. Também era isso que eu sabia - aquele estojo de camelo aplicado a ambos. Mas eu nunca investiguei. Obrigado por mencionar o PascalCase. pt.wikipedia.org/wiki/Camel_case:method
versão fizesse odowncase
primeiro, para poder ser usada em amboslower_snake_case
eUPPER_SNAKE_CASE
.A maioria dos outros métodos listados aqui é específica do Rails. Se você quiser fazer isso com Ruby puro, a seguir, é a maneira mais concisa que eu criei (obrigado a @ ulysse-bn pela melhoria sugerida)
fonte
x.gsub(/(?:_|^)(\w)/){$1.upcase}
gsub
solução, que parece ser mais lenta em comparação com amap
solução.Estender String para adicionar Camelize
No Ruby puro, você pode estender a classe de string usando exatamente o mesmo código do Rails
.camelize
fonte