# rubygems require 'rubygems' #ralbum require 'gf_utilities/file_utilities' require 'ralbum/skin_engine' class Skin attr_reader :skin_dirname attr_reader :skin_name attr_reader :skin_description attr_reader :skin_author def initialize( skin_name, skin_dirname ) @metainfo = {} @engine = nil @skin_dirname = skin_dirname @skin_name = skin_name @skin_author = "please enter skin author name" @skin_description = "no description" load_info end def load_info info_filename = File.join( @skin_dirname, "info.yml" ) unless File.exist?( info_filename ) ralbum_verbose(1, "information file for skin '#{@skin_name}' doesn't exist") return end info = YAML::load( File.read(info_filename) ) if not info.kind_of?(Hash) ralbum_verbose(1, "description skin file '#{info_filename}' is incorrect") else @metainfo = info @skin_author = info["author"] @skin_description = info["description"] end end def create( album_tree ) engine.create( album_tree ) end def compile engine.compile end def engine return @engine if @engine engine_rb = File.join( @skin_dirname, @skin_name + "_skin_engine.rb" ) if File.exist?( engine_rb ) require engine_rb engine_class_name = @skin_name.capitalize + "SkinEngine" clss = Class.const_get( engine_class_name.to_sym ) @engine = clss.new( self ) return @engine end engine = @metainfo['engine'] unless engine msg = "warning no engine defined for skin '#{skin_name}': I will be use ErbSkinEngine" ralbum_verbose(0, msg) engine = 'erb' end case engine when 'erb' then require 'ralbum/skin_engines/erb_skin_engine' @engine = ErbSkinEngine.new( self ) when 'kwartz' then require 'ralbum/skin_engines/kwartz_skin_engine' @engine = KwartzSkinEngine.new( self ) else raise RAlbumException.new, "skin engine #{engine} unknow" end end end