Class: Senkyoshi::RuleCriteria
- Inherits:
-
Object
- Object
- Senkyoshi::RuleCriteria
- Includes:
- Senkyoshi
- Defined in:
- lib/senkyoshi/models/rule_criteria.rb
Direct Known Subclasses
Constant Summary collapse
- COMPLETION_TYPES =
{ must_view: "must_view", must_submit: "must_submit", min_score: "min_score", must_contribute: "must_contribute", }.freeze
Constants included from Senkyoshi
DIR_BASE, FILE_BASE, MAIN_CANVAS_MODULE, MASTER_MODULE, PRE_RESOURCE_TYPE, RESOURCE_TYPE, VERSION
Instance Attribute Summary collapse
-
#asidata_id ⇒ Object
readonly
Returns the value of attribute asidata_id.
-
#content_id ⇒ Object
readonly
Returns the value of attribute content_id.
-
#id ⇒ Object
readonly
Returns the value of attribute id.
-
#negated ⇒ Object
readonly
Returns the value of attribute negated.
Class Method Summary collapse
- .from_xml(xml) ⇒ Object
- .get_id(xml) ⇒ Object
- .get_negated(xml) ⇒ Object
-
.in_same_module?(modules, content_id, resource_id) ⇒ Boolean
Determine two identifierrefs are pointed to by items in the same module.
- .module_completion_requirement?(modules, content_id, resource_id) ⇒ Boolean
- .module_prerequisite?(modules, content_id, resource_id) ⇒ Boolean
Instance Method Summary collapse
- #add_if_unique(collection, item) ⇒ Object
- #add_to_module_if_unique(items, item) ⇒ Object
- #canvas_conversion(course, content_id, resources) ⇒ Object
-
#get_id ⇒ Object
Returns the most applicable id.
-
#initialize(id, negated) ⇒ RuleCriteria
constructor
A new instance of RuleCriteria.
-
#make_completion(mod) ⇒ Object
Factory method to construct a completion requirement.
-
#make_prereq(prereq_module) ⇒ Object
Factory method to construct a module prerequisite.
-
#set_ids(content_id, resources) ⇒ Object
Use gradebook to find assignment id if applicable.
Methods included from Senkyoshi
build_file, build_heirarchy, cleanup, configure, connect_content, create_canvas_course, create_random_hex, get_attribute_value, get_description, get_single_pre_data, get_text, initialize_course, iterate_files, iterate_xml, iterator_master, parse, parse_and_process_single, pre_iterator, read_file, reset, true?
Constructor Details
#initialize(id, negated) ⇒ RuleCriteria
Returns a new instance of RuleCriteria.
30 31 32 33 |
# File 'lib/senkyoshi/models/rule_criteria.rb', line 30 def initialize(id, negated) @id = id @negated = negated end |
Instance Attribute Details
#asidata_id ⇒ Object (readonly)
Returns the value of attribute asidata_id.
21 22 23 |
# File 'lib/senkyoshi/models/rule_criteria.rb', line 21 def asidata_id @asidata_id end |
#content_id ⇒ Object (readonly)
Returns the value of attribute content_id.
21 22 23 |
# File 'lib/senkyoshi/models/rule_criteria.rb', line 21 def content_id @content_id end |
#id ⇒ Object (readonly)
Returns the value of attribute id.
21 22 23 |
# File 'lib/senkyoshi/models/rule_criteria.rb', line 21 def id @id end |
#negated ⇒ Object (readonly)
Returns the value of attribute negated.
21 22 23 |
# File 'lib/senkyoshi/models/rule_criteria.rb', line 21 def negated @negated end |
Class Method Details
.from_xml(xml) ⇒ Object
58 59 60 |
# 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) ⇒ Object
50 51 52 |
# File 'lib/senkyoshi/models/rule_criteria.rb', line 50 def self.get_id(xml) xml.xpath("./@id").text end |
.get_negated(xml) ⇒ Object
54 55 56 |
# 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) ⇒ Boolean
Determine two identifierrefs are pointed to by items in the same module
64 65 66 67 68 69 |
# 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) ⇒ Boolean
75 76 77 |
# 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) ⇒ Boolean
71 72 73 |
# 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 |
Instance Method Details
#add_if_unique(collection, item) ⇒ Object
35 36 37 38 39 40 41 42 |
# 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) ⇒ Object
44 45 46 47 48 |
# 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) ⇒ Object
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 |
# 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 ⇒ Object
Returns the most applicable id. If we have an assignment id return that, otherwise return the content id.
83 84 85 |
# File 'lib/senkyoshi/models/rule_criteria.rb', line 83 def get_id @asidata_id || @content_id end |
#make_completion(mod) ⇒ Object
Factory method to construct a completion requirement. Should be passed the module that the completion requirement should belong to
91 92 93 94 95 96 97 98 99 100 |
# 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) ⇒ Object
Factory method to construct a module prerequisite. Should be passed the prerequisite module
106 107 108 109 110 111 |
# 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) ⇒ Object
Use gradebook to find assignment id if applicable
116 117 118 119 120 121 122 123 124 125 |
# 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 |