class Qti::V2::Models::Interactions::CategorizationInteraction

Public Class Methods

matches(node, parent) click to toggle source
# File lib/qti/v2/models/interactions/categorization_interaction.rb, line 8
def self.matches(node, parent)
  if use_match_interaction_implementation?(node)
    new(node, parent, MatchItemTagProcessors::MatchInteractionTagProcessor)
  else
    false
  end
end
use_match_interaction_implementation?(node) click to toggle source
# File lib/qti/v2/models/interactions/categorization_interaction.rb, line 16
def self.use_match_interaction_implementation?(node)
  MatchItemTagProcessors::MatchInteractionTagProcessor.match_interaction_tag?(node) &&
    MatchItemTagProcessors::MatchInteractionTagProcessor.number_of_questions_per_answer(node)
                                                        .any? { |n| n != 1 }
end

Public Instance Methods

scoring_data_structs() click to toggle source
# File lib/qti/v2/models/interactions/categorization_interaction.rb, line 22
def scoring_data_structs
  questions_categories_choices_hash.map do |category_choice, questions_choices|
    ScoringData.new(category_choice.text, 'directedPair',
      id: node_identifier(category_choice),
      questions_ids: questions_choices.map { |q| node_identifier(q) })
  end
end

Private Instance Methods

categories_ids() click to toggle source
# File lib/qti/v2/models/interactions/categorization_interaction.rb, line 54
def categories_ids
  @_categories_ids ||= implementation.question_response_pairs.map { |_, category_id| category_id }.uniq
end
category_choices() click to toggle source
# File lib/qti/v2/models/interactions/categorization_interaction.rb, line 46
def category_choices
  @_category_choices ||= implementation.choices.select { |c| categories_ids.include? node_identifier(c) }
end
node_identifier(node) click to toggle source
# File lib/qti/v2/models/interactions/categorization_interaction.rb, line 62
def node_identifier(node)
  node.attributes['identifier'].value
end
question_choices() click to toggle source
# File lib/qti/v2/models/interactions/categorization_interaction.rb, line 50
def question_choices
  @_question_choices ||= implementation.choices.select { |c| questions_ids.include? node_identifier(c) }
end
questions_categories_choices_hash() click to toggle source
# File lib/qti/v2/models/interactions/categorization_interaction.rb, line 32
def questions_categories_choices_hash
  category_choices.each_with_object({}) do |category_choice, hash|
    hash[category_choice] = questions_for_category_choice(category_choice)
  end
end
questions_for_category_choice(choice) click to toggle source
# File lib/qti/v2/models/interactions/categorization_interaction.rb, line 38
def questions_for_category_choice(choice)
  choice_identifier = node_identifier(choice)
  category_questions_ids = implementation.question_response_pairs
                                         .select { |_, category_id| category_id == choice_identifier }
                                         .map { |question_id, _| question_id }
  question_choices.select { |q| category_questions_ids.include? node_identifier(q) }
end
questions_ids() click to toggle source
# File lib/qti/v2/models/interactions/categorization_interaction.rb, line 58
def questions_ids
  @_questions_ids ||= implementation.question_response_pairs.map { |question_id, _| question_id }.uniq
end