Enable frozen strings in remaining lib/banzai/filter/*.rb files

This also fixes a bug with the ImageLazyLoadFilter not doing the right
thing when an existing class attribute is present.

Part of #47424
This commit is contained in:
Stan Hu 2018-07-23 03:05:22 -07:00
parent dc7b4b7bb9
commit 954f307673
5 changed files with 28 additions and 3 deletions

View File

@ -0,0 +1,5 @@
---
title: Enable frozen strings in remaining lib/banzai/filter/*.rb files
merge_request: 20777
author:
type: performance

View File

@ -1,3 +1,5 @@
# frozen_string_literal: true
module Banzai
module Filter
# HTML filter that moves the value of image `src` attributes to `data-src`
@ -5,7 +7,7 @@ module Banzai
class ImageLazyLoadFilter < HTML::Pipeline::Filter
def call
doc.xpath('descendant-or-self::img').each do |img|
img['class'] ||= '' << 'lazy'
img.add_class('lazy')
img['data-src'] = img['src']
img['src'] = LazyImageTagHelper.placeholder_image
end

View File

@ -1,3 +1,5 @@
# frozen_string_literal: true
require 'rouge/plugins/common_mark'
require 'rouge/plugins/redcarpet'
@ -15,7 +17,7 @@ module Banzai
end
def highlight_node(node)
css_classes = 'code highlight js-syntax-highlight'
css_classes = +'code highlight js-syntax-highlight'
lang = node.attr('lang')
retried = false

View File

@ -1,3 +1,5 @@
# frozen_string_literal: true
module Banzai
module Filter
# HTML filter that adds an anchor child element to all Headers in a
@ -19,7 +21,7 @@ module Banzai
def call
return doc if context[:no_header_anchors]
result[:toc] = ""
result[:toc] = +""
headers = Hash.new(0)
header_root = current_header = HeaderNode.new

View File

@ -7,6 +7,20 @@ describe Banzai::Filter::ImageLazyLoadFilter do
%(<img src="#{path}" />)
end
def image_with_class(path, class_attr = nil)
%(<img src="#{path}" class="#{class_attr}"/>)
end
it 'adds a class attribute' do
doc = filter(image('/uploads/e90decf88d8f96fe9e1389afc2e4a91f/test.jpg'))
expect(doc.at_css('img')['class']).to eq 'lazy'
end
it 'appends to the current class attribute' do
doc = filter(image_with_class('/uploads/e90decf88d8f96fe9e1389afc2e4a91f/test.jpg', 'test'))
expect(doc.at_css('img')['class']).to eq 'test lazy'
end
it 'transforms the image src to a data-src' do
doc = filter(image('/uploads/e90decf88d8f96fe9e1389afc2e4a91f/test.jpg'))
expect(doc.at_css('img')['data-src']).to eq '/uploads/e90decf88d8f96fe9e1389afc2e4a91f/test.jpg'