Поддержка как Rails 2, так и Rails 3 в гем - PullRequest
1 голос
/ 17 января 2012

Мне интересно, есть ли какие-нибудь гемы, которые поддерживают как Rails 2, так и Rails 3?Если так, как они это делают?Простые условия в коде?

Это связано с моим предыдущим вопросом: Packaging Rails 2.3 Модели

Наше веб-приложение работает на Rails 2, но новое приложение API готовитсябыть Rails 3. Между этими двумя уже есть небольшая несовместимость, которую было бы легко исправить с помощью сценария выпуска или с условными условиями выполнения.

[править] Мы планируем в конечном итоге иметь и сервер API, иСервер приложений работает на Rails 3, так что это будет на время.В настоящее время я думаю, что решение if-def может быть самым простым и простым.(См .: http://www.infoq.com/presentations/Simple-Made-Easy)

1 Ответ

1 голос
/ 17 января 2012

Если у вас есть небольшие различия между Rails 2 и 3 (например, переименованный метод), вы должны хорошо выполнить несколько условий.Вот пример из Haml-rails

  if ::Rails.version.to_f >= 3.1
    config.app_generators.template_engine :haml
  else
    config.generators.template_engine :haml
  end

Если у вас есть существенные различия, вы должны оставить два отдельных драгоценных камня.Например, will_paginate имеет версию 2.3 для Rails 2 и версию 3.0 для Rails 3 из-за серьезного рефакторинга в Active Record 3. Разрабатывается только третья версия.

Record.find(:all, :conditions => { :foo => 'bar' }, :limit => 5) # Rails 2
Record.where(:foo => 'bar').limit(5) # Rails 3

В этомВ случае, если вам нужно поддерживать две версии, вы также можете рассмотреть 3 драгоценных камня: mygem (core), mygem-rails2, mygem-rails3.Последние два будут зависеть от ядра и повторно использовать один и тот же независимый от рельсов код.

...