module Veewee class Templates attr_accessor :env def initialize(env) @env=env return self end def [](name) result=nil valid_paths(env.template_path).each do |template_dir| template=Veewee::Template.new(name,File.join(template_dir,name),@env) if template.exists? result=template return result end end return nil end # Fetch all Templates def each(&block) templates=Hash.new valid_paths(env.template_path).each do |template_dir| env.logger.debug("[Template] Searching #{template_dir} for templates") subdirs=Dir.glob("#{template_dir}/*") subdirs.each do |sub| if File.directory?("#{sub}") name=sub.sub(/#{template_dir}\//,'') template=Veewee::Template.new(name,sub,@env) if template.exists? env.logger.debug("[Template] template '#{name}' found") templates[name]=template end end end end if templates.length==0 env.logger.debug("[Template] no templates found") end Hash[templates.sort].each(&block) end private # Traverses path to see which exist or not # and checks if available def valid_paths(paths) valid_paths=paths.collect { |path| if File.exists?(path) && File.directory?(path) env.logger.info "Path #{path} exists" File.expand_path(path) else env.logger.info "Path #{path} does not exist, skipping" nil end } return valid_paths.compact end end end