From a2f655b55eb30a900020e8aff9601ed0606ce58f Mon Sep 17 00:00:00 2001 From: Philip Arndt Date: Fri, 3 Sep 2010 23:32:07 +1200 Subject: Hello rails3 support. --- .../migration_number_create_singular_name.rb | 26 +++++++ .../refinery_blog/templates/db/seeds/seed.rb | 16 +++++ lib/generators/refinery_blog_generator.rb | 79 ++++++++++++++++++++++ 3 files changed, 121 insertions(+) create mode 100644 lib/generators/refinery_blog/templates/db/migrate/migration_number_create_singular_name.rb create mode 100644 lib/generators/refinery_blog/templates/db/seeds/seed.rb create mode 100644 lib/generators/refinery_blog_generator.rb (limited to 'lib/generators') diff --git a/lib/generators/refinery_blog/templates/db/migrate/migration_number_create_singular_name.rb b/lib/generators/refinery_blog/templates/db/migrate/migration_number_create_singular_name.rb new file mode 100644 index 0000000..badb213 --- /dev/null +++ b/lib/generators/refinery_blog/templates/db/migrate/migration_number_create_singular_name.rb @@ -0,0 +1,26 @@ +class Create<%= singular_name.camelize %> < ActiveRecord::Migration + + def self.up<% @refinerycms_blog_tables.each do |table| %> + create_table :<%= table[:table_name] %>, :id => <%= table[:id].to_s %> do |t| +<% table[:attributes].each do |attribute| -%> + t.<%= attribute.type %> :<%= attribute.name %> +<% end -%> + <%= 't.timestamps' if table[:id] %> + end + + <%= "add_index :#{table[:table_name]}, :id" if table[:id] %> +<% end -%> + load(Rails.root.join('db', 'seeds', 'refinerycms_blog.rb').to_s) + end + + def self.down + UserPlugin.destroy_all({:name => "refinerycms_blog"}) + + Page.delete_all({:link_url => "/blog"}) + +<% @refinerycms_blog_tables.each do |table| -%> + drop_table :<%= table[:table_name] %> +<% end -%> + end + +end diff --git a/lib/generators/refinery_blog/templates/db/seeds/seed.rb b/lib/generators/refinery_blog/templates/db/seeds/seed.rb new file mode 100644 index 0000000..72648d3 --- /dev/null +++ b/lib/generators/refinery_blog/templates/db/seeds/seed.rb @@ -0,0 +1,16 @@ +User.find(:all).each do |user| + user.plugins.create(:name => "<%= singular_name %>", + :position => (user.plugins.maximum(:position) || -1) +1) +end + +page = Page.create( + :title => "Blog", + :link_url => "/blog", + :deletable => false, + :position => ((Page.maximum(:position, :conditions => {:parent_id => nil}) || -1)+1), + :menu_match => "^/blogs?(\/|\/.+?|)$" +) + +Page.default_parts.each do |default_page_part| + page.parts.create(:title => default_page_part, :body => nil) +end diff --git a/lib/generators/refinery_blog_generator.rb b/lib/generators/refinery_blog_generator.rb new file mode 100644 index 0000000..db2e2ef --- /dev/null +++ b/lib/generators/refinery_blog_generator.rb @@ -0,0 +1,79 @@ +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 \ No newline at end of file -- cgit v1.2.3