lib/stack/generator.rb in stack-0.0.3 vs lib/stack/generator.rb in stack-0.0.4
- old
+ new
@@ -1,41 +1,79 @@
module Stack
class Generator
+ attr_accessor :parent
+ attr_accessor :source, :target
+
+ attr_accessor :children
attr_accessor :layouts
attr_accessor :pages
- def initialize
+ def initialize(source, target, parent = nil)
+ self.source = source
+ self.target = target
+ self.parent = parent
+
+ self.layouts = (parent) ? parent.layouts.dup : { }
+
+ self.children = [ ]
+
# read layouts
# read pages
# write pages
process!
end
def process!
read_layouts
read_pages
+
+ read_children
end
def read_layouts
- @layouts = read_pages_from_directory("_layouts", Stack::Templates::Layout)
+ if File.exists?(File.join(self.source, "_layouts"))
+ @layouts = @layouts.merge(read_pages_from_directory("_layouts", Stack::Templates::Layout))
+ end
end
def read_pages
- @pages = read_pages_from_directory(Stack::runner.configuration.source, Stack::Templates::Page)
+ @pages = read_pages_from_directory(self.source, Stack::Templates::Page)
end
+ def read_children
+ entries = Dir.entries(self.source)
+ directories = entries.select { |e| File.directory?(File.join(self.source, e)) }
+ directories = directories.reject { |d| d[0..0]=~/\.|_/ or d[-1..-1]=="~" }
+ directories.each do |dir|
+ self.children.push(Stack::Generator.new(File.join(self.source, dir), File.join(self.target, dir), self))
+ end
+ end
+
def transform!
- puts @layouts
- puts @pages
-
self.pages.each do |name, page|
- puts "Page -> #{name} #{page}"
page.write!
end
+
+ transform_assets
+
+ self.children.each { |c| c.transform! }
end
+ def transform_assets
+ files = Dir.entries(self.source)
+ files = files.reject { |e| File.directory?(File.join(self.source, e)) }
+ files = files.reject { |e| e[0..0]=~/\.|_/ or e[-1..-1]=="~" }
+ files = files.reject { |e| (%w(.yaml .yml)+Stack::EXTENSIONS).include?(File.extname(e)) } # Exception cases
+
+ FileUtils.mkdir_p(self.target)
+
+ files.each do |f|
+ FileUtils.cp(File.join(self.source, File.basename(f)), File.join(self.target, File.basename(f)))
+ end
+ end
+
def to_hash
{
}
end
@@ -43,19 +81,21 @@
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)
+ path = (folder == self.source) ? folder : File.join(self.source, folder)
+ folder = (folder == self.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
+ pages["#{f.split(".").first}"] = trans
end
rescue Errno::ENOENT => e
# Ignore
puts e.to_str
end
\ No newline at end of file