Class: Qti::V1::Models::Interactions::BaseInteraction
- Inherits:
-
Base
show all
- Defined in:
- lib/qti/v1/models/interactions/base_interaction.rb
Instance Attribute Summary collapse
Attributes inherited from Models::Base
#doc, #manifest, #package_root, #path, #resource
Class Method Summary
collapse
Instance Method Summary
collapse
Methods inherited from Base
#qti_version, #return_inner_content!, #sanitize_attributes, #sanitize_attributes_by_node
#css_with_single_check, from_path!, #parse_html, #parse_xml, #preprocess_xml_doc, #raise_unsupported, #remap_href_path, #sanitize_content!, #xpath_with_single_check
Constructor Details
Returns a new instance of BaseInteraction.
34
35
36
37
|
# File 'lib/qti/v1/models/interactions/base_interaction.rb', line 34
def initialize(node, parent)
@node = node
copy_paths_from_item(parent)
end
|
Instance Attribute Details
#node ⇒ Object
Returns the value of attribute node.
6
7
8
|
# File 'lib/qti/v1/models/interactions/base_interaction.rb', line 6
def node
@node
end
|
Class Method Details
.canvas_custom_fitb?(node) ⇒ Boolean
12
13
14
15
|
# File 'lib/qti/v1/models/interactions/base_interaction.rb', line 12
def self.canvas_custom_fitb?(node)
qtype = question_type(node)
%w[fill_in_multiple_blanks_question multiple_dropdowns_question].include? qtype
end
|
.canvas_multiple_fib?(node) ⇒ Boolean
17
18
19
20
21
|
# File 'lib/qti/v1/models/interactions/base_interaction.rb', line 17
def self.canvas_multiple_fib?(node)
matches = node.xpath('.//xmlns:response_lid')
return false if matches.count < 1
question_type(node) == 'fill_in_multiple_blanks_question'
end
|
.matches(_node, _parent) ⇒ Object
8
9
10
|
# File 'lib/qti/v1/models/interactions/base_interaction.rb', line 8
def self.matches(_node, _parent)
false
end
|
.maybe_question_type(node, qtype) ⇒ Object
29
30
31
32
|
# File 'lib/qti/v1/models/interactions/base_interaction.rb', line 29
def self.maybe_question_type(node, qtype)
question_type = self.question_type(node)
!question_type || question_type == qtype
end
|
.question_type(node) ⇒ Object
23
24
25
26
27
|
# File 'lib/qti/v1/models/interactions/base_interaction.rb', line 23
def self.question_type(node)
path = './/xmlns:qtimetadatafield/xmlns:fieldlabel' \
'[text()="question_type"]/../xmlns:fieldentry'
node.at_xpath(path)&.text
end
|
Instance Method Details
#answer_feedback ⇒ Object
59
60
61
62
63
64
65
66
67
|
# File 'lib/qti/v1/models/interactions/base_interaction.rb', line 59
def answer_feedback
path = './/xmlns:respcondition//xmlns:displayfeedback/../' \
'xmlns:conditionvar/xmlns:varequal[@respident]/../../' \
'xmlns:displayfeedback/..'
answers = node.xpath(path).map do |entry|
answer_feedback_entry(entry)
end.compact
answers unless answers.empty?
end
|
#canvas_item_feedback ⇒ Object
51
52
53
54
55
56
57
|
# File 'lib/qti/v1/models/interactions/base_interaction.rb', line 51
def canvas_item_feedback
{
neutral: get_feedback('general_fb')&.text,
correct: get_feedback('correct_fb')&.text,
incorrect: get_feedback('general_incorrect_fb')&.text
}.compact
end
|
#rcardinality ⇒ Object
47
48
49
|
# File 'lib/qti/v1/models/interactions/base_interaction.rb', line 47
def rcardinality
@rcardinality ||= @node.at_xpath('.//xmlns:response_lid/@rcardinality')&.value || 'Single'
end
|
#scoring_data_structs ⇒ Object
43
44
45
|
# File 'lib/qti/v1/models/interactions/base_interaction.rb', line 43
def scoring_data_structs
raise NotImplementedError
end
|
#shuffled? ⇒ Boolean
39
40
41
|
# File 'lib/qti/v1/models/interactions/base_interaction.rb', line 39
def shuffled?
@node.at_xpath('.//xmlns:render_choice/@shuffle')&.value.try(:downcase) == 'yes'
end
|