Merge pull request #2761 from theodi/csv-data

This commit is contained in:
Parker Moore 2014-08-18 01:39:40 -04:00
commit c4a2ac2c4b
3 changed files with 24 additions and 2 deletions

View File

@ -4,6 +4,8 @@
### Minor Enhancements
* Add support for CSV files in the `_data` directory (#2761)
### Bug Fixes
### Development Fixes

View File

@ -45,6 +45,20 @@ Feature: Data
And I should see "Jack" in "_site/index.html"
And I should see "Leon" in "_site/index.html"
Scenario: autoload *.csv files in _data directory
Given I have a _data directory
And I have a "_data/members.csv" file with content:
"""
name,age
Jack,28
Leon,34
"""
And I have an "index.html" page that contains "{% for member in site.data.members %}{{member.name}}{% endfor %}"
When I run jekyll build
Then the "_site/index.html" file should exist
And I should see "Jack" in "_site/index.html"
And I should see "Leon" in "_site/index.html"
Scenario: autoload *.yml files in _data directory with space in file name
Given I have a _data directory
And I have a "_data/team members.yml" file with content:

View File

@ -1,4 +1,5 @@
# encoding: UTF-8
require 'csv'
module Jekyll
class Site
@ -212,7 +213,7 @@ module Jekyll
return unless File.directory?(dir) && (!safe || !File.symlink?(dir))
entries = Dir.chdir(dir) do
Dir['*.{yaml,yml,json}'] + Dir['*'].select { |fn| File.directory?(fn) }
Dir['*.{yaml,yml,json,csv}'] + Dir['*'].select { |fn| File.directory?(fn) }
end
entries.each do |entry|
@ -222,11 +223,16 @@ module Jekyll
key = sanitize_filename(File.basename(entry, '.*'))
if File.directory?(path)
read_data_to(path, data[key] = {})
else
case File.extname(path).downcase
when '.csv'
data[key] = CSV.read(path, :headers => true).map(&:to_hash)
else
data[key] = SafeYAML.load_file(path)
end
end
end
end
# Read in all collections specified in the configuration
#