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