2013-05-29 1 views
5

Глядя на Readme маршрутизатора Journey Router (который является маршрутизатором Rails 4.0), он довольно пуст. Мне было интересно, как маршрутизатор работает концептуально, и если это «абстрактные» грамматику ловит идею, маршрутизатора в качестве мини-языка программирования:Как работает Rails router Journey?

ROUTE := GET|POST|PUT|DELETE path 
path := (static_path) | (dynamic_path) 

Итак, как же работает рельсы 4.0 Router?

+2

интересно, синопсис говорит «Слишком сложно прямо сейчас. : (' – fontno

ответ

9

Если вы хотите понять маршрут Rails, лучшим местом для начала является Rails Routing from the Outside In в направляющей кромки.

После этого у вас будет больше удачи, глядя на ActionDispatch::Routing's docs.

Примечание. Следующее относится к Journey v1.0.4, который был последним на момент написания.

Само путешествие - это маршрут маршрутизации Rails introduced в Rails 3.2. В примечаниях к выпуску описывается одно заявление: «Признание маршрута также стало быстрее благодаря новому двигателю Journey». Конечно, это не так много информации о путешествиях, но Rails не описывает каждую деталь реализации; это навсегда! :) Journey's gemspec также описывает себя с утверждением: «Путешествие - это маршрутизатор, который направляет запросы».

Вы можете посмотреть на api docs, но в v1.0.4, он имеет крайне разреженную документации (Journey :: Router :: Utils.normalize_path (путь) является documented), кроме code itself и, может быть, его open и closed вопросов. Вы можете взглянуть на другого С.О. сообщения с тегом journey.

Некоторые из кода несколько самоописательны только через имена методов и т. Д., Как в Journey::Routes. Journey's tests также отличный способ увидеть, как это работает.

Некоторые заметки о самом коде:

  • Он monkey-patches Hash в предварительно 1,9-версии Ruby, чтобы добавить метод keep_if.
  • «GTG» означает «обобщенный граф переходов» (см here)
  • Funniest кода here (Пасхальное яйцо: rails c затем Journey::Path::Pattern.new(9))

Поездка visualizer может быть интересно играть с, а также (примечание visualizer метод в путешествии :: GTG :: TransitionTable). Пример визуализации here и онлайн-демо here пока.

+1

Спасибо, Гэри, эта последняя часть вашего ответа была именно тем, что я искал. – poseid

Смежные вопросы