class CloudCannonJekyll::OldDataReader

Reads data files and creates a collections-style hash representation Aims to replicate the data reading logic in Jekyll 2.5

Attributes

site[R]

Public Class Methods

new(site) click to toggle source
# File lib/cloudcannon-jekyll/readers/old-data-reader.rb, line 12
def initialize(site)
  @site = site
  @safe = site.safe
  @content = {}
end

Public Instance Methods

read(dir) click to toggle source
# File lib/cloudcannon-jekyll/readers/old-data-reader.rb, line 18
def read(dir)
  base = Jekyll.sanitized_path(@site.source, dir)
  read_data_to(base, @content)
  @content
end
read_data_file(path) click to toggle source
# File lib/cloudcannon-jekyll/readers/old-data-reader.rb, line 44
def read_data_file(path)
  {
    "path" => path,
  }
end
read_data_to(dir, data) click to toggle source
# File lib/cloudcannon-jekyll/readers/old-data-reader.rb, line 24
def read_data_to(dir, data)
  return unless File.directory?(dir) && (!@safe || !File.symlink?(dir))

  entries = Dir.chdir(dir) do
    Dir["*.{yaml,yml,json,csv}"] + Dir["*"].select { |fn| File.directory?(fn) }
  end

  entries.each do |entry|
    path = Jekyll.sanitized_path(dir, entry)
    next if File.symlink?(path) && @safe

    key = sanitize_filename(File.basename(entry, ".*"))
    if File.directory?(path)
      read_data_to(path, data[key] = {})
    else
      data[key] = read_data_file(path)
    end
  end
end
sanitize_filename(name) click to toggle source
# File lib/cloudcannon-jekyll/readers/old-data-reader.rb, line 50
def sanitize_filename(name)
  name.gsub!(%r![^\w\s_-]+!, "")
  name.gsub!(%r!(^|\b\s)\s+($|\s?\b)!, '\\1\\2')
  name.gsub(%r!\s+!, "_")
end