aboutsummaryrefslogtreecommitdiffstats
path: root/lib/generators/refinerycms_blog_generator.rb
blob: ba21e9f3afbde952b3cdc7920a7fecb3022b19f2 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
require 'rails/generators/migration'

class RefinerycmsBlogGenerator < Rails::Generators::NamedBase
  include Rails::Generators::Migration

  source_root File.expand_path('../refinerycms_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'),
         Rails::Generators::GeneratedAttribute.new('published_at', 'datetime')
       ], :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