В Ruby, как я могу проверить класс, сгенерированный шаблоном .html.erb? - PullRequest
2 голосов
/ 09 апреля 2011

При разработке J2EE я нахожу удобным для отладки просматривать классы Java, сгенерированные компилятором JSP.

Как я могу сделать эквивалент в Ruby? Поскольку все это в памяти, он не будет генерировать файл, который я могу просмотреть. Я считаю, что это модуль ERB, который генерирует соответствующий объект для шаблона, так как я могу на самом деле просмотреть объект? Могу ли я где-нибудь добавить оператор отладчика и использовать rdb? Есть ли какое-то значение конфигурации, которое я могу сказать, чтобы сбросить определение объекта? Я использую рельсы, на случай, если что-то изменится.

Ответы [ 3 ]

2 голосов
/ 09 апреля 2011

Я не думаю, что рельсы генерируют класс для вашего взгляда. Он в основном вызывает eval после обработки файла. Или вы имеете в виду проверку объекта erb во время синтаксического анализа вашего шаблона?

Если это последнее, вы можете найти файл erb.rb в lib \ ruby ​​\ 1.9.1. Я думаю, вы можете просто добавить оператор отладчика в этот файл.

1 голос
/ 10 апреля 2011

Из-за языковых различий есть некоторые различия по сравнению с Java.

Большинство библиотек шаблонов для Ruby выполняют следующие шаги при компиляции / оптимизации:

  1. Шаблон скомпилирован в исходный код Ruby - не класс, а длинная процедура, которая добавляет к строковому буферу при обходе логики исходного шаблона.
  2. Этот код ruby ​​оценивается для привязки к более поздней ссылке, предпочтительно внутри тела метода. Таким образом, интерпретатор анализирует его только один раз.
  3. Метод (или другой контекст), содержащий логику анализируемого шаблона, вызывается для его визуализации.

Так или иначе, скомпилированный код шаблона, таким образом, очень похож на более шумную версию вашего исходного шаблона и, как правило, не поможет вам в отладке, если вы не отлаживаете сам язык шаблона.

Всем, кто интересуется реализацией языка шаблонов, может понравиться Код наклона (используйте разные языки шаблонов с одинаковым интерфейсом рендеринга и оптимизацией) и Temple (отличный язык шаблонов). мета-реализация).

1 голос
/ 09 апреля 2011

У меня всегда есть привычка добавлять следующее в мои представления (макет), что позволяет мне проверять или отлаживать параметры, используемые рассматриваемым представлением.

<%= debug(params) %>

Это отформатирует все параметры в yaml и отобразит их в формате Hash.

Для лучшего понимания посмотрите метод в исходном коде. ИСТОЧНИК

...