From 069e70d1b3dd2a21d4c36f2eecb677362b7384a9 Mon Sep 17 00:00:00 2001 From: "maul.esel" Date: Thu, 11 Apr 2013 14:25:47 +0200 Subject: [PATCH 1/8] do not override custom excerpt set in YAML frontmatter Fixes #933. --- lib/jekyll/post.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/jekyll/post.rb b/lib/jekyll/post.rb index 50fd983c..2def58ed 100644 --- a/lib/jekyll/post.rb +++ b/lib/jekyll/post.rb @@ -80,7 +80,7 @@ module Jekyll # Returns nothing. def read_yaml(base, name) super(base, name) - self.excerpt = self.extract_excerpt + self.excerpt = self.data["excerpt"] || self.extract_excerpt self.data['layout'] = 'post' unless self.data.has_key?('layout') end From 0113fea7a1603363bc4099d5c5db1f11dfa6f7f2 Mon Sep 17 00:00:00 2001 From: "maul.esel" Date: Thu, 11 Apr 2013 14:26:20 +0200 Subject: [PATCH 2/8] Add tests for using custom excerpt --- .../_posts/2013-04-11-custom-excerpt.markdown | 8 ++++++++ test/test_generated_site.rb | 2 +- test/test_post.rb | 15 +++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 test/source/_posts/2013-04-11-custom-excerpt.markdown diff --git a/test/source/_posts/2013-04-11-custom-excerpt.markdown b/test/source/_posts/2013-04-11-custom-excerpt.markdown new file mode 100644 index 00000000..7212704e --- /dev/null +++ b/test/source/_posts/2013-04-11-custom-excerpt.markdown @@ -0,0 +1,8 @@ +--- +layout: ~ +excerpt: 'I can set a custom excerpt with *markdown*' +--- + +This is not my excerpt. + +Neither is this. diff --git a/test/test_generated_site.rb b/test/test_generated_site.rb index abda0ba5..56413466 100644 --- a/test/test_generated_site.rb +++ b/test/test_generated_site.rb @@ -14,7 +14,7 @@ class TestGeneratedSite < Test::Unit::TestCase end should "ensure post count is as expected" do - assert_equal 31, @site.posts.size + assert_equal 32, @site.posts.size end should "insert site.posts into the index" do diff --git a/test/test_post.rb b/test/test_post.rb index b5b082a3..dfba0758 100644 --- a/test/test_post.rb +++ b/test/test_post.rb @@ -320,6 +320,21 @@ class TestPost < Test::Unit::TestCase assert !@post.excerpt.include?("---"), "does not contains separator" end end + + context "with custom excerpt" do + setup do + file = "2013-04-11-custom-excerpt.markdown" + @post.process(file) + @post.read_yaml(@source, file) + @post.transform + end + + should "use custom excerpt" do + assert_equal("

I can set a custom excerpt with markdown

", @post.excerpt) + end + + end + end end From 2792e1e427b5aa75da1cae58285a4a17f7a45b47 Mon Sep 17 00:00:00 2001 From: "maul.esel" Date: Thu, 11 Apr 2013 16:51:48 +0200 Subject: [PATCH 3/8] fix indentation of test --- test/test_post.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/test_post.rb b/test/test_post.rb index dfba0758..f8ba8392 100644 --- a/test/test_post.rb +++ b/test/test_post.rb @@ -323,17 +323,17 @@ class TestPost < Test::Unit::TestCase context "with custom excerpt" do setup do - file = "2013-04-11-custom-excerpt.markdown" - @post.process(file) + file = "2013-04-11-custom-excerpt.markdown" + @post.process(file) @post.read_yaml(@source, file) @post.transform - end + end should "use custom excerpt" do - assert_equal("

I can set a custom excerpt with markdown

", @post.excerpt) - end + assert_equal("

I can set a custom excerpt with markdown

