class Qti::V1::Models::Interactions::FormulaInteraction

Public Class Methods

matches(node, parent) click to toggle source

This will know if a class matches

# File lib/qti/v1/models/interactions/formula_interaction.rb, line 8
def self.matches(node, parent)
  return false unless node.at_xpath('.//xmlns:calculated').present?
  new(node, parent)
end

Public Instance Methods

answer_tolerance() click to toggle source
# File lib/qti/v1/models/interactions/formula_interaction.rb, line 39
def answer_tolerance
  @answer_tolerance ||= @node.at_xpath('.//xmlns:answer_tolerance').text
end
formula_decimal_places() click to toggle source
# File lib/qti/v1/models/interactions/formula_interaction.rb, line 48
def formula_decimal_places
  @node.at_xpath('.//xmlns:formulas/@decimal_places')&.value
end
formulas() click to toggle source
# File lib/qti/v1/models/interactions/formula_interaction.rb, line 52
def formulas
  node.xpath('.//xmlns:formula').map(&:text)
end
margin_of_error() click to toggle source
# File lib/qti/v1/models/interactions/formula_interaction.rb, line 43
def margin_of_error
  return { margin: answer_tolerance[0..-2], margin_type: 'percent' } if answer_tolerance.ends_with? '%'
  { margin: answer_tolerance, margin_type: 'absolute' }
end
scoring_data_structs() click to toggle source
# File lib/qti/v1/models/interactions/formula_interaction.rb, line 13
def scoring_data_structs
  solutions.map do |answer|
    ScoringData.new(
      answer[:output],
      rcardinality,
      id: answer[:id]
    )
  end
end
solutions() click to toggle source
# File lib/qti/v1/models/interactions/formula_interaction.rb, line 23
def solutions
  node.xpath('.//xmlns:var_set').map do |anode|
    {
      inputs: vars_at_node(anode),
      output: anode.at_xpath('.//xmlns:answer')&.text&.to_f
    }
  end
end
variables() click to toggle source
# File lib/qti/v1/models/interactions/formula_interaction.rb, line 32
def variables
  varlist = @node.at_xpath('.//xmlns:vars')
  varlist.xpath('.//xmlns:var').map do |vnode|
    variable_def(vnode)
  end
end

Private Instance Methods

variable_def(var_node) click to toggle source
# File lib/qti/v1/models/interactions/formula_interaction.rb, line 67
def variable_def(var_node)
  {
    name: var_node.attributes['name']&.value,
    min: var_node.at_xpath('.//xmlns:min').text&.to_f,
    max: var_node.at_xpath('.//xmlns:max').text&.to_f,
    precision: var_node.attributes['scale']&.value&.to_i
  }
end
vars_at_node(parent_node) click to toggle source
# File lib/qti/v1/models/interactions/formula_interaction.rb, line 58
def vars_at_node(parent_node)
  parent_node.xpath('.//xmlns:var').map do |vnode|
    {
      name: vnode.attributes['name']&.value,
      value: vnode.text&.to_f
    }
  end
end