require 'rails/generators/migration'
class RefineryBlogGenerator < Rails::Generators::NamedBase
include Rails::Generators::Migration
source_root File.expand_path('../refinery_blog/templates/', __FILE__)
argument :name, :type => :string, :default => 'blog_structure', :banner => ''
def generate
# seed file
template 'db/seeds/seed.rb', Rails.root.join('db/seeds/refinerycms_blog.rb')
# migration file
@refinerycms_blog_tables = [{
:table_name => 'blog_posts',
:attributes => [
Rails::Generators::GeneratedAttribute.new('title', 'string'),
Rails::Generators::GeneratedAttribute.new('body', 'text'),
Rails::Generators::GeneratedAttribute.new('draft', 'boolean')
], :id => true
},{
:table_name => 'blog_comments',
:attributes => [
Rails::Generators::GeneratedAttribute.new('blog_post_id', 'integer'),
Rails::Generators::GeneratedAttribute.new('spam', 'boolean'),
Rails::Generators::GeneratedAttribute.new('name', 'string'),
Rails::Generators::GeneratedAttribute.new('email', 'string'),
Rails::Generators::GeneratedAttribute.new('body', 'text'),
Rails::Generators::GeneratedAttribute.new('state', 'string'),
], :id => true
},{
:table_name => 'blog_categories',
:attributes => [
Rails::Generators::GeneratedAttribute.new('title', 'string')
], :id => true
},{
:table_name => 'blog_categories_blog_posts',
:attributes => [
Rails::Generators::GeneratedAttribute.new('blog_category_id', 'integer'),
Rails::Generators::GeneratedAttribute.new('blog_post_id', 'integer')
], :id => false
}]
next_migration_number = ActiveRecord::Generators::Base.next_migration_number(File.dirname(__FILE__))
template('db/migrate/migration_number_create_singular_name.rb',
Rails.root.join("db/migrate/#{next_migration_number}_create_#{singular_name}.rb"))
puts "------------------------"
puts "Now run:"
puts "rake db:migrate"
puts "------------------------"
end
end
# Below is a hack until this issue:
# https://rails.lighthouseapp.com/projects/8994/tickets/3820-make-railsgeneratorsmigrationnext_migration_number-method-a-class-method-so-it-possible-to-use-it-in-custom-generators
# is fixed on the Rails project.
require 'rails/generators/named_base'
require 'rails/generators/migration'
require 'rails/generators/active_model'
require 'active_record'
module ActiveRecord
module Generators
class Base < Rails::Generators::NamedBase #:nodoc:
include Rails::Generators::Migration
# Implement the required interface for Rails::Generators::Migration.
def self.next_migration_number(dirname) #:nodoc:
next_migration_number = current_migration_number(dirname) + 1
if ActiveRecord::Base.timestamped_migrations
[Time.now.utc.strftime("%Y%m%d%H%M%S"), "%.14d" % next_migration_number].max
else
"%.3d" % next_migration_number
end
end
end
end
end