Class: AtomicAssessmentsImport::ExamSoft::Extractor::MetadataDetector

Inherits:
Object
  • Object
show all
Defined in:
lib/atomic_assessments_import/exam_soft/extractor/metadata_detector.rb

Constant Summary collapse

FOLDER_PATTERN =
/Folder:\s*(.+?)(?=\s*(?:Title:|Category:|(?<=\s)\d+[.)]))/i
TITLE_PATTERN =
/Title:\s*(.+?)(?=\s*(?:Category:|(?<=\s)\d+[.)]))/i
CATEGORY_PATTERN =
/Category:\s*(.+?)(?=\s*\d+[.)]|\z)/i
TYPE_PATTERN =
/Type:\s*(\S+)/i

Instance Method Summary collapse

Constructor Details

#initialize(nodes) ⇒ MetadataDetector

Returns a new instance of MetadataDetector.



12
13
14
# File 'lib/atomic_assessments_import/exam_soft/extractor/metadata_detector.rb', line 12

def initialize(nodes)
  @nodes = nodes
end

Instance Method Details

#detectObject



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/atomic_assessments_import/exam_soft/extractor/metadata_detector.rb', line 16

def detect
  full_text = @nodes.map { |n| n.text.strip }.join(" ").gsub(/\s+/, " ")
  result = {}

  type_match = full_text.match(TYPE_PATTERN)
  result[:type] = type_match[1].strip.downcase if type_match

  folder_match = full_text.match(FOLDER_PATTERN)
  result[:folder] = folder_match[1].strip if folder_match

  title_match = full_text.match(TITLE_PATTERN)
  result[:title] = title_match[1].strip if title_match

  category_match = full_text.match(CATEGORY_PATTERN)
  result[:categories] = category_match[1].split(/(?<!\s),(?!\s)/).map(&:strip) if category_match

  result
end