Нужны рекомендации по созданию Rails 3 Engine / Plugin / Gem - PullRequest
0 голосов
/ 31 декабря 2010

Мне нужна помощь, чтобы выяснить, как лучше всего создать движок Rails 3 (или плагин, и / или гем).

Извиняюсь за длину этого вопроса ... вот часть 1:

Моя компания использует поставщика услуг электронной почты для отправки всех наших исходящих электронных писем клиентов.Они создали веб-сервис SOAP, и я включил его в пример приложения на Rails 3.Сначала цель создания приложения состояла в том, чтобы я мог затем взять этот код и превратить его в драгоценный камень.

Вот несколько предысторий: у службы SOAP всего 23 действия, и при создании моего примера приложенияЯ сгруппировал похожие действия вместе.Некоторые из этих действий включают загрузку / загрузку списков рассылки и содержимого HTML через SOAP WS, и, как следствие, существует база данных MySQL с несколькими таблицами для хранения содержимого HTML и списков в качестве своего рода «промежуточной области».

В общем, у меня есть 5 моделей, которые содержат действия SOAP (они не наследуют от ActiveRecord :: Base) и 3 модели, которые взаимодействуют с базой данных MySQL.

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

Итак ... Я не уверен, куда идти дальше.Мой код требует много сухости.Например, WS требует, чтобы информация об аутентификации пользователя отправлялась в теле конверта каждого запроса.Таким образом, это означает, что каждый метод в модели имеет ту же самую информацию аутентификации, жестко запрограммированную в нем, которая является чрезвычайно повторяющейся;Очевидно, я бы хотел, чтобы это было чище.Я также оглядываюсь назад через код и вижу, что сами запросы повторяются и, вероятно, могут быть объединены.

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

Вот часть 2:

Мое намерение с самого начала былочтобы извлечь мой код и упаковать его в драгоценный камень, в котором любой другой клиент моего ESP мог бы использовать его (плюс я буду использовать его в нескольких разных приложениях).Тем не менее, я хотел бы, чтобы это было очень настраиваемым.Должна быть минимальная конфигурация по умолчанию (например, просто модели, которые обертывают действия SOAP), создаваемые простым добавлением гема в Gemfile.Однако я также хотел бы, чтобы были доступны некоторые инструменты (например, генераторы или задачи Rake), чтобы пользователь мог начать работу.Я имею в виду варианты создания файлов миграции, моделей, контроллеров или представлений (или целых девяти ярдов, если они хотят).

Итак, вот где я застрял, зная, следует ли мне продолжатьПлагин или двигатель маршрута.Я читал серию Джордана Уэста о создании движка, и мне действительно нравится мысль об этом, но я не уверен, что это правильный путь для меня.

Так что, если вы читали это далеко, а я нетне смутил тебя, я мог бы использовать некоторые указания:)

Спасибо

1 Ответ

0 голосов
/ 31 декабря 2010

Давайте ответим на ваш вопрос по частям.

Часть первая

Гибкость Ruby означает, что вы можете очень легко обмениваться кодами для всех ваших моделей.Они расширяют какой-либо класс?Если это так, просто добавьте методы к родительскому объекту следующим образом:

class SOAPModel
  def request(action, params)
    # Request code goes in here
  end
end

Тогда это просто случай вызова request в ваших соответствующих моделях.Кроме того, вы можете получить статический доступ к этому методу с помощью SOAPModel.request.Это действительно зависит от вас.В противном случае, если (по какой-то странной причине) вы не можете прикоснуться к родительскому объекту, вы могли бы определять методы динамически:

[User, Post, Message, Comment, File].each do |model|
  model.send :define_method, :request, proc { |action, params|
    # Request code goes in here
  }
end

Это Ruby, поэтому существует множество способовделать это.

Часть вторая

Драгоценные камни более чем гибки для решения вашей проблемы;и Rails, и Rake довольно умны и будут смотреть в ваш гем (при условии, что он находится в вашем файле среды и Gemfile).Создайте каталог generators и /name/name_generator.rb, где name - имя вашего генератора.Просто беги rails g name и ты там.То же самое касается Рейка (tasks).

Надеюсь, это поможет!

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