Method: Scrapes::RuleParser::Rule#process

Defined in:
lib/scrapes/rule_parser.rb

#process(node, context) ⇒ Object



235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
# File 'lib/scrapes/rule_parser.rb', line 235

def process(node, context)
  context.instance_variable_set '@hpricot', node
  return true if @limit == 0
  result = @selector.call(node)
  result = [result] unless result.respond_to? :each
  current = context.instance_variable_set "@#@name", []
  result.compact.each do |node|
    value = case @extractor
    when UnboundMethod then @extractor.bind(context).call(node)
    when Extractor     then @extractor.extract(node)
    when Proc, Method  then @extractor.call(node)
    when Class         then @extractor.parse(node)
    end
    next unless value
    current << value
    break if current.size == @limit
  end
  context.instance_variable_set "@#@name", current[0] if @limit == 1
  true
end