", @post.excerpt) + end - end + end end end From 654d598fcf8492a4ed4a62cc4d9e77afe6e799d7 Mon Sep 17 00:00:00 2001 From: "maul.esel" Date: Thu, 11 Apr 2013 17:13:15 +0200 Subject: [PATCH 4/8] rework excerpt to be an accessor method Instead of setting self.excerpt, make it a method that returns either the custom excerpt or the pre- viously extracted excerpt. --- lib/jekyll/post.rb | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/lib/jekyll/post.rb b/lib/jekyll/post.rb index 2def58ed..99968152 100644 --- a/lib/jekyll/post.rb +++ b/lib/jekyll/post.rb @@ -19,10 +19,10 @@ module Jekyll end attr_accessor :site - attr_accessor :data, :excerpt, :content, :output, :ext + attr_accessor :data, :extracted_excerpt, :content, :output, :ext attr_accessor :date, :slug, :published, :tags, :categories - attr_reader :name + attr_reader :name, :excerpt # Initialize this Post instance. # @@ -80,10 +80,18 @@ module Jekyll # Returns nothing. def read_yaml(base, name) super(base, name) - self.excerpt = self.data["excerpt"] || self.extract_excerpt + self.extracted_excerpt = self.extract_excerpt self.data['layout'] = 'post' unless self.data.has_key?('layout') end + # The post excerpt. This is either a custom excerpt + # set in YAML front matter or the result of extract_excerpt. + # + # Returns excerpt string. + def excerpt + self.data['excerpt'] ? converter.convert(self.data['excerpt']) : self.extracted_excerpt + end + # Compares Post objects. First compares the Post date. If the dates are # equal, it compares the Post slugs. # @@ -117,7 +125,7 @@ module Jekyll # Returns nothing. def transform super - self.excerpt = converter.convert(self.excerpt) + self.extracted_excerpt = converter.convert(self.extracted_excerpt) end # The generated directory into which the post will be placed From 951ee09a75c3a07d7525db2b3ce4afa668a68e89 Mon Sep 17 00:00:00 2001 From: "maul.esel" Date: Thu, 11 Apr 2013 19:05:28 +0200 Subject: [PATCH 5/8] remove useless attr_reader for excerpt (is a method now) --- lib/jekyll/post.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/jekyll/post.rb b/lib/jekyll/post.rb index 99968152..47627e7b 100644 --- a/lib/jekyll/post.rb +++ b/lib/jekyll/post.rb @@ -22,7 +22,7 @@ module Jekyll attr_accessor :data, :extracted_excerpt, :content, :output, :ext attr_accessor :date, :slug, :published, :tags, :categories - attr_reader :name, :excerpt + attr_reader :name # Initialize this Post instance. # From b10e06ce47efec6e7152d47dfcda026d82757664 Mon Sep 17 00:00:00 2001 From: "maul.esel" Date: Thu, 11 Apr 2013 19:33:32 +0200 Subject: [PATCH 6/8] new test: ensure the correct excerpt is exposed to liquid Also shorten test code a little bit. --- test/source/_posts/2013-04-11-custom-excerpt.markdown | 2 ++ test/test_post.rb | 9 ++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/test/source/_posts/2013-04-11-custom-excerpt.markdown b/test/source/_posts/2013-04-11-custom-excerpt.markdown index 7212704e..ff5b721f 100644 --- a/test/source/_posts/2013-04-11-custom-excerpt.markdown +++ b/test/source/_posts/2013-04-11-custom-excerpt.markdown @@ -6,3 +6,5 @@ excerpt: 'I can set a custom excerpt with *markdown*' This is not my excerpt. Neither is this. + +I can use the excerpt: {{page.excerpt}} \ No newline at end of file diff --git a/test/test_post.rb b/test/test_post.rb index f8ba8392..88d25723 100644 --- a/test/test_post.rb +++ b/test/test_post.rb @@ -324,15 +324,18 @@ class TestPost < Test::Unit::TestCase context "with custom excerpt" do setup do file = "2013-04-11-custom-excerpt.markdown" - @post.process(file) - @post.read_yaml(@source, file) - @post.transform + @post = setup_post(file) + do_render(@post) end should "use custom excerpt" do assert_equal("

I can set a custom excerpt with markdown

", @post.excerpt) end + should "expose custom excerpt to liquid" do + assert @post.content.include?("I can use the excerpt:

I can set a custom excerpt with markdown

") + end + end end From bcda51f97bb1ab3c8513f09f46350b6ebd7f44b1 Mon Sep 17 00:00:00 2001 From: "maul.esel" Date: Thu, 11 Apr 2013 21:02:08 +0200 Subject: [PATCH 7/8] do not allow markdown etc. in excerpt Adjust the tests accordingly. Also add a message for one of the tests. --- lib/jekyll/post.rb | 6 +++++- test/source/_posts/2013-04-11-custom-excerpt.markdown | 2 +- test/test_post.rb | 4 ++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/jekyll/post.rb b/lib/jekyll/post.rb index 47627e7b..14c287bd 100644 --- a/lib/jekyll/post.rb +++ b/lib/jekyll/post.rb @@ -89,7 +89,11 @@ module Jekyll # # Returns excerpt string. def excerpt - self.data['excerpt'] ? converter.convert(self.data['excerpt']) : self.extracted_excerpt + if self.data.has_key? 'excerpt' + self.data['excerpt'] + else + self.extracted_excerpt + end end # Compares Post objects. First compares the Post date. If the dates are diff --git a/test/source/_posts/2013-04-11-custom-excerpt.markdown b/test/source/_posts/2013-04-11-custom-excerpt.markdown index ff5b721f..023251fe 100644 --- a/test/source/_posts/2013-04-11-custom-excerpt.markdown +++ b/test/source/_posts/2013-04-11-custom-excerpt.markdown @@ -1,6 +1,6 @@ --- layout: ~ -excerpt: 'I can set a custom excerpt with *markdown*' +excerpt: 'I can set a custom excerpt' --- This is not my excerpt. diff --git a/test/test_post.rb b/test/test_post.rb index 88d25723..62da1343 100644 --- a/test/test_post.rb +++ b/test/test_post.rb @@ -329,11 +329,11 @@ class TestPost < Test::Unit::TestCase end should "use custom excerpt" do - assert_equal("

I can set a custom excerpt with markdown

", @post.excerpt) + assert_equal("I can set a custom excerpt", @post.excerpt) end should "expose custom excerpt to liquid" do - assert @post.content.include?("I can use the excerpt:

I can set a custom excerpt with markdown

") + assert @post.content.include?("I can use the excerpt: I can set a custom excerpt"), "Exposes incorrect excerpt to liquid." end end From 2b238786a28a4e347fac1435d13acc7a8d3a6817 Mon Sep 17 00:00:00 2001 From: "maul.esel" Date: Fri, 12 Apr 2013 12:05:07 +0200 Subject: [PATCH 8/8] one more indentation fix --- lib/jekyll/post.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/jekyll/post.rb b/lib/jekyll/post.rb index 14c287bd..e040fb02 100644 --- a/lib/jekyll/post.rb +++ b/lib/jekyll/post.rb @@ -90,9 +90,9 @@ module Jekyll # Returns excerpt string. def excerpt if self.data.has_key? 'excerpt' - self.data['excerpt'] + self.data['excerpt'] else - self.extracted_excerpt + self.extracted_excerpt end end