# encoding: utf-8 usage 'create-site [options] path' aliases :create_site, :cs summary 'create a site' description " Create a new site at the given path. The site will use the `filesystem_unified` data source by default, but this can be changed using the `--datasource` commandline option. " required :d, :datasource, 'specify the data source for the new site' module Nanoc::CLI::Commands class CreateSite < ::Nanoc::CLI::CommandRunner class << self protected # Converts the given array to YAML format def array_to_yaml(array) '[ ' + array.map { |s| "'" + s + "'" }.join(', ') + ' ]' end end DEFAULT_CONFIG = <A Brand New nanoc Site

You’ve just created a new nanoc site. The page you are looking at right now is the home page for your site. To get started, consider replacing this default homepage with your own customized homepage. Some pointers on how to do so:

If you need any help with customizing your nanoc web site, be sure to check out the documentation (see sidebar), and be sure to subscribe to the discussion group (also see sidebar). Enjoy!

EOS DEFAULT_STYLESHEET = < A Brand New nanoc Site - <%= @item[:title] %>
<%= yield %>
EOS def run # Check arguments if arguments.length != 1 raise Nanoc::Errors::GenericTrivial, "usage: #{command.usage}" end # Extract arguments and options path = arguments[0] data_source = options[:datasource] || 'filesystem_unified' # Check whether site exists if File.exist?(path) raise Nanoc::Errors::GenericTrivial, "A site at '#{path}' already exists." end # Check whether data source exists if Nanoc::DataSource.named(data_source).nil? raise Nanoc::Errors::GenericTrivial, "Unrecognised data source: #{data_source}" end # Setup notifications Nanoc::NotificationCenter.on(:file_created) do |file_path| Nanoc::CLI::Logger.instance.file(:high, :create, file_path) end # Build entire site FileUtils.mkdir_p(path) FileUtils.cd(File.join(path)) do site_create_minimal(data_source) site_setup site_populate end puts "Created a blank nanoc site at '#{path}'. Enjoy!" end protected # Creates a configuration file and a output directory for this site, as # well as a rakefile that loads the standard nanoc tasks. def site_create_minimal(_data_source) # Create output FileUtils.mkdir_p('output') # Create config File.open('nanoc.yaml', 'w') { |io| io.write(DEFAULT_CONFIG) } Nanoc::NotificationCenter.post(:file_created, 'nanoc.yaml') # Create rules File.open('Rules', 'w') do |io| io.write DEFAULT_RULES end Nanoc::NotificationCenter.post(:file_created, 'Rules') end # Sets up the site's data source, i.e. creates the bare essentials for # this data source to work. def site_setup # Get site site = Nanoc::Site.new('.') # Set up data sources site.data_sources.each do |data_source| data_source.loading { data_source.setup } end end # Populates the site with some initial data, such as a root item, a # default layout, and so on. def site_populate # Get site site = Nanoc::Site.new('.') data_source = site.data_sources[0] # Create home page data_source.create_item( DEFAULT_ITEM, { title: 'Home' }, '/' ) # Create stylesheet data_source.create_item( DEFAULT_STYLESHEET, {}, '/stylesheet/', extension: '.css' ) # Create layout data_source.create_layout( DEFAULT_LAYOUT, {}, '/default/' ) # Create code FileUtils.mkdir_p('lib') File.open('lib/default.rb', 'w') do |io| io.write "\# All files in the 'lib' directory will be loaded\n" io.write "\# before nanoc starts compiling.\n" end end end end runner Nanoc::CLI::Commands::CreateSite