require 'thor' class Noumenon::Cli < Thor include Thor::Actions source_root File.expand_path("../../../generators", __FILE__) desc "site PATH", "Generate a new site at PATH" def site(path) generate :site, path invoke :theme, [ File.join(path, "theme") ] invoke :repository, [ File.join(path, "content") ] end desc "theme PATH", "Generate a new theme at PATH" def theme(path) generate :theme, path end desc "repository PATH", "Generate a new content repository at PATH" def repository(path) generate :repository, path end desc "application NAME", "Generate a new application at NAME" def application(name) @name = name say_status :application, name empty_directory name inside name do [ "lib", "lib/noumenon", "lib/noumenon", "lib/noumenon/#{name}", "templates", "assets", "features", "features/support", "features/step_definitions" ].each do |dir| empty_directory dir end create_file("Gemfile") { "gemspec" } end template "application/application.gemspec", "#{name}/noumenon-#{name}.gemspec" template "application/application.rb", "#{name}/lib/noumenon/#{name}/application.rb" template "application/version.rb", "#{name}/lib/noumenon/#{name}/version.rb" template "application/load.rb", "#{name}/lib/noumenon/#{name}.rb" invoke :application_features, name end desc "application_features NAME", "Generate Cucumber configuration for the application at NAME" def application_features(name) @name = name inside name do [ "features", "features/support", "features/step_definitions" ].each do |dir| empty_directory dir end end template "application/Rakefile", "#{name}/Rakefile" template "application/features/example.feature", "#{name}/features/example.feature" template "application/features/support/env.rb", "#{name}/features/support/env.rb" path = "#{name}/features/support" invoke :theme, [ File.join(path, "theme") ] invoke :repository, [ File.join(path, "content") ] end protected def generate(thing, path) say_status thing.to_sym, path directory thing.to_s, path end end