Class Loofah::Scrubber
In: lib/loofah/scrubber.rb
Parent: Object

A Scrubber wraps up a block (or method) that is run on an HTML node (element):

  # change all <span> tags to <div> tags
  span2div = Loofah::Scrubber.new do |node|
    node.name = "div" if node.name == "span"
  end

Alternatively, this scrubber could have been implemented as:

  class Span2Div < Loofah::Scrubber
    def scrub(node)
      node.name = "div" if node.name == "span"
    end
  end
  span2div = Span2Div.new

This can then be run on a document:

  Loofah.fragment("<span>foo</span><p>bar</p>").scrub!(span2div).to_s
  # => "<div>foo</div><p>bar</p>"

Scrubbers can be run on a document in either a top-down traversal (the default) or bottom-up. Top-down scrubbers can optionally return Scrubber::STOP to terminate the traversal of a subtree.

Methods

new   scrub   traverse  

Constants

CONTINUE = Object.new.freeze   Top-down Scrubbers may return CONTINUE to indicate that the subtree should be traversed.
STOP = Object.new.freeze   Top-down Scrubbers may return STOP to indicate that the subtree should not be traversed.

Attributes

block  [R]  When a scrubber is initialized, the optional block is saved as :block. Note that, if no block is passed, then the scrub method is assumed to have been implemented.
direction  [R]  When a scrubber is initialized, the :direction may be specified as :top_down (the default) or :bottom_up.

Public Class methods

Options may include

  :direction => :top_down (the default)

or

  :direction => :bottom_up

For top_down traversals, if the block returns Loofah::Scrubber::STOP, then the traversal will be terminated for the current node‘s subtree.

Alternatively, a Scrubber may inherit from Loofah::Scrubber, and implement scrub, which is slightly faster than using a block.

Public Instance methods

When new is not passed a block, the class may implement scrub, which will be called for each document node.

Calling traverse will cause the document to be traversed by either the lambda passed to the initializer or the scrub method, in the direction specified at new time.

[Validate]