J'essaye de convertir un nom de cas de serpent en cas de chameau. Existe-t-il des méthodes intégrées?
Par exemple: "app_user"
à"AppUser"
(J'ai une chaîne que "app_user"
je veux convertir en modèle AppUser
).
ruby-on-rails
ruby
string
Lohith MV
la source
la source
ruby-on-rails
, donc, je suppose, ce n'est pas un problème. Mais merci de l'avoir mentionné.#classify
plutôt."some_namespace/module/class_name".classify => "SomeNamespace::Module::ClassName"
require "active_support/core_ext/string"
suffit, à condition que Rails soit déjà installé.Celui-ci, ça va?
Trouvé dans les commentaires ici: Classifier une chaîne Ruby
Voir le commentaire de Wayne Conrad
la source
Si vous utilisez des rails, utilisez
classify
. Il gère bien les boîtiers de bord.Remarque:
Cette réponse est spécifique à la description donnée dans la question (elle n'est pas spécifique au titre de la question). Si quelqu'un essaie de convertir une chaîne en cas de chameau, il doit utiliser la réponse de Sergio . Le questionneur déclare qu'il veut se convertir
app_user
enAppUser
(nonApp_user
), d'où cette réponse.la source
classify
renvoie une chaîne, vous devez l'appelerconstantize
par la suite pour la convertir en classe réelle.classify
est que les chaînes au pluriel deviendront singulières ...'age_in_years'.classify
devientAgeInYear
4.2.11
Source: http://rubydoc.info/gems/extlib/0.9.15/String#camel_case-instance_method
À des fins d'apprentissage:
Et pour la variante lowerCase:
la source
self.split('_').inject([]){ |buffer,e| buffer + [buffer.empty? ? e : e.capitalize] }.join
Benchmark pour les solutions Ruby pures
J'ai pris toutes les possibilités que j'avais en tête pour le faire avec du code ruby pur, les voici:
capitaliser et gsub
diviser et cartographier en utilisant la
&
sténographie (grâce à la réponse de user3869936)diviser et cartographier (grâce à la réponse de M. Black)
Et voici le Benchmark pour tout cela, nous pouvons voir que gsub est assez mauvais pour cela. J'ai utilisé 126080 mots.
la source
Je suis arrivé ici à la recherche de l'inverse de votre question, passant de l'étui de chameau à l'étui de serpent. Utilisez un trait de soulignement pour cela (pas décaméliser):
AppUser.name.underscore # => "app_user"
ou, si vous avez déjà une chaîne de casse camel:
"AppUser".underscore # => "app_user"
ou, si vous voulez obtenir le nom de la table, c'est probablement pourquoi vous voudriez le cas du serpent:
AppUser.name.tableize # => "app_users"
la source
AppUser.table_name
? Vous vous assurerez également d'avoir le vrai nom de la table si ce n'est pas app_users, mais quelque chose de défini ailleurs.Je me sens un peu mal à l'aise d'ajouter plus de réponses ici. Décidé d'opter pour l'approche de rubis pur la plus lisible et la plus minimale, sans tenir compte de la belle référence de @ ulysse-bn. Alors que le
:class
mode est une copie de @ user3869936, le:method
mode que je ne vois dans aucune autre réponse ici.Le résultat est:
la source
PascalCase
sont un sous-ensemble deCamelCase
. C'est aussi ce que je savais - cette affaire de chameau s'appliquait aux deux. Mais je n'ai jamais enquêté. Merci d'avoir mentionné PascalCase. en.wikipedia.org/wiki/Camel_case:method
version faisait unedowncase
première pour pouvoir être utilisée à la fois surlower_snake_case
etUPPER_SNAKE_CASE
.La plupart des autres méthodes répertoriées ici sont spécifiques à Rails. Si vous voulez faire cela avec pur Ruby, voici la méthode la plus concise que j'ai trouvée (merci à @ ulysse-bn pour l'amélioration suggérée)
la source
x.gsub(/(?:_|^)(\w)/){$1.upcase}
gsub
solution il semble qui est plus lente que lamap
solution.Étendre la chaîne pour ajouter du camelize
En Ruby pur, vous pouvez étendre la classe de chaînes en utilisant exactement le même code de Rails
.camelize
la source