def self.evaluate_subextractor(url, parent_pattern, resolve)
if @@detail_pattern_relations.keys.include? @@detail_extractor_to_pattern_name[parent_pattern.referenced_extractor]
detail_root = @@detail_pattern_relations[@@detail_extractor_to_pattern_name[parent_pattern.referenced_extractor]]
detail_root.last_result = nil
FetchAction.store_page
@@original_evaluation_context.push @@evaluation_context
@@host_stack.push FetchAction.get_host_name
@@evaluation_context = EvaluationContext.new
FetchAction.restore_host_name
fetch url, :resolve => resolve
@@evaluation_context.extractor = self
@@evaluation_context.root_pattern = detail_root
root_results = evaluate_extractor detail_root
@@evaluation_context = @@original_evaluation_context.pop
FetchAction.restore_page
FetchAction.store_host_name(@@host_stack.pop)
root_results
else
@@original_evaluation_context ||= []
@@host_stack ||= []
FetchAction.store_page
@@original_evaluation_context.push @@evaluation_context
@@host_stack.push FetchAction.get_host_name
@@evaluation_context = EvaluationContext.new
FetchAction.restore_host_name
fetch url, :resolve => resolve
class_eval(&parent_pattern.referenced_extractor)
root_pattern = @@evaluation_context.root_pattern
@@detail_pattern_relations[@@detail_extractor_to_pattern_name[parent_pattern.referenced_extractor]] = root_pattern
root_results = evaluate_extractor(root_pattern)
@@evaluation_context = @@original_evaluation_context.pop
FetchAction.restore_page
FetchAction.store_host_name(@@host_stack.pop)
root_results
end
end