module Petrify

Constants

VERSION

Public Class Methods

create_path(path_items) click to toggle source
# File lib/petrify.rb, line 69
def self.create_path(path_items)
  dir = File.join(@@output_dir, path_items)
  FileUtils.mkdir_p(dir)
  @@log.debug dir
  dir
end
csv(path_items, filename, data) click to toggle source

Write a CSV file from an array of hashes (or an empty array)

# File lib/petrify.rb, line 33
def self.csv(path_items, filename, data)
  dir = create_path(path_items)
  fn = File.join(dir, filename + '.csv')
  
  if data.size > 0
    csv_string = CSV.generate do |csv|
      csv << data.first.keys # header row
      data.each { |row| csv << row.values }
    end
  else
    # There's no data so write an empty file (no header row either)
    csv_string = ''
  end
  
  File.write(fn, csv_string)
  @@log.info fn
end
file(path_items, filename, data) click to toggle source

Write an arbitrary file to output (eg a JSON file)

# File lib/petrify.rb, line 52
def self.file(path_items, filename, data)
  dir = create_path(path_items)
  fn = File.join(dir, filename)    
  File.write(fn, data)
  @@log.info fn
end
page(path_items, template, locals = {}) click to toggle source

Write an HTML page using a specified template and optional data

# File lib/petrify.rb, line 17
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(Object.new, locals) 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
setup() click to toggle source
# File lib/petrify.rb, line 59
def self.setup
  # Recursively delete working directory to ensure no redundant files are left behind from previous builds.
  # But preserve dot-files (especially .git directory)
  FileUtils.rm_r(Dir.glob(File.join(@@working_dir, '*')))
  Dir.mkdir(@@working_dir) unless File.directory?(@@working_dir)

  # Copy `public` dir to output dir
  FileUtils.copy_entry('public', @@working_dir)
end