require 'find' class HoboRapidGenerator < Hobo::Generator default_options :import_tags => false def manifest if options[:command] == :create import_tags if options[:import_tags] end record do |m| m.file "hobo-rapid.js", "public/javascripts/hobo-rapid.js" m.file "lowpro.js", "public/javascripts/lowpro.js" m.file "IE7.js", "public/javascripts/IE7.js" m.file "ie7-recalc.js", "public/javascripts/ie7-recalc.js" m.file "blank.gif", "public/javascripts/blank.gif" m.file "reset.css", "public/stylesheets/reset.css" m.file "hobo-rapid.css", "public/stylesheets/hobo-rapid.css" create_all(m, "themes/clean/public", "public/hobothemes/clean") create_all(m, "themes/clean/views", "app/views/taglibs/themes/clean") if with_admin_site? options = ["admin"] options.unshift "--make-front-site" unless File.exist?('app/views/taglibs/front_site.dryml') options.unshift "--invite-only" if invite_only? m.dependency 'hobo_admin_site', options end end end def import_tags path = File.join(RAILS_ROOT, "app/views/taglibs/application.dryml") tag = %(<include src="rapid" plugin="hobo"/> <include src="taglibs/auto/rapid/cards"/> <include src="taglibs/auto/rapid/pages"/> <include src="taglibs/auto/rapid/forms"/> <set-theme name="clean"/> ) if with_admin_site? tag += %( <extend tag="page"> <old-page merge> <footer:> <a href="&admin_users_url" if="¤t_user.administrator?">Admin</a> </footer:> </old-page> </extend> ) end src = File.read(path) return if src.include?(tag) # first try putting it before the first tag done = src.sub!(/<(?!!)/, tag + "\n<") # otherwise append it src << tag unless done File.open(path, 'w') {|f| f.write(src) } end def with_admin_site? options[:admin] end def invite_only? options[:admin] == :invite_only end protected def banner "Usage: #{$0} #{spec.name} [--import-tags] [--admin | --invite-only]" end def add_options!(opt) opt.separator '' opt.separator 'Options:' opt.on("--import-tags", "Modify taglibs/application.dryml to import hobo-rapid and theme tags ") do |v| options[:import_tags] = true end opt.on("--admin", "Generate an admin subsite") { |v| options[:admin] = true } opt.on("--invite-only", "Generate an admin subsite with features for an invite only app") { |v| options[:admin] = :invite_only } end end