module Stack class Generator attr_accessor :layouts attr_accessor :pages def initialize # read layouts # read pages # write pages process! end def process! read_layouts read_pages end def read_layouts @layouts = read_pages_from_directory("_layouts", Stack::Templates::Layout) end def read_pages @pages = read_pages_from_directory(Stack::runner.configuration.source, Stack::Templates::Page) end def transform! puts @layouts puts @pages self.pages.each do |name, page| puts "Page -> #{name} #{page}" page.write! end end def to_hash { } end private def read_pages_from_directory(folder, transformable_klass) pages = { } begin path = (folder == Stack::runner.configuration.source) ? folder : File.join(Stack::runner.configuration.source, folder) entries = Dir.entries(path) files = entries.reject { |e| File.directory?(File.join(path, e)) } files = files.reject { |e| e[0..0]=~/\.|_/ or e[-1..-1]=="~" } files = files.select { |e| Stack::EXTENSIONS.include?(File.extname(e)) } files.each do |f| trans = transformable_klass.new(File.join(path, f), self) pages[f.split(".").first] = trans end rescue Errno::ENOENT => e # Ignore puts e.to_str end return pages end end end