class Senkyoshi::RuleCriteria

Constants

COMPLETION_TYPES

Attributes

asidata_id[R]
content_id[R]
id[R]
negated[R]

Public Class Methods

from_xml(xml) click to toggle source
# File lib/senkyoshi/models/rule_criteria.rb, line 58
def self.from_xml(xml)
  new(RuleCriteria.get_id(xml), RuleCriteria.get_negated(xml))
end
get_id(xml) click to toggle source
# File lib/senkyoshi/models/rule_criteria.rb, line 50
def self.get_id(xml)
  xml.xpath("./@id").text
end
get_negated(xml) click to toggle source
# File lib/senkyoshi/models/rule_criteria.rb, line 54
def self.get_negated(xml)
  xml.xpath("./NEGATED/@value").text
end
in_same_module?(modules, content_id, resource_id) click to toggle source

Determine two identifierrefs are pointed to by items in the same module

# File lib/senkyoshi/models/rule_criteria.rb, line 64
def self.in_same_module?(modules, content_id, resource_id)
  content_module = Module.find_module_from_item_id(modules, content_id)
  resource_module = Module.find_module_from_item_id(modules, resource_id)
  return nil if content_module.nil? || resource_module.nil?
  content_module == resource_module
end
module_completion_requirement?(modules, content_id, resource_id) click to toggle source
# File lib/senkyoshi/models/rule_criteria.rb, line 75
def self.module_completion_requirement?(modules, content_id, resource_id)
  in_same_module?(modules, content_id, resource_id) == true
end
module_prerequisite?(modules, content_id, resource_id) click to toggle source
# File lib/senkyoshi/models/rule_criteria.rb, line 71
def self.module_prerequisite?(modules, content_id, resource_id)
  in_same_module?(modules, content_id, resource_id) == false
end
new(id, negated) click to toggle source
# File lib/senkyoshi/models/rule_criteria.rb, line 30
def initialize(id, negated)
  @id = id
  @negated = negated
end

Public Instance Methods

add_if_unique(collection, item) { |collection_item, item| ... } click to toggle source
# File lib/senkyoshi/models/rule_criteria.rb, line 35
def add_if_unique(collection, item)
  if collection.detect do |collection_item|
       yield(collection_item, item)
     end.nil?
    collection << item
  end
  collection
end
add_to_module_if_unique(items, item) click to toggle source
# File lib/senkyoshi/models/rule_criteria.rb, line 44
def add_to_module_if_unique(items, item)
  add_if_unique(
    items, item
  ) { |a, b| a.identifierref == b.identifierref }
end
canvas_conversion(course, content_id, resources) click to toggle source
# File lib/senkyoshi/models/rule_criteria.rb, line 127
def canvas_conversion(course, content_id, resources)
  set_ids(content_id, resources)

  mod = Module.find_module_from_item_id course.canvas_modules, get_id

  is_completion = RuleCriteria.module_completion_requirement?(
    course.canvas_modules, get_id, get_foreign_id
  )

  is_prereq = RuleCriteria.module_prerequisite?(
    course.canvas_modules, get_id, get_foreign_id
  )

  if is_completion
    add_to_module_if_unique(
      mod.completion_requirements, make_completion(mod)
    )
  elsif is_prereq
    prereq_module = Module.find_module_from_item_id(
      course.canvas_modules, get_foreign_id
    )

    add_to_module_if_unique(
      mod.prerequisites, make_prereq(prereq_module)
    )

    add_to_module_if_unique(
      prereq_module.completion_requirements, make_completion(prereq_module)
    )
  end

  course
end
get_id() click to toggle source

Returns the most applicable id. If we have an assignment id return that, otherwise return the content id.

# File lib/senkyoshi/models/rule_criteria.rb, line 83
def get_id
  @asidata_id || @content_id
end
make_completion(mod) click to toggle source

Factory method to construct a completion requirement. Should be passed the module that the completion requirement should belong to

# File lib/senkyoshi/models/rule_criteria.rb, line 91
def make_completion(mod)
  CanvasCc::CanvasCC::Models::ModuleCompletionRequirement.new.tap do |req|
    mod_item = ModuleItem.find_item_from_id_ref(
      mod.module_items, get_foreign_id
    )

    req.identifierref = mod_item.identifier if mod_item
    req.type = get_completion_type
  end
end
make_prereq(prereq_module) click to toggle source

Factory method to construct a module prerequisite. Should be passed the prerequisite module

# File lib/senkyoshi/models/rule_criteria.rb, line 106
def make_prereq(prereq_module)
  CanvasCc::CanvasCC::Models::ModulePrerequisite.new.tap do |prereq|
    prereq.identifierref = prereq_module.identifier
    prereq.type = "context_module"
  end
end
set_ids(content_id, resources) click to toggle source

Use gradebook to find assignment id if applicable

# File lib/senkyoshi/models/rule_criteria.rb, line 116
def set_ids(content_id, resources)
  @content_id = content_id
  gradebook = resources.find_instances_of(Gradebook).first
  if gradebook
    outcome_def = gradebook.outcome_definitions.detect do |out_def|
      out_def.content_id == content_id
    end
    @asidata_id = outcome_def.asidataid if outcome_def
  end
end