J'essaie de nettoyer quelque chose pour le diable et de trouver de meilleures façons de le faire. L'idée est qu'au lieu d'utiliser des expressions régulières dans mes règles pour analyser une chaîne, j'aimerais utiliser quelque chose de plus proche de la syntaxe des routes "something /: searchitem/somethingelse", puis une chaîne comme "/ something/FOUNDIT/somethingelse "vous obtiendriez le résultat" FOUNDIT ".Une façon plus claire d'analyser un jeton d'une chaîne en ruby
Voici l'exemple que je suis refactorisation: Compte tenu d'une chaîne d'entrée, dire « http://claimid.com/myusername ». Je veux être en mesure d'exécuter cette chaîne contre un certain nombre de correspondances possibles, puis retourner le "myusername" un pour celui qui correspond.
Les données pour exécuter contre pourrait ressembler à ceci:
PROVIDERS = [
"http://openid.aol.com/:username",
"http://:username.myopenid.com",
"http://claimid.com/:username",
"http://:username.livejournal.com"]
something_here("http://claimid.com/myusername") # => "myusername"
Toute bonne façon de faire correspondre une chaîne comme http://claimid.com/myusername
à cette liste et donner un sens des résultats? Ou des techniques pour rendre quelque chose comme ça plus facile? Je regardais à travers le code de routage des rails comme il le fait quelque chose comme ça, mais ce n'est pas le code le plus facile à suivre.
En ce moment je fais juste cela avec des expressions régulières, mais il semble que la méthode ci-dessus serait beaucoup plus facile à lire
PROVIDERS = [
/http:\/\/openid.aol.com\/(\w+)/,
/http:\/\/(\w+).myopenid.com/,
/http:\/\/(\w+).livejournal.com/,
/http:\/\/flickr.com\/photos\/(\w+)/,
/http:\/\/technorati.com\/people\/technorati\/(\w+)/,
/http:\/\/(\w+).wordpress.com/,
/http:\/\/(\w+).blogspot.com/,
/http:\/\/(\w+).pip.verisignlabs.com/,
/http:\/\/(\w+).myvidoop.com/,
/http:\/\/(\w+).pip.verisignlabs.com/,
/http:\/\/claimid.com\/(\w+)/]
url = "http://claimid.com/myusername"
username = PROVIDERS.collect { |provider|
url[provider, 1]
}.compact.first
Génial, fonctionne très bien! Lot moins de code et plus facile à lire. – AdamFortuna