Я знаю, как переопределить шаблон Rails в геме, но как я могу переопределить шаблон генератора гема в приложении Rails
например: https://github.com/elabs/pundit/blob/master/lib/generators/pundit/policy/templates/policy.rb
or
https://github.com/drapergem/draper/blob/master/lib/generators/rails/templates/decorator.rb
чтобы rails g decorator Foo
генерировал мой шаблон, а не нативный gem
Спасибо
Из руководства Rails по генераторам:
Таким образом, если вы имитируете иерархию каталогов gem/tamplate, которые вы пытаетесь переопределить, то rails выберет ваш шаблон вместо тех, что находятся в источнике gem.
Обновление:
Теперь вопрос в том, как правильно имитировать эту иерархию, чтобы рельсы подхватили ваш шаблон?
Ну оказалось есть какое-то правило | шаблон для этого, например, если вы хотите переопределить шаблон по этому пути:
lib/generators/pundit/policy/templates/policy.rb
Вы должны поместить свой шаблон в
lib/templates/pundit/policy/policy.rb
Чтобы переопределить
lib/generators/rails/templates/decorator.rb
Вы должны поместить свой шаблон в
lib/templates/rails/decorator/decorator.rb
Обновление 2
Кажется, что узор течет:
lib/templates/gem_name/generator_name/template_file_name.rb
В случае драгоценного камня Draper, драгоценный камень заставляет себя действовать как родной генератор Rails:
/draper/lib/generators/rails/templates /decorator.rb
… поэтому нам нужно было использовать:
lib/templates/rails/generator_name/template_file_name.rb
.Чтобы переопределить генератор шаблонов RSpec драгоценного камня Draper:
lib/templates/rspec/generator_name/template_file_name.rb
…и так далее
эй, чувак, спасибо за помощь. Дело в том, что я перепробовал все возможные комбинации
lib/generators/pundit/policy/templates/policy.rb
,lib/templates/policy.rb
,lib/templates/haml/pundit/policy.html.haml
… но дело в том, что гем указывает путь к шаблону следующим образом: github.com/elabs/pundit/blob/master/lib/generators/pundit/ — person equivalent8; 12.02.2014@equivalent8 Это очень дикая догадка, но попробуйте
lib/templates/pundit/policy/policy.rb
— person equivalent8; 12.02.2014и для переопределения шаблона генератора драгоценных камней Draper мне пришлось создать:
lib/templates/rails/decorator/decorator.rb
— person equivalent8; 13.02.2014@equivalent8 рад, что это сработало я обновил свой ответ, чтобы охватить то, что мы узнали — person equivalent8; 13.02.2014
Мне кажется, что шаблон течет
lib/templates/gem_name/generator_name/template_file_name.rb
В случае с Draper gem, gem заставляет себя действовать как собственный генератор Rails:draper/lib/generators/rails/templates/decorator.rb
поэтому нам нужно было использоватьlib/templates/rails/generator_name/template_file_name.rb
— person equivalent8; 13.02.2014имеет для меня очень хороший смысл, и я думаю, вам следует отредактировать ответ и поместить свой шаблон для людей, которые застрянут на этом в будущем. — person equivalent8; 13.02.2014
Совет по обнаружению имен генераторов: запустите генератор скаффолдов и отметьте, какие другие генераторы он вызывает. то есть для драпировщика генератор фактически называется «декоратор».
invoke decorator create app/decorators/foo_decorator.rb invoke rspec create spec/decorators/foo_decorator_spec.rb
— person equivalent8; 04.06.2014Чтобы настроить шаблоны для генератора представлений twitter-bootswatch-rails gem, скопируйте все содержимое < href=»https://github.com/scottvrosenthal/twitter-bootswatch-rails/tree/master/lib/generators/bootswatch/themed/templates» rel=»nofollow»>папку своего шаблона в
И беги
rails g bootswatch:themed YourModels
Чтобы скопировать генераторы Pundit по умолчанию в ваш проект Rails, вы можете использовать эту команду: