# -*- encoding: utf-8 -*-
# -*- ruby -*-
#
#--
# webgentask.rb:
#
# Define a task library for running webgen
#
# Copyright (C) 2007 Jeremy Hinegardner
#
# Tasks restructuration by Massimiliano Filacchioni
# Modifications for 0.5.0 by Thomas Leitner
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or (at
# your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
# USA
#
#++
#
require 'rake'
require 'rake/tasklib'
module Webgen
##
# Task library to manage a webgen website.
#
# It is assumed that you have already used the 'webgen' command to create the website directory
# for the site.
#
# == Basics
#
# require 'webgen/webgentask'
#
# Webgen::WebgenTask.new
#
# == Attributes
#
# The attributes available in the new block are:
#
# [directory]
# the root directory of the webgen site (default Dir.pwd)
# [config]
# the config block for setting additional configuration options
# [clobber_outdir]
# remove webgens output directory on clobber (default +false+)
#
# == Tasks Provided
#
# The tasks provided are :
#
# [webgen]
# render the webgen website
# [clobber_webgen]
# remove all the files created during generation
#
# == Integrate webgen in other project
#
# To integrate webgen tasks in another project you can use rake namespaces. For example assuming
# webgen's site directory is +webgen+ under the main project directory use the following code
# fragment in project Rakefile:
#
# require 'webgen/webgentask'
#
# namespace :dev do
# Webgen::WebgenTask.new do |site|
# site.directory = File.join(Dir.pwd, "webgen")
# site.clobber_outdir = true
# site.config_block = lambda |config|
# config['website.lang'] = 'de'
# end
# end
# end
#
# task :clobber => ['dev:clobber_webgen']
#
# This will create the following tasks:
#
# * dev:webgen
# * dev:clobber_webgen
#
# and add dev:clobber_webgen to the main clobber task.
#
class WebgenTask < ::Rake::TaskLib
# The directory of the webgen website. This would be the directory of your config.yaml
# file. Or the parent directory of the src/ directory for webgen.
#
# The default for this is assumed to be Dir.pwd
attr_accessor :directory
# The configuration block that is invoked when the Webgen::Website object is initialized. This
# can be used to set configuration parameters and to avoid having a config.yaml file
# lying around.
attr_accessor :config_block
# During the clobber, should webgen's output directory be clobbered. The default is false.
attr_accessor :clobber_outdir
# Create webgen tasks. You can override the task name with the parameter +name+.
def initialize(name = 'webgen')
@name = name
@directory = Dir.pwd
@clobber_outdir = false
@config_block = nil
yield self if block_given?
define
end
#######
private
#######
def define # :nodoc:
desc "Render the webgen website"
task @name, :verbosity, :log_level do |t, args|
require 'webgen/website'
website = Webgen::Website.new(@directory, Webgen::Logger.new($stdout), &@config_block)
website.logger.verbosity = args[:verbosity].to_s.intern unless args[:verbosity].to_s.empty?
website.logger.level = args[:log_level].to_i if args[:log_level]
website.render
end
task :clobber => paste('clobber_', @name)
desc "Remove webgen products"
task paste('clobber_', @name) do
require 'webgen/website'
website = Webgen::Website.new(@directory, Webgen::Logger.new($stdout), &@config_block)
website.clean(@clobber_outdir)
end
end
end
end