|
- require 'haml'
- require 'csv'
- require 'logger'
-
- class Petrify
- @@output_dir = '_site'
- @@working_dir = File.join(Dir.pwd, @@output_dir)
- @@views_dir = 'views'
- @@layout_fn = File.join(@@views_dir, 'layout.haml')
-
- # https://stackoverflow.com/questions/917566/ruby-share-logger-instance-among-module-classes#6768164
- @@log = Logger.new($stdout)
- @@log.level = Logger::INFO
-
- def self.page(path_items, template, locals = {})
- dir = create_path(path_items)
- fn = File.join(dir, 'index.html')
-
- # https://stackoverflow.com/questions/6125265/using-layouts-in-haml-files-independently-of-rails
- html = Haml::Engine.new(File.read(@@layout_fn)).render do
- Haml::Engine.new(File.read(File.join(@@views_dir, "#{template}.haml"))).render(Object.new, locals)
- end
-
- File.write(fn, html)
- @@log.info fn
- # TODO - add page to sitemap.xml or sitemap.txt
- # https://support.google.com/webmasters/answer/183668?hl=en&ref_topic=4581190
- end
-
- def self.csv(path_items, filename, data)
- dir = create_path(path_items)
- fn = File.join(dir, filename + '.csv')
-
- csv_string = CSV.generate do |csv|
- csv << data.first.keys # header row
- data.each { |row| csv << row.values }
- end
-
- File.write(fn, csv_string)
- @@log.info fn
- end
-
- def self.setup
- # Recursively delete working directory to ensure no redundant files are left behind from previous builds.
- # FileUtils.rm_rf(@working_dir)
- Dir.mkdir(@@working_dir) unless File.directory?(@@working_dir)
- # Dir.chdir(@working_dir)
-
- # Copy `public` dir to output dir
- FileUtils.copy_entry('public', @@working_dir)
- end
-
- def self.create_path(path_items)
- dir = File.join(@@output_dir, path_items)
- FileUtils.mkdir_p(dir)
- @@log.debug dir
- dir
- end
- end
|