diff --git a/lib/jekyll-feed/meta-tag.rb b/lib/jekyll-feed/meta-tag.rb index 6a47a095..54759297 100644 --- a/lib/jekyll-feed/meta-tag.rb +++ b/lib/jekyll-feed/meta-tag.rb @@ -7,8 +7,11 @@ class MetaTag < Liquid::Tag def render(context) @context = context - attrs = attributes.map { |k, v| %(#{k}=#{v.encode(:xml => :attr)}) }.join(" ") - "" + attrs = attributes.map do |k, v| + v = v.to_s unless v.respond_to?(:encode) + %(#{k}=#{v.encode(:xml => :attr)}) + end + "" end private diff --git a/spec/jekyll-feed_spec.rb b/spec/jekyll-feed_spec.rb index e284dc30..af95ea67 100644 --- a/spec/jekyll-feed_spec.rb +++ b/spec/jekyll-feed_spec.rb @@ -189,6 +189,21 @@ end end + context "with site.title set as a non-string value" do + class MySiteTitle + def to_s + "My Dynamic Site Title <&>" + end + alias_method :to_liquid, :to_s + end + let(:site_title) { MySiteTitle.new } + let(:overrides) { { "title" => site_title } } + + it "ensures the site.title is the string representation of the object" do + expect(feed.title.content).to eql(site_title.to_s.encode(xml: :text)) + end + end + context "with site.name set" do let(:site_name) { "My Site Name" } let(:overrides) { { "name" => site_name } }