From b0192340074805e97ef63160ebaa95d8dcd76ec8 Mon Sep 17 00:00:00 2001 From: Parker Moore Date: Tue, 17 May 2016 14:38:15 -0700 Subject: [PATCH 1/5] Add ExcerptDrop and remove excerpt's ability to refer to itself in Liquid --- lib/jekyll/drops/drop.rb | 2 +- lib/jekyll/drops/excerpt_drop.rb | 11 +++++++++++ lib/jekyll/excerpt.rb | 7 ++----- test/test_excerpt_drop.rb | 31 +++++++++++++++++++++++++++++++ 4 files changed, 45 insertions(+), 6 deletions(-) create mode 100644 lib/jekyll/drops/excerpt_drop.rb create mode 100644 test/test_excerpt_drop.rb diff --git a/lib/jekyll/drops/drop.rb b/lib/jekyll/drops/drop.rb index d1bffcc5..66945953 100644 --- a/lib/jekyll/drops/drop.rb +++ b/lib/jekyll/drops/drop.rb @@ -3,7 +3,7 @@ module Jekyll module Drops class Drop < Liquid::Drop - NON_CONTENT_METHODS = [:[], :[]=, :inspect, :to_h, :fallback_data].freeze + NON_CONTENT_METHODS = [:[], :[]=, :inspect, :to_h, :fallback_data, :to_s].freeze # Get or set whether the drop class is mutable. # Mutability determines whether or not pre-defined fields may be diff --git a/lib/jekyll/drops/excerpt_drop.rb b/lib/jekyll/drops/excerpt_drop.rb new file mode 100644 index 00000000..9c95a355 --- /dev/null +++ b/lib/jekyll/drops/excerpt_drop.rb @@ -0,0 +1,11 @@ +# encoding: UTF-8 + +module Jekyll + module Drops + class ExcerptDrop < DocumentDrop + def excerpt + nil + end + end + end +end diff --git a/lib/jekyll/excerpt.rb b/lib/jekyll/excerpt.rb index f5884d68..8fef70ed 100644 --- a/lib/jekyll/excerpt.rb +++ b/lib/jekyll/excerpt.rb @@ -7,7 +7,7 @@ module Jekyll attr_writer :output def_delegators :@doc, :site, :name, :ext, :relative_path, :extname, - :render_with_liquid?, :collection, :related_posts + :render_with_liquid?, :collection, :related_posts, :url # Initialize this Excerpt instance. # @@ -59,10 +59,7 @@ module Jekyll end def to_liquid - doc.data['excerpt'] = nil - @to_liquid ||= doc.to_liquid - doc.data['excerpt'] = self - @to_liquid + Jekyll::Drops::ExcerptDrop.new(self) end # Returns the shorthand String identifier of this doc. diff --git a/test/test_excerpt_drop.rb b/test/test_excerpt_drop.rb new file mode 100644 index 00000000..2ca0f353 --- /dev/null +++ b/test/test_excerpt_drop.rb @@ -0,0 +1,31 @@ +require 'helper' + +class TestExcerptDrop < JekyllUnitTest + context "an excerpt drop" do + setup do + @site = fixture_site + @site.read + @doc = @site.docs_to_write.first + @doc_drop = @doc.to_liquid + @excerpt = @doc.data['excerpt'] + @excerpt_drop = @excerpt.to_liquid + end + + should "have the right thing" do + assert @doc.is_a? Jekyll::Document + assert @doc_drop.is_a? Jekyll::Drops::DocumentDrop + assert @excerpt.is_a? Jekyll::Excerpt + assert @excerpt_drop.is_a? Jekyll::Drops::ExcerptDrop + end + + should "not have an excerpt" do + assert_nil @excerpt.data['excerpt'] + assert @excerpt_drop.class.invokable? 'excerpt' + assert_nil @excerpt_drop['excerpt'] + end + + should "inherit values from the document" do + assert_equal @excerpt_drop.keys, @doc_drop.keys + end + end +end From 3896f6d5d8929f3f9e14428703a769912cacb317 Mon Sep 17 00:00:00 2001 From: Parker Moore Date: Tue, 17 May 2016 16:42:35 -0700 Subject: [PATCH 2/5] Use require_relative --- test/helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/helper.rb b/test/helper.rb index 3a3dafa2..6904894f 100644 --- a/test/helper.rb +++ b/test/helper.rb @@ -28,7 +28,7 @@ require "minitest/autorun" require "minitest/reporters" require "minitest/profile" require "rspec/mocks" -require "jekyll" +require_relative "../lib/jekyll.rb" Jekyll.logger = Logger.new(StringIO.new) From c0910f2bc553d45debf50c2438c77f009f547a9e Mon Sep 17 00:00:00 2001 From: Parker Moore Date: Tue, 17 May 2016 16:58:06 -0700 Subject: [PATCH 3/5] look up the content methods for drops in a smarter way --- lib/jekyll/drops/drop.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/jekyll/drops/drop.rb b/lib/jekyll/drops/drop.rb index 66945953..b798c27a 100644 --- a/lib/jekyll/drops/drop.rb +++ b/lib/jekyll/drops/drop.rb @@ -3,7 +3,7 @@ module Jekyll module Drops class Drop < Liquid::Drop - NON_CONTENT_METHODS = [:[], :[]=, :inspect, :to_h, :fallback_data, :to_s].freeze + NON_CONTENT_METHODS = [:fallback_data].freeze # Get or set whether the drop class is mutable. # Mutability determines whether or not pre-defined fields may be @@ -86,7 +86,7 @@ module Jekyll # Returns an Array of strings which represent method-specific keys. def content_methods @content_methods ||= ( - self.class.instance_methods(false) - NON_CONTENT_METHODS + self.class.instance_methods - Jekyll::Drops::Drop.instance_methods - NON_CONTENT_METHODS ).map(&:to_s).reject do |method| method.end_with?("=") end From 7d3f8ac75dcb3274375c5a619d3c727f4305f1ca Mon Sep 17 00:00:00 2001 From: Parker Moore Date: Tue, 17 May 2016 16:58:26 -0700 Subject: [PATCH 4/5] excerpt drop should give access to document's layout --- lib/jekyll/drops/excerpt_drop.rb | 4 ++++ test/test_excerpt_drop.rb | 9 +++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/jekyll/drops/excerpt_drop.rb b/lib/jekyll/drops/excerpt_drop.rb index 9c95a355..c70712fc 100644 --- a/lib/jekyll/drops/excerpt_drop.rb +++ b/lib/jekyll/drops/excerpt_drop.rb @@ -3,6 +3,10 @@ module Jekyll module Drops class ExcerptDrop < DocumentDrop + def layout + @obj.doc.data['layout'] + end + def excerpt nil end diff --git a/test/test_excerpt_drop.rb b/test/test_excerpt_drop.rb index 2ca0f353..769aef06 100644 --- a/test/test_excerpt_drop.rb +++ b/test/test_excerpt_drop.rb @@ -5,7 +5,7 @@ class TestExcerptDrop < JekyllUnitTest setup do @site = fixture_site @site.read - @doc = @site.docs_to_write.first + @doc = @site.docs_to_write.find { |d| !d.data['layout'].nil? } @doc_drop = @doc.to_liquid @excerpt = @doc.data['excerpt'] @excerpt_drop = @excerpt.to_liquid @@ -24,8 +24,13 @@ class TestExcerptDrop < JekyllUnitTest assert_nil @excerpt_drop['excerpt'] end + should "inherit the layout for the drop but not the excerpt" do + assert_nil @excerpt.data['layout'] + assert_equal @excerpt_drop['layout'], @doc_drop['layout'] + end + should "inherit values from the document" do - assert_equal @excerpt_drop.keys, @doc_drop.keys + assert_equal @excerpt_drop.keys.sort, @doc_drop.keys.sort end end end From 48f16974ce35c173f1c34adecba902a775b47069 Mon Sep 17 00:00:00 2001 From: Pat Hawks Date: Tue, 24 May 2016 18:27:37 -0500 Subject: [PATCH 5/5] Rubocop fixes --- lib/jekyll/drops/excerpt_drop.rb | 2 +- test/test_excerpt_drop.rb | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/lib/jekyll/drops/excerpt_drop.rb b/lib/jekyll/drops/excerpt_drop.rb index c70712fc..5d61aeb1 100644 --- a/lib/jekyll/drops/excerpt_drop.rb +++ b/lib/jekyll/drops/excerpt_drop.rb @@ -4,7 +4,7 @@ module Jekyll module Drops class ExcerptDrop < DocumentDrop def layout - @obj.doc.data['layout'] + @obj.doc.data["layout"] end def excerpt diff --git a/test/test_excerpt_drop.rb b/test/test_excerpt_drop.rb index 769aef06..f8c75f9a 100644 --- a/test/test_excerpt_drop.rb +++ b/test/test_excerpt_drop.rb @@ -1,13 +1,13 @@ -require 'helper' +require "helper" class TestExcerptDrop < JekyllUnitTest context "an excerpt drop" do setup do @site = fixture_site @site.read - @doc = @site.docs_to_write.find { |d| !d.data['layout'].nil? } + @doc = @site.docs_to_write.find { |d| !d.data["layout"].nil? } @doc_drop = @doc.to_liquid - @excerpt = @doc.data['excerpt'] + @excerpt = @doc.data["excerpt"] @excerpt_drop = @excerpt.to_liquid end @@ -19,14 +19,14 @@ class TestExcerptDrop < JekyllUnitTest end should "not have an excerpt" do - assert_nil @excerpt.data['excerpt'] - assert @excerpt_drop.class.invokable? 'excerpt' - assert_nil @excerpt_drop['excerpt'] + assert_nil @excerpt.data["excerpt"] + assert @excerpt_drop.class.invokable? "excerpt" + assert_nil @excerpt_drop["excerpt"] end should "inherit the layout for the drop but not the excerpt" do - assert_nil @excerpt.data['layout'] - assert_equal @excerpt_drop['layout'], @doc_drop['layout'] + assert_nil @excerpt.data["layout"] + assert_equal @excerpt_drop["layout"], @doc_drop["layout"] end should "inherit values from the document" do