aboutsummaryrefslogtreecommitdiffstats
path: root/lib/generators
diff options
context:
space:
mode:
authorPhilip Arndt <parndt@gmail.com>2010-09-03 23:32:07 +1200
committerPhilip Arndt <parndt@gmail.com>2010-09-03 23:32:07 +1200
commita2f655b55eb30a900020e8aff9601ed0606ce58f (patch)
treed57cf7aef6ae36a4751144587fab7fe2e508d491 /lib/generators
parentc4222bfdf5733d1552a2ecf4468d89cf89a583b1 (diff)
downloadrefinerycms-blog-a2f655b55eb30a900020e8aff9601ed0606ce58f.tar.gz
refinerycms-blog-a2f655b55eb30a900020e8aff9601ed0606ce58f.tar.bz2
refinerycms-blog-a2f655b55eb30a900020e8aff9601ed0606ce58f.zip
Hello rails3 support.
Diffstat (limited to 'lib/generators')
-rw-r--r--lib/generators/refinery_blog/templates/db/migrate/migration_number_create_singular_name.rb26
-rw-r--r--lib/generators/refinery_blog/templates/db/seeds/seed.rb16
-rw-r--r--lib/generators/refinery_blog_generator.rb79
3 files changed, 121 insertions, 0 deletions
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