Как работает Rails роутер Journey?
Глядя на файл Readme для Route Router (который является Rails 4.0), он довольно пустой. Мне было интересно, как маршрутизатор работает концептуально, и если этот "абстрактный" грамматик улавливает идею маршрутизатора как языка мини-программирования:
ROUTE := GET|POST|PUT|DELETE path
path := (static_path) | (dynamic_path)
Итак, как работает Rails 4.0 Router?
1 ответ
Если вы хотите разбираться в маршрутизации Rails, лучше всего начать с маршрутизации Rails с внешней стороны в руководстве по краям.
После этого вам повезет больше, глядя на ActionDispatch::Routing
Документы.
Примечание: следующее относится к Journey v1.0.4, который был последним на момент написания.
Само путешествие - это механизм маршрутизации Rails, представленный в Rails 3.2. В примечаниях к выпуску это описывается одним утверждением: "Распознавание маршрутов также стало намного быстрее благодаря новому движку Journey ". Конечно, это не так много информации о Journey, но Rails описывает не все детали реализации; это заняло бы вечность!:) Gemspec от Journey также описывает себя утверждением: "Journey - это маршрутизатор. Он направляет запросы".
Вы можете взглянуть на API- интерфейсы, но в v1.0.4 он имеет крайне скудную документацию (документирован Journey::Router::Utils.normalize_path(путь)), кроме самого кода и, возможно, его открытых и закрытых проблем. Вы можете взглянуть на другие SO сообщения с тегом trip.
Часть кода является несколько информативной только через имена методов и т. Д., Как в Journey:: Routes. Тесты Journey также являются отличным способом увидеть, как это работает.
Некоторые замечания по самому коду:
- Он исправляет Hash в версиях Ruby до 1.9, чтобы добавить метод keep_if.
- "gtg" означает "обобщенный граф переходов" (см. здесь)
- Самый смешной код здесь (пасхальное яйцо:
rails c
затемJourney::Path::Pattern.new(9)
)
С визуализатором Journey также может быть интересно поиграть (обратите внимание на метод визуализации в Journey::GTG::TransitionTable). Пример визуализации здесь и онлайн демо здесь пока.