Ce que je fais, c'est d'ajouter un InstallGenerator
qui va ajouter les migrations vers les Rails site lui-même. Il n'a pas tout à fait le même comportement que celui que vous avez mentionné, mais pour l'instant, pour moi, c'est bien assez.
Un petit how-to:
Tout d'abord, créez le dossier lib\generators\<your-gem-name>\install
et à l'intérieur de ce dossier, créez un fichier appelé install_generator.rb
avec le code suivant:
require 'rails/generators/migration'
module YourGemName
module Generators
class InstallGenerator < ::Rails::Generators::Base
include Rails::Generators::Migration
source_root File.expand_path('../templates', __FILE__)
desc "add the migrations"
def self.next_migration_number(path)
unless @prev_migration_nr
@prev_migration_nr = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i
else
@prev_migration_nr += 1
end
@prev_migration_nr.to_s
end
def copy_migrations
migration_template "create_something.rb", "db/migrate/create_something.rb"
migration_template "create_something_else.rb", "db/migrate/create_something_else.rb"
end
end
end
end
et à l'intérieur de l' lib/generators/<your-gem-name>/install/templates
ajouter vos deux fichiers contenant les migrations, par exemple, prendre le nom de create_something.rb
:
class CreateAbilities < ActiveRecord::Migration
def self.up
create_table :abilities do |t|
t.string :name
t.string :description
t.boolean :needs_extent
t.timestamps
end
end
def self.down
drop_table :abilities
end
end
Puis, lorsque votre bijou est ajouté à certaines app, vous pouvez le faire
rails g <your_gem_name>:install
et qui va ajouter les migrations, et alors vous pouvez simplement faire rake db:migrate
.
Espérons que cette aide.