Class: InstanceGenerator

Inherits:
Rails::Generator::Base
  • Object
show all
Defined in:
lib/generators/instance/instance_generator.rb

Constant Summary collapse

DEFAULT_SHEBANG =
File.join(Config::CONFIG['bindir'],
Config::CONFIG['ruby_install_name'])
DATABASES =
%w( mysql )
MYSQL_SOCKET_LOCATIONS =
[
  "/tmp/mysql.sock",                        # default
  "/var/run/mysqld/mysqld.sock",            # debian/gentoo
  "/var/tmp/mysql.sock",                    # freebsd
  "/var/lib/mysql/mysql.sock",              # fedora
  "/opt/local/lib/mysql/mysql.sock",        # fedora
  "/opt/local/var/run/mysqld/mysqld.sock",  # mac + darwinports + mysql
  "/opt/local/var/run/mysql4/mysqld.sock",  # mac + darwinports + mysql4
  "/opt/local/var/run/mysql5/mysqld.sock"   # mac + darwinports + mysql5
]

Instance Method Summary collapse

Constructor Details

#initialize(runtime_args, runtime_options = {}) ⇒ InstanceGenerator

Returns a new instance of InstanceGenerator.

[View source]

22
23
24
25
26
27
# File 'lib/generators/instance/instance_generator.rb', line 22

def initialize(runtime_args, runtime_options = {})
  super
  usage if args.empty?
  usage("Databases supported for preconfiguration are: #{DATABASES.join(", ")}") if (options[:db] && !DATABASES.include?(options[:db]))
  @destination_root = args.shift
end

Instance Method Details

#manifestObject

[View source]

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
81
82
83
84
85
86
87
88
# File 'lib/generators/instance/instance_generator.rb', line 29

def manifest
  # The absolute location of the BriskBills files
  root = File.expand_path BRISKBILLS_ROOT
  
  # Use /usr/bin/env if no special shebang was specified
  script_options     = { :chmod => 0755, :shebang => options[:shebang] == DEFAULT_SHEBANG ? nil : options[:shebang] }
  dispatcher_options = { :chmod => 0755, :shebang => options[:shebang] }
  
  record do |m|
    # Root directory
    m.directory ""
    
    # Standard files and directories
    base_dirs = %w(config config/environments db log script public vendor/plugins)
    text_files = %w(CHANGELOG COPYING COPYING.LESSER INSTALL README)
    environments = Dir["#{root}/config/environments/*.rb"]
    scripts = Dir["#{root}/script/**/*"].reject { |f| f =~ /(destroy|generate|plugin)$/ }
    public_files = ["public/.htaccess"] + Dir["#{root}/public/**/*"]
    
    files = base_dirs + text_files + environments + scripts + public_files
    files.map! { |f| f = $1 if f =~ %r{^#{root}/(.+)$}; f }
    files.sort!
    
    files.each do |file|
      case
      when File.directory?("#{root}/#{file}")
        m.directory file
      when file =~ %r{^script/}
        m.file brisk_bills_root(file), file, script_options
      when file =~ %r{^public/dispatch}
        m.file brisk_bills_root(file), file, dispatcher_options
      else
        m.file brisk_bills_root(file), file
      end
    end
    
    # script/generate
    m.file "instance_generate", "script/generate", script_options
    
    # database.yml and .htaccess
    m.template "databases/#{options[:db]}.yml", "config/database.yml", :assigns => {
      :app_name => File.basename(File.expand_path(@destination_root)),
      :socket   => options[:db] == "mysql" ? mysql_socket_location : nil
    }

    # Instance Rakefile
    m.file "instance_rakefile", "Rakefile"

    # Instance Configurations
    m.file "instance_routes.rb", "config/routes.rb"
    m.template "instance_environment.rb", "config/environment.rb", :assigns => {
      :brisk_bills_environment => File.join(File.dirname(__FILE__), 'templates', brisk_bills_root("config/environment.rb")),
      :app_name => File.basename(File.expand_path(@destination_root))
    }
    m.template "instance_boot.rb", "config/boot.rb"
    
    # Install Readme
    m.readme brisk_bills_root("INSTALL")
  end
end