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