class CSVDataReader::Generator

Public Instance Methods

generate(site) click to toggle source
# File lib/read_cvs.rb, line 65
def generate(site)
  #dir = config['csv_data_source'] || '_csv'
  dir = "_csv"
  base = File.join(site.source, dir)
  return unless File.directory?(base) && (!site.safe || !File.symlink?(base))

  entries = Dir.chdir(base) { Dir['*.csv'] }
  entries.delete_if { |e| File.directory?(File.join(base, e)) }

  entries.each do |entry|
    path = File.join(site.source, dir, entry)
    next if File.symlink?(path) && site.safe

    key = sanitize_filename(File.basename(entry, '.*'))
    file_data = CSV.read(path, :headers => true)

    data = Hash.new        
    data['content'] = file_data.to_a[1..-1]
    data['content_hash'] = file_data.map(&:to_hash)
    data['keys'] = file_data.headers
    data['rows'] = data['content'].size
    data['cols'] = file_data.headers.size

    csv_data = Hash.new
    csv_data[key] = data
   
    site.data.merge!(csv_data){ |shared_key| raise "csv and data named \"#{shared_key}\"" }
  end
end

Private Instance Methods

sanitize_filename(name) click to toggle source

copied from Jekyll

# File lib/read_cvs.rb, line 98
def sanitize_filename(name)
  name = name.gsub(/[^\w\s_-]+/, '')
  name = name.gsub(/(^|\b\s)\s+($|\s?\b)/, '\\1\\2')
  name = name.gsub(/\s+/, '_')
end