]> source.dussan.org Git - redmine.git/commitdiff
Fixed that plugin model generator does not generate the migration (#11024).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 26 May 2012 08:50:32 +0000 (08:50 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 26 May 2012 08:50:32 +0000 (08:50 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9718 e93f8b46-1217-0410-a6f0-8f06a7374b81

lib/generators/redmine_plugin_model/redmine_plugin_model_generator.rb
lib/generators/redmine_plugin_model/templates/migration.rb [new file with mode: 0644]

index 01ce31b1d1da1f07d8c74cc5c9b934f40cc2d935..2e5f03108042cb34fc0b7cc4e4deb946dc23a6e1 100644 (file)
@@ -1,6 +1,12 @@
 class RedminePluginModelGenerator < Rails::Generators::NamedBase
+  
   source_root File.expand_path("../templates", __FILE__)
   argument :model, :type => :string
+  argument :attributes, :type => :array, :default => [], :banner => "field[:type][:index] field[:type][:index]"
+  class_option :migration,  :type => :boolean
+  class_option :timestamps, :type => :boolean
+  class_option :parent,     :type => :string, :desc => "The parent class for the generated model"
+  class_option :indexes,    :type => :boolean, :default => true, :desc => "Add indexes for references and belongs_to columns"
 
   attr_reader :plugin_path, :plugin_name, :plugin_pretty_name
 
@@ -10,10 +16,26 @@ class RedminePluginModelGenerator < Rails::Generators::NamedBase
     @plugin_pretty_name = plugin_name.titleize
     @plugin_path = "plugins/#{plugin_name}"
     @model_class = model.camelize
+    @table_name = @model_class.tableize
+    @migration_filename = "create_#{@table_name}"
+    @migration_class_name = @migration_filename.camelize
   end
 
   def copy_templates
-    template 'model.rb.erb', "#{plugin_path}/app/models/#{model}.rb"
-    template 'unit_test.rb.erb', "#{plugin_path}/test/unit/#{model}_test.rb"
+    template 'model.rb.erb', "#{plugin_path}/app/models/#{model.underscore}.rb"
+    template 'unit_test.rb.erb', "#{plugin_path}/test/unit/#{model.underscore}_test.rb"
+    
+    migration_filename = "%03i_#{@migration_filename}.rb" % (migration_number + 1)
+    template "migration.rb", "#{plugin_path}/db/migrate/#{migration_filename}"
+  end
+
+  def attributes_with_index
+    attributes.select { |a| a.has_index? || (a.reference? && options[:indexes]) }
+  end
+
+  def migration_number
+    current = Dir.glob("#{plugin_path}/db/migrate/*.rb").map do |file|
+      File.basename(file).split("_").first.to_i
+    end.max.to_i
   end
 end
diff --git a/lib/generators/redmine_plugin_model/templates/migration.rb b/lib/generators/redmine_plugin_model/templates/migration.rb
new file mode 100644 (file)
index 0000000..f5026ae
--- /dev/null
@@ -0,0 +1,15 @@
+class <%= @migration_class_name %> < ActiveRecord::Migration
+  def change
+    create_table :<%= @table_name %> do |t|
+<% attributes.each do |attribute| -%>
+      t.<%= attribute.type %> :<%= attribute.name %><%= attribute.inject_options %>
+<% end -%>
+<% if options[:timestamps] %>
+      t.timestamps
+<% end -%>
+    end
+<% attributes_with_index.each do |attribute| -%>
+    add_index :<%= table_name %>, :<%= attribute.index_name %><%= attribute.inject_index_options %>
+<% end -%>
+  end
+end