lib/bin/toadstool in toadstool-0.0.0.1 vs lib/bin/toadstool in toadstool-0.0.0.3

- old
+ new

@@ -4,65 +4,109 @@ require "rubygems" require "thor" require "thor/group" require 'pathname' -APP_PATH = File.expand_path('../../..', __FILE__) +APP_PATH = File.expand_path(File.join(__FILE__, '../../templates')) module Toadstool class Install < Thor::Group include Thor::Actions # Define arguments and options - argument :name - + argument :name, {:default => './'} + def self.source_root APP_PATH end def install_app - directory "doc-src", "#{name}/doc-src" - directory "public", "#{name}/public" - directory "sass", "#{name}/sass" - directory "views", "#{name}/views" - - copy_file "config.rb", "#{name}/config.rb" - copy_file "config.ru", "#{name}/config.ru" - copy_file "Gemfile", "#{name}/Gemfile" - copy_file "Rakefile", "#{name}/Rakefile" - copy_file "readme.md", "#{name}/readme.md" - copy_file "toadstool.rb", "#{name}/toadstool.rb" + # Per https://github.com/wycats/thor/pull/175#issuecomment-2250270 + # If any empty directory is found, it's copied and all .empty_directory files are ignored. + # If any file name is wrapped within % signs, the text within the % signs will be executed + # as a method and replaced with the returned value. + + directory "project/doc-src", "#{name}/doc-src" + directory "project/public", "#{name}/public" + directory "project/sass", "#{name}/sass" + directory "project/views", "#{name}/views" + + copy_file "project/config.rb", "#{name}/config.rb" + copy_file "project/config.ru", "#{name}/config.ru" + copy_file "project/Gemfile", "#{name}/Gemfile" + copy_file "project/Rakefile", "#{name}/Rakefile" + copy_file "project/readme.md", "#{name}/readme.md" + copy_file "project/toadstool.rb", "#{name}/toadstool.rb" end end + + class Server < Thor::Group + def exec_script_rails! + cwd = Dir.pwd + return unless in_rails_application? || in_rails_application_subdirectory? + exec 'rackup', *ARGV if in_rails_application? + Dir.chdir("..") do + # Recurse in a chdir block: if the search fails we want to be sure + # the application is generated in the original working directory. + exec_script_rails! unless cwd == Dir.pwd + end + rescue SystemCallError + # could not chdir, no problem just return + end + end - class Server < Thor::Group - def exec_script_rails! - cwd = Dir.pwd - return unless in_rails_application? || in_rails_application_subdirectory? - exec 'rackup', *ARGV if in_rails_application? - Dir.chdir("..") do - # Recurse in a chdir block: if the search fails we want to be sure - # the application is generated in the original working directory. - exec_script_rails! unless cwd == Dir.pwd - end - rescue SystemCallError - # could not chdir, no problem just return - end - - no_tasks do + # no_tasks do def in_rails_application? File.exists?('config.ru') end - - + + def in_rails_application_subdirectory?(path = Pathname.new(Dir.pwd)) File.exists?(File.join(path, 'config.ru')) || !path.root? && in_rails_application_subdirectory?(path.parent) end - end - end + # end + +# end +# +# +# module Toadstool + class Generator < Thor + include Thor::Actions + argument :name + argument :state + + desc 'ts_module', "Generate a module" + def ts_module + create_file "views/modules/#{name}/_#{state}.erb" + create_file "views/modules/#{name}/readme.md" + create_file "sass/modules/#{name}/#{state}/_#{state}.sass", "@import 'mixins'\n@import 'extends'" + create_file "sass/modules/#{name}/#{state}/_extends.sass" + create_file "sass/modules/#{name}/#{state}/_mixins.scss" + + create_file 'sass/_modules.sass' if !File.exist?('sass/_modules.sass') + + append_file 'sass/_modules.sass', "@import 'modules/#{name}/#{state}/#{state}'" + end + + desc 'ts_pattern', "Generate a module" + def ts_pattern + create_file "views/ui_patterns/#{name}/_#{state}.erb" + create_file "views/ui_patterns/#{name}/readme.md" + create_file "sass/ui_patterns/#{name}/#{state}/_#{state}.sass", "@import 'mixins'\n@import 'extends'" + create_file "sass/ui_patterns/#{name}/#{state}/_extends.sass" + create_file "sass/ui_patterns/#{name}/#{state}/_mixins.scss" + + create_file 'sass/_ui_patterns.sass' if !File.exist?('sass/_ui_patterns.sass') + + append_file 'sass/_ui_patterns.sass', "@import 'ui_patterns/#{name}/#{state}/#{state}'" + end + end end + + + ARGV << '--help' if ARGV.empty? aliases = { "i" => "install", "new" => "install", @@ -87,9 +131,12 @@ case command when 'install' Toadstool::Install.start when 'server' Toadstool::Server.start + +when 'generate' + Toadstool::Generator.start else puts "Error: Command '#{command}' not recognized" if %x{rake #{command} --dry-run 2>&1 } && $?.success? puts "Did you mean: `$ rake #{command}` ?\n\n" end \ No newline at end of file