class WebParser::Recipe

Attributes

normalize_method[R]
type[R]
value[R]

Public Class Methods

new(name, *args) click to toggle source
# File lib/web_parser/recipe.rb, line 5
def initialize name, *args
  @name, @type, @value, @normalize_method = name, *args
  @value, @type = @type, @value if args.size == 1
end

Public Instance Methods

apply(doc) click to toggle source
# File lib/web_parser/recipe.rb, line 10
def apply doc
  case @type
  when :val    then @value
  when :css    then normalize(doc.css(@value))
  when :xpath  then normalize(doc.xpath(@value))
  when :lambda then @value.call(doc)
  else raise "uknown recipe type '#{@type}'!"
  end
end

Private Instance Methods

normalize(value) click to toggle source
# File lib/web_parser/recipe.rb, line 22
def normalize value
  if @normalize_method.respond_to?(:call)
    @normalize_method.call(value)
  else
    value = value.text.gsub("\u00a0", ' ') # replace nbsp with normal space
    @normalize_method ? value.send(@normalize_method) : value
  end
end