require 'active_support' require 'fileutils' require 'bivouac/template' class Backpack include Bivouac::Template def initialize( o, n ) @plugin_options = o @plugin_name = n @plugin_path = n.underscore.gsub( /[^a-zA-Z0-9]/, "_" ) @plugin_module_name = @plugin_path.classify end def run( ) makeGeneralStructure( ) makeGenerators( ) makeHelpersLib( ) end private def makeGeneralStructure # Create Plugin Directory createDir( @plugin_path ) createDir( "#{@plugin_path}/copy_on_install" ) createDir( "#{@plugin_path}/copy_on_install/public" ) createDir( "#{@plugin_path}/copy_on_install/public/images" ) createDir( "#{@plugin_path}/copy_on_install/public/javascripts" ) createDir( "#{@plugin_path}/copy_on_install/public/stylesheets" ) createDir( "#{@plugin_path}/tasks" ) # Create README file createFile( "#{@plugin_path}/README" ) { |io| io.puts template( "README", binding, File.dirname(__FILE__) ) } # Create INSTALL file createFile( "#{@plugin_path}/INSTALL" ) { |io| io.puts template( "INSTALL", binding, File.dirname(__FILE__) ) } # Create README file createFile( "#{@plugin_path}/LICENCE" ) { |io| io.puts template( "LICENCE", binding, File.dirname(__FILE__) ) } # Create rake tasks file createFile( "#{@plugin_path}/tasks/#{@plugin_path}.rake" ) { |io| io.puts template( "tasks/tasks", binding, File.dirname(__FILE__) ) } end def makeGenerators return unless @plugin_options.has_key?( :generators ) createDir( "#{@plugin_path}/generators" ) @plugin_generators_list = @plugin_options[:generators].map{|h| ":"+h[0]}.join( ", " ) createFile( "#{@plugin_path}/generators/#{@plugin_path}.rb" ) { |io| io.puts template( "generators/plugin_begin", binding, File.dirname(__FILE__) ) @plugin_options[:generators].each do |g| @generator_name, @generator_type = g io.puts template( "generators/plugin_generator", binding, File.dirname(__FILE__) ) end io.puts template( "generators/plugin_end", binding, File.dirname(__FILE__) ) } createDir( "#{@plugin_path}/generators/template" ) @plugin_options[:generators].each do |g| @generator_name, @generator_type = g @generator_type_class = @generator_type.classify.pluralize createFile( "#{@plugin_path}/generators/template/#{@generator_name}_#{@generator_type}.rb" ) { |io| io.puts template( "generators/template/template_#{@generator_type}", binding, File.dirname(__FILE__) ) } end end def makeHelpersLib unless @plugin_options.has_key?( :noch ) and @plugin_options.has_key?( :novh ) createDir( "#{@plugin_path}/lib" ) createDir( "#{@plugin_path}/lib/#{@plugin_path}" ) createFile( "#{@plugin_path}/init.rb" ) { |io| io.puts template( "init", binding, File.dirname(__FILE__) ) io.puts template( "init_view", binding, File.dirname(__FILE__) ) unless @plugin_options.has_key?( :novh ) io.puts template( "init_controller", binding, File.dirname(__FILE__) ) unless @plugin_options.has_key?( :noch ) } unless @plugin_options.has_key?( :novh ) createFile( "#{@plugin_path}/lib/#{@plugin_path}/view_helpers.rb" ) { |io| io.puts template( "lib/plugin/view_helpers", binding, File.dirname(__FILE__) ) } end unless @plugin_options.has_key?( :noch ) createFile( "#{@plugin_path}/lib/#{@plugin_path}/controller_helpers.rb" ) { |io| io.puts template( "lib/plugin/controller_helpers", binding, File.dirname(__FILE__) ) } end end end end