Получить все открытые методы и методы получения атрибутов и передать их в liquid_methods - PullRequest
0 голосов
/ 19 сентября 2011

Если мы хотим сделать методы доступными из жидких шаблонов, нам нужно объявить их как liquid_methods в нашей модели, например:

class User < ActiveRecord::Base
  liquid_methods :name, :adress, :any_method_we_want

  ...

Дело в том, что наша модель имеет много вещей (атрибутов)и публичные методы), и было бы вполне разумно управлять ими, а не забывать объявлять их как liquid_methods, когда мы добавляем новые, не говоря уже о действительно некрасивом списке в верхней части нашей модели.Итак, вопрос в том, что я хотел бы объявить, что все методы получения атрибутов и публичные методы должны быть «ликвидированы». Есть ли более причудливый способ, чем всегда объявлять их вручную, чтобы жидкость была доступна, как в примере?Как бы вы это сделали?

Чтобы понять, что-то вроде этого в псевдокоде (возможно, не работает):

class User < ActiveRecord::Base
  methods = self.public_methods + self.attribute_names

  liquid_methods methods

  ...

1 Ответ

2 голосов
/ 19 сентября 2011

Я использую жидкость и у меня такая же проблема. Вот мой совет против предложенного вами решения:

Вся цель Liquid состоит в том, чтобы не переоценивать данные или методы вашего приложения случайным людям, пишущим шаблоны Liquid.

(Если у вас будут только доверенные люди, пишущие шаблоны, не используйте Liquid. Вместо этого используйте erb, haml, dryml или другие варианты.

И если у вас есть две группы людей (доверенных и ненадежных), пусть ваши доверенные люди используют один тип шаблона и отправляют ненадежных людей в Liquid.)

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

Конечно, в итоге вы получите ужасный список методов, которые вы открываете для шаблонов Liquid. Но в этом случае вы уверены, что раскрываются ТОЛЬКО эти методы.

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

НТН.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...