Class: AtomicAssessmentsImport::ExamSoft::Extractor::MetadataDetector
- Inherits:
-
Object
- Object
- AtomicAssessmentsImport::ExamSoft::Extractor::MetadataDetector
- 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
- #detect ⇒ Object
-
#initialize(nodes) ⇒ MetadataDetector
constructor
A new instance of MetadataDetector.
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
#detect ⇒ Object
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 |