Полный движок Rails с использованием полного движка

У меня есть этот полноценный движок Rails Foo с функциональностью X.

Я хочу сделать другой движок, движок Bar, который почти такой же, но переопределяет функциональность x на y. (в основном он делает то же самое, но несколько действий и представлений контроллера реализованы по-разному).

(Я мог бы разделить это позже на несколько монтируемых движков, но сейчас это будет установка: проект Baz, использующий движок Bar, который использует движок Foo)

Хотелось бы узнать есть ли подводные камни. Это не похоже на шаблон, который часто используется? Кто-нибудь еще использует это «какое-то наследование движка»?


person SirLenz0rlot    schedule 14.11.2012    source источник


Ответы (1)


Ruby OpenClassing — это то, что вы хотите сделать. Например,

# in Engine Foo
#   this code creates functionality x

Foo::SomeRubyClass
  # functionality x
  def some_method
    0.10
  end
end


# in Engine Bar
#   this code opens and reevaluates the functionality x in Foo Engine

Foo::SomeRubyClass.class_eval do
  # functionlity x method
  def some_method
    0.05
  end
end

Более подробное объяснение с моделями/представлениями/контроллерами Rails. http://edgeguides.rubyonrails.org/engines.html#overriding-models-and-controllers

person westonplatter    schedule 18.11.2012
comment
Спасибо, я пропустил это простое решение. последствие, вероятно, состоит в том, что я не должен давать своему файлу то же имя в Foo, что и в Bar? - person SirLenz0rlot; 19.11.2012
comment
На самом деле, называть его так же имеет смысл, чтобы вы могли видеть, что такое Open Classing. Open Classing более широко известен как шаблон «Decorator», поскольку вы украшаете некоторые функции новыми/другими функциями. - person westonplatter; 19.11.2012
comment
Подробнее о шаблоне декоратора: lukeredpath.co. Великобритания/блог/ - person westonplatter; 19.11.2012
comment
И еще больше о шаблоне декоратора: en.wikipedia.org/wiki/Decorator_pattern - person westonplatter; 19.11.2012