77 lines
2.3 KiB
Ruby
77 lines
2.3 KiB
Ruby
# encoding: UTF-8
|
|
require 'csv'
|
|
|
|
module Jekyll
|
|
class Reader
|
|
attr_reader :site
|
|
|
|
def initialize(site)
|
|
@site = site
|
|
end
|
|
|
|
# Public: Prefix a given path with the source directory.
|
|
#
|
|
# paths - (optional) path elements to a file or directory within the
|
|
# source directory
|
|
#
|
|
# Returns a path which is prefixed with the source directory.
|
|
def in_source_dir(*paths)
|
|
paths.reduce(site.source) do |base, path|
|
|
Jekyll.sanitized_path(base, path)
|
|
end
|
|
end
|
|
|
|
# Public: Prefix a given path with the destination directory.
|
|
#
|
|
# paths - (optional) path elements to a file or directory within the
|
|
# destination directory
|
|
#
|
|
# Returns a path which is prefixed with the destination directory.
|
|
def in_dest_dir(*paths)
|
|
paths.reduce(site.dest) do |base, path|
|
|
Jekyll.sanitized_path(base, path)
|
|
end
|
|
end
|
|
|
|
# Filter out any files/directories that are hidden or backup files (start
|
|
# with "." or "#" or end with "~"), or contain site content (start with "_"),
|
|
# or are excluded in the site configuration, unless they are web server
|
|
# files such as '.htaccess'.
|
|
#
|
|
# entries - The Array of String file/directory entries to filter.
|
|
#
|
|
# Returns the Array of filtered entries.
|
|
def filter_entries(entries, base_directory = nil)
|
|
EntryFilter.new(site, base_directory).filter(entries)
|
|
end
|
|
|
|
# Read the entries from a particular directory for processing
|
|
#
|
|
# dir - The String relative path of the directory to read
|
|
# subfolder - The String directory to read
|
|
#
|
|
# Returns the list of entries to process
|
|
def get_entries(dir, subfolder)
|
|
base = in_source_dir(dir, subfolder)
|
|
return [] unless File.exist?(base)
|
|
entries = Dir.chdir(base) { filter_entries(Dir['**/*'], base) }
|
|
entries.delete_if { |e| File.directory?(in_source_dir(base, e)) }
|
|
end
|
|
|
|
|
|
# Determines how to read a data file.
|
|
#
|
|
# Returns the contents of the data file.
|
|
def read_data_file(path)
|
|
case File.extname(path).downcase
|
|
when '.csv'
|
|
CSV.read(path, {
|
|
:headers => true,
|
|
:encoding => config['encoding']
|
|
}).map(&:to_hash)
|
|
else
|
|
SafeYAML.load_file(path)
|
|
end
|
|
end
|
|
end
|
|
end |