class HTML::Sanitizer
def process_node(node, result, options)
def process_node(node, result, options) result << node.to_s end
def sanitize(text, options = {})
def sanitize(text, options = {}) validate_options(options) return text unless sanitizeable?(text) tokenize(text, options).join end
def sanitizeable?(text)
def sanitizeable?(text) !(text.nil? || text.empty? || !text.index("<")) end
def tokenize(text, options)
def tokenize(text, options) tokenizer = HTML::Tokenizer.new(text) result = [] while token = tokenizer.next node = Node.parse(nil, 0, 0, token, false) process_node node, result, options end result end
def validate_options(options)
def validate_options(options) if options[:tags] && !options[:tags].is_a?(Enumerable) raise ArgumentError, "You should pass :tags as an Enumerable" end if options[:attributes] && !options[:attributes].is_a?(Enumerable) raise ArgumentError, "You should pass :attributes as an Enumerable" end end