diff --git a/lib/jekyll/document.rb b/lib/jekyll/document.rb index f01c15e2..c272741f 100644 --- a/lib/jekyll/document.rb +++ b/lib/jekyll/document.rb @@ -7,6 +7,8 @@ module Jekyll attr_reader :path, :site, :extname attr_accessor :content, :collection, :output + YAML_FRONT_MATTER_REGEXP = /\A(---\s*\n.*?\n?)^((---|\.\.\.)\s*$\n?)/m + # Create a new Document. # # site - the Jekyll::Site instance to which this Document belongs @@ -217,7 +219,7 @@ module Jekyll @data = defaults end @content = File.read(path, merged_file_read_opts(opts)) - if content =~ /\A(---\s*\n.*?\n?)^(---\s*$\n?)/m + if content =~ YAML_FRONT_MATTER_REGEXP @content = $POSTMATCH data_file = SafeYAML.load($1) unless data_file.nil? diff --git a/test/source/_methods/yaml_with_dots.md b/test/source/_methods/yaml_with_dots.md new file mode 100644 index 00000000..eb0b6675 --- /dev/null +++ b/test/source/_methods/yaml_with_dots.md @@ -0,0 +1,8 @@ +--- +title: "YAML with Dots" +whatever: foo.bar +... + +Use `{{ page.title }}` to build a full configuration for use w/Jekyll. + +Whatever: {{ page.whatever }} diff --git a/test/test_collections.rb b/test/test_collections.rb index e9f324ee..118f8ddb 100644 --- a/test/test_collections.rb +++ b/test/test_collections.rb @@ -139,6 +139,7 @@ class TestCollections < Test::Unit::TestCase _methods/site/initialize.md _methods/um_hi.md _methods/escape-+\ #%20[].md + _methods/yaml_with_dots.md ], doc.relative_path end end diff --git a/test/test_document.rb b/test/test_document.rb index 6ec9bcbe..f8243aa1 100644 --- a/test/test_document.rb +++ b/test/test_document.rb @@ -44,6 +44,26 @@ class TestDocument < Test::Unit::TestCase }, @document.data) end + context "with YAML ending in three dots" do + + setup do + @site = Site.new(Jekyll.configuration({ + "collections" => ["methods"], + "source" => source_dir, + "destination" => dest_dir + })) + @site.process + @document = @site.collections["methods"].docs.last + end + + should "know its data" do + assert_equal({ + "title" => "YAML with Dots", + "whatever" => "foo.bar" + }, @document.data) + end + end + should "output the collection name in the #to_liquid method" do assert_equal @document.to_liquid['collection'], "methods" end