2010-07-04 3 views
0

Possible en double:
Path parsing in railsRuby cordes comme la façon dont l'analyse syntaxique des rails parse routes (avec: symboles)

Je suis en train d'analyser quelques fichiers journaux avec Ruby. J'ai beaucoup d'expérience avec regexes mais l'autre jour j'utilisais des chemins de rails et je pensais que cela pourrait être une manière très soignée d'analyser ces fichiers journaux car il serait incroyablement facile de comprendre l'analyseur. Regex, d'autre part, prend plusieurs minutes pour la plupart des gens à digérer dans une logique compréhensible.

La « magie noire » de Rails semble faire des choses comme ceci:

#some sort of route (the format string): 
map.awesome_route 'awesome/:id/:slug.:format' 
# 
#presumably behind the scenes: 
url = 'stackoverflow.com/awesome/3/all_my_questions.xml 
hash = url.parse_by_route map.awesome_route, url 

#now, again presumably: 
# 
#hash[:id] => '3' 
#hash[:slug] => 'all_my_questions' 
#hash[:format] => 'xml' 

Peut-être que ce ne sont pas les rails de façon ne fait les choses. Mais ça devrait. Existe-t-il un moyen d'analyser mon fichier journal comme ça? Il vraiment vraiment vraiment faire ma journée.

Merci!

+1

Pouvez-vous donner une meilleure explication de la manière dont vous souhaitez que cette interface soit traduite dans votre journal? Que voulez-vous pouvoir taper, que voulez-vous faire ensuite? Vous pourriez aussi être intéressé de voir comment Sinatra convertit les routes en regex + noms pour les groupes de capture http://github.com/JoshCheek/JoshsRubyKickstart/blob/master/cheatsheets/sinatra.rb#L27 Je suppose que les routes de Rails sont très similaires. –

+0

Joshua, Sinatra semble faire la même chose que Rails. –

Répondre

2

peut-être ActionController::Routing::Routes.recognize_path est ce que vous cherchez?

ActionController::Routing::Routes.recognize_path '/users/6' 
# => { :controller => 'users', :action => 'show', :id => 6 } 

Si vous voulez analyser les fichiers journaux dans un script, il ne devrait pas être un problème pour analyser votre routes.rb avant de commencer, de sorte que la mise en correspondance des itinéraires sera mis en place.