def self.define(mode=nil, &extractor_definition)
backtrace = SharedUtils.get_backtrace
parts = backtrace[1].split(':')
source_file = parts[0]
@@mode = mode
@@detail_extractor_to_pattern_name = {}
@@detail_pattern_relations = {}
@@next_patterns = {}
mode_name = (mode == :production ? 'Production' : 'Learning')
Scrubyt.log :MODE, mode_name
@@evaluation_context = EvaluationContext.new
@@evaluation_context.evaluating_extractor_definition = true
class_eval(&extractor_definition)
@@evaluation_context.evaluating_extractor_definition = false
root_pattern = @@evaluation_context.root_pattern
if root_pattern.nil?
Scrubyt.log :ERROR, 'No extractor defined, exiting...'
exit
end
root_pattern.source_file = source_file
root_pattern.source_proc = extractor_definition
root_results = evaluate_extractor(root_pattern)
scrubyt_result = ScrubytResult.new('root')
scrubyt_result.push(*root_results)
scrubyt_result.root_pattern = root_pattern
Scrubyt.log :INFO, 'Extraction finished succesfully!'
scrubyt_result
end