aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib/generator/base.rb
blob: 8751cb08fbf8c9c40a321599249fd4ea3630ecaf (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
# Load ActiveSupport mini
activesupport_path = "#{File.dirname(__FILE__)}/../../../activesupport/lib"
$:.unshift(activesupport_path) if File.directory?(activesupport_path)
require 'active_support/all'

# TODO Use vendored Thor
require 'rubygems'
gem 'josevalim-thor'
require 'thor'

require File.dirname(__FILE__) + '/../rails/version' unless defined?(Rails::VERSION)
require File.dirname(__FILE__) + '/actions'

module Rails
  module Generators
    class Error < Thor::Error
    end

    class Base < Thor::Group
      include Rails::Generators::Actions
      include Thor::Actions

      # Automatically sets the source root based on the class name.
      #
      def self.source_root
        @source_root ||= begin
          klass_name = self.name.gsub(/^Rails::Generators::/, '')
          File.expand_path(File.join(File.dirname(__FILE__), 'generators', klass_name.underscore, 'templates'))
        end
      end

    protected

      # Use Rails default banner.
      #
      def self.banner
        "#{$0} #{self.arguments.map(&:usage).join(' ')} [options]"
      end

      # Small macro to ruby as an option to the generator with proper default
      # value plus an instance helper method.
      #
      def self.add_shebang_option!
        require 'rbconfig'
        default = File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name'])

        class_option :ruby, :type => :string, :aliases => "-r", :default => default,
                            :desc => "Path to the Ruby binary of your choice"

        class_eval do
          protected
          def shebang
            "#!#{options[:ruby] || "/usr/bin/env ruby"}"
          end
        end
      end

    end
  end
end