padrino-gen/lib/padrino-gen/generators/component.rb
module Padrino
module Generators
##
# Responsible for add components within a Padrino project.
#
class Component < Thor::Group
Padrino::Generators.add_generator(:component, self)
def self.source_root; File.expand_path(File.dirname(__FILE__)); end
def self.banner; "padrino-gen component [options]"; end
include Thor::Actions
include Padrino::Generators::Actions
include Padrino::Generators::Components::Actions
desc "Description:\n\n\tpadrino-gen component add components into a Padrino project"
class_option :app, :desc => 'The application name', :aliases => '-n', :default => nil, :type => :string
class_option :root, :desc => 'The root destination', :aliases => '-r', :default => '.', :type => :string
class_option :adapter, :desc => 'SQL adapter for ORM (sqlite, mysql, mysql2, mysql-gem, postgres)', :aliases => '-a', :default => 'sqlite', :type => :string
defines_component_options :default => false
##
# For each component, retrieve a valid choice and then execute the associated generator.
#
def setup_components
self.destination_root = options[:root]
if in_app_root?
@_components = options.class.new options.select{ |key,_| self.class.component_types.include?(key.to_sym) }
@app_name = (options[:app] || "App").gsub(/\W/, '_').camelize
if @_components.values.delete_if(&:empty?).empty?
self.class.start(["-h"])
say
say "Current Selected Components:"
list = []
self.class.component_types.each do |comp|
list << [comp, fetch_component_choice(comp)]
end
print_table(list, :indent => 2)
exit
end
self.class.component_types.each do |comp|
next if @_components[comp].empty?
choice = @_components[comp] = resolve_valid_choice(comp)
existing = fetch_component_choice(comp)
if existing != 'none' && existing != choice
next unless yes?("Switch #{comp} to '#{choice}' from '#{existing}' ?[yes/no]:")
end
@project_name = fetch_component_choice(:namespace)
if comp.to_s == 'test' && !already_exists?(@app_name, @project_name)
say "#{@project_name}::#{@app_name} does not exist."
say "Please, change app name."
next
end
execute_component_setup(comp, choice)
store_component_choice(comp, choice)
if comp.to_s == 'orm' && choice.to_s != 'none'
inject_into_file destination_root('Rakefile'), "PadrinoTasks.use(:database)\n", :before => "PadrinoTasks.init"
inject_into_file destination_root('Rakefile'), "PadrinoTasks.use(#{choice.to_sym.inspect})\n", :before => "PadrinoTasks.init"
end
end
else
say 'You are not at the root of a Padrino application! (config/boot.rb not found)'
end
end
end
end
end