canvas_cc 0.0.27 → 0.0.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/canvas_cc/canvas_cc/assignment_helper.rb +6 -0
- data/lib/canvas_cc/canvas_cc/cartridge_creator.rb +1 -0
- data/lib/canvas_cc/canvas_cc/models/assignment.rb +1 -1
- data/lib/canvas_cc/canvas_cc/models/course.rb +2 -1
- data/lib/canvas_cc/canvas_cc/models/rubric.rb +11 -0
- data/lib/canvas_cc/canvas_cc/models/rubric_criterion.rb +10 -0
- data/lib/canvas_cc/canvas_cc/rubric_writer.rb +52 -0
- data/lib/canvas_cc/version.rb +1 -1
- data/lib/canvas_cc.rb +3 -0
- data/spec/moodle2cc/canvas_cc/cartridge_creator_spec.rb +4 -2
- data/spec/moodle2cc/canvas_cc/rubric_writer_spec.rb +68 -0
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3a8a64dd671c54241f7d1051eb176a106f2937f3
|
4
|
+
data.tar.gz: 74ee921f395af8bc0b813a24aa4a98c03cf5c2dc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1686311c4077fb06f9311d4965bf77915bb323c0a1f761aa2c5b083083b0ba39ed13aacfcfd0c4b87839e458e5e0c4e5a4a93917aeabc82de2c8047f84d72421
|
7
|
+
data.tar.gz: c6159917b40b05111da1c66397bf315f5620c798adea0897f40853e3556846782387e7b2d028826005e9886c142f15916b5d893e28283c073c444c87f6984e13
|
@@ -26,5 +26,11 @@ module CanvasCc::CanvasCC::AssignmentHelper
|
|
26
26
|
xml.automatic_peer_reviews assignment.automatic_peer_reviews unless assignment.automatic_peer_reviews.nil?
|
27
27
|
xml.anonymous_peer_reviews assignment.anonymous_peer_reviews unless assignment.anonymous_peer_reviews.nil?
|
28
28
|
xml.quiz_identifierref assignment.quiz_identifierref unless assignment.quiz_identifierref.nil?
|
29
|
+
unless assignment.rubric.nil?
|
30
|
+
xml.rubric_identifierref assignment.rubric.identifier
|
31
|
+
xml.rubric_external_identifier assignment.rubric.external_identifier
|
32
|
+
end
|
33
|
+
xml.rubric_use_for_grading assignment.rubric_use_for_grading unless assignment.rubric_use_for_grading.nil?
|
34
|
+
xml.rubric_hide_score_total assignment.rubric_hide_score_total unless assignment.rubric_hide_score_total.nil?
|
29
35
|
end
|
30
36
|
end
|
@@ -52,6 +52,7 @@ module CanvasCc::CanvasCC
|
|
52
52
|
CanvasCc::CanvasCC::QuestionBankWriter.new(dir, *@course.question_banks).write
|
53
53
|
CanvasCc::CanvasCC::AssessmentWriter.new(dir, *@course.assessments).write
|
54
54
|
CanvasCc::CanvasCC::OutcomeWriter.new(dir, *@course.outcomes).write
|
55
|
+
CanvasCc::CanvasCC::RubricWriter.new(dir, *@course.rubrics).write
|
55
56
|
end
|
56
57
|
|
57
58
|
def zip_dir(out_file, dir)
|
@@ -4,7 +4,7 @@ module CanvasCc::CanvasCC::Models
|
|
4
4
|
:assignment_group_identifier_ref, :workflow_state, :points_possible, :grading_type, :all_day,
|
5
5
|
:submission_types, :position, :peer_review_count, :peer_reviews_assigned, :peer_reviews,
|
6
6
|
:automatic_peer_reviews, :grade_group_students_individually, :muted, :turnitin_enabled,
|
7
|
-
:anonymous_peer_reviews, :quiz_identifierref
|
7
|
+
:anonymous_peer_reviews, :quiz_identifierref, :rubric, :rubric_use_for_grading, :rubric_hide_score_total
|
8
8
|
|
9
9
|
LAR_TYPE = 'associatedcontent/imscc_xmlv1p1/learning-application-resource'
|
10
10
|
ASSIGNMENT_SETTINGS_FILE = 'assignment_settings.xml'
|
@@ -2,7 +2,7 @@ module CanvasCc::CanvasCC::Models
|
|
2
2
|
class Course
|
3
3
|
|
4
4
|
attr_accessor :format, :identifier, :copyright, :settings, :resources, :canvas_modules, :files, :pages, :discussions,
|
5
|
-
:assignments, :assessments, :question_banks, :assignment_groups, :folders, :syllabus, :outcomes
|
5
|
+
:assignments, :assessments, :question_banks, :assignment_groups, :folders, :syllabus, :outcomes, :rubrics
|
6
6
|
|
7
7
|
def initialize
|
8
8
|
@settings = {}
|
@@ -17,6 +17,7 @@ module CanvasCc::CanvasCC::Models
|
|
17
17
|
@question_banks = []
|
18
18
|
@assignment_groups = []
|
19
19
|
@outcomes = []
|
20
|
+
@rubrics = []
|
20
21
|
end
|
21
22
|
|
22
23
|
def start_at
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module CanvasCc::CanvasCC::Models
|
2
|
+
class Rubric
|
3
|
+
META_ATTRIBUTES = %i(external_identifier title description read_only
|
4
|
+
reusable public points_possible free_form_criterion_comments)
|
5
|
+
attr_accessor :identifier, :criteria, *META_ATTRIBUTES
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@criteria = []
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module CanvasCc::CanvasCC::Models
|
2
|
+
class RubricCriterion
|
3
|
+
META_ATTRIBUTES = %i(description long_description points mastery_points ignore_for_sorting)
|
4
|
+
attr_accessor :id, :learning_outcome, :ratings, *META_ATTRIBUTES
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@ratings = []
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module CanvasCc::CanvasCC
|
2
|
+
class RubricWriter
|
3
|
+
RUBRICS_FILE = 'rubrics.xml'
|
4
|
+
|
5
|
+
def initialize(work_dir, *rubrics)
|
6
|
+
@work_dir = work_dir
|
7
|
+
@rubrics = rubrics
|
8
|
+
end
|
9
|
+
|
10
|
+
def write
|
11
|
+
xml = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
|
12
|
+
write_rubrics(xml) do |xml|
|
13
|
+
@rubrics.each do |rubric|
|
14
|
+
xml.rubric(identifier: rubric.identifier) do
|
15
|
+
CanvasCc::CanvasCC::Models::Rubric::META_ATTRIBUTES.each do |attr|
|
16
|
+
xml.send(attr, rubric.send(attr)) unless rubric.send(attr).nil?
|
17
|
+
end
|
18
|
+
write_criteria xml, rubric
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end.to_xml
|
23
|
+
File.open(File.join(@work_dir, CanvasCc::CanvasCC::CartridgeCreator::COURSE_SETTINGS_DIR, RUBRICS_FILE), 'w') { |f| f.write(xml) }
|
24
|
+
end
|
25
|
+
|
26
|
+
def write_criteria(xml, rubric)
|
27
|
+
xml.criteria do
|
28
|
+
rubric.criteria.each do |criterion|
|
29
|
+
xml.criterion do
|
30
|
+
xml.criterion_id criterion.id
|
31
|
+
CanvasCc::CanvasCC::Models::RubricCriterion::META_ATTRIBUTES.each do |attr|
|
32
|
+
xml.send(attr, criterion.send(attr)) unless criterion.send(attr).nil?
|
33
|
+
end
|
34
|
+
xml.learning_outcome_identifierref criterion.learning_outcome.identifier if criterion.learning_outcome
|
35
|
+
xml << CanvasCc::CanvasCC::RatingWriter.new(*criterion.ratings).write
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
def write_rubrics(xml)
|
43
|
+
xml.rubrics(
|
44
|
+
'xmlns' => 'http://canvas.instructure.com/xsd/cccv1p0',
|
45
|
+
'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
|
46
|
+
'xsi:schemaLocation' => 'http://canvas.instructure.com/xsd/cccv1p0 http://canvas.instructure.com/xsd/cccv1p0.xsd'
|
47
|
+
) {
|
48
|
+
yield xml
|
49
|
+
}
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/lib/canvas_cc/version.rb
CHANGED
data/lib/canvas_cc.rb
CHANGED
@@ -56,6 +56,7 @@ module CanvasCc
|
|
56
56
|
autoload :CourseSyllabusWriter, 'canvas_cc/canvas_cc/course_syllabus_writer'
|
57
57
|
autoload :OutcomeWriter, 'canvas_cc/canvas_cc/outcome_writer'
|
58
58
|
autoload :RatingWriter, 'canvas_cc/canvas_cc/rating_writer'
|
59
|
+
autoload :RubricWriter, 'canvas_cc/canvas_cc/rubric_writer'
|
59
60
|
|
60
61
|
autoload :QuestionWriter, 'canvas_cc/canvas_cc/question_writer'
|
61
62
|
autoload :CalculatedQuestionWriter, 'canvas_cc/canvas_cc/calculated_question_writer'
|
@@ -101,6 +102,8 @@ module CanvasCc
|
|
101
102
|
autoload :ModuleCompletionRequirement, 'canvas_cc/canvas_cc/models/module_completion_requirement'
|
102
103
|
autoload :Outcome, 'canvas_cc/canvas_cc/models/outcome'
|
103
104
|
autoload :Rating, 'canvas_cc/canvas_cc/models/rating'
|
105
|
+
autoload :Rubric, 'canvas_cc/canvas_cc/models/rubric'
|
106
|
+
autoload :RubricCriterion, 'canvas_cc/canvas_cc/models/rubric_criterion'
|
104
107
|
end
|
105
108
|
end
|
106
109
|
end
|
@@ -22,6 +22,8 @@ module CanvasCc::CanvasCC
|
|
22
22
|
DiscussionWriter.any_instance.stub(:write)
|
23
23
|
AssignmentWriter.any_instance.stub(:write)
|
24
24
|
QuestionBankWriter.any_instance.stub(:write)
|
25
|
+
OutcomeWriter.any_instance.stub(:write)
|
26
|
+
RubricWriter.any_instance.stub(:write)
|
25
27
|
end
|
26
28
|
|
27
29
|
after :each do
|
@@ -29,7 +31,7 @@ module CanvasCc::CanvasCC
|
|
29
31
|
end
|
30
32
|
|
31
33
|
[CanvasExportWriter, CourseSyllabusWriter, CourseSettingWriter, ModuleMetaWriter, ImsManifestGenerator,
|
32
|
-
FileMetaWriter, PageWriter, DiscussionWriter, AssignmentWriter, QuestionBankWriter].each do |klass|
|
34
|
+
FileMetaWriter, PageWriter, DiscussionWriter, AssignmentWriter, QuestionBankWriter, OutcomeWriter, RubricWriter].each do |klass|
|
33
35
|
it "writes #{klass}" do
|
34
36
|
writer_double = double(write: nil)
|
35
37
|
klass.stub(:new).and_return(writer_double)
|
@@ -48,4 +50,4 @@ module CanvasCc::CanvasCC
|
|
48
50
|
end
|
49
51
|
|
50
52
|
end
|
51
|
-
end
|
53
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe CanvasCc::CanvasCC::RubricWriter do
|
4
|
+
let!(:rubric) do
|
5
|
+
rubric = CanvasCc::CanvasCC::Models::Rubric.new
|
6
|
+
rubric.identifier = SecureRandom.hex
|
7
|
+
rubric.title = 'some rubric'
|
8
|
+
rubric
|
9
|
+
end
|
10
|
+
|
11
|
+
let!(:criterion) do
|
12
|
+
criterion = CanvasCc::CanvasCC::Models::RubricCriterion.new
|
13
|
+
criterion.id = SecureRandom.hex
|
14
|
+
criterion.description = 'some criterion'
|
15
|
+
rubric.criteria << criterion
|
16
|
+
criterion
|
17
|
+
end
|
18
|
+
|
19
|
+
let!(:rating) do
|
20
|
+
tmp_rating = CanvasCc::CanvasCC::Models::Rating.new
|
21
|
+
tmp_rating.id = '123'
|
22
|
+
tmp_rating.description = 'a rating'
|
23
|
+
tmp_rating.points = 5
|
24
|
+
tmp_rating.criterion_id = '123'
|
25
|
+
tmp_rating.long_description = 'a longer description'
|
26
|
+
criterion.ratings << tmp_rating
|
27
|
+
tmp_rating
|
28
|
+
end
|
29
|
+
|
30
|
+
let(:tmpdir) { Dir.mktmpdir }
|
31
|
+
|
32
|
+
before :each do
|
33
|
+
Dir.mkdir(File.join(tmpdir, CanvasCc::CanvasCC::CartridgeCreator::COURSE_SETTINGS_DIR))
|
34
|
+
end
|
35
|
+
|
36
|
+
after :each do
|
37
|
+
FileUtils.rm_r tmpdir
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'xml contains the correct schema' do
|
41
|
+
xml = write_xml(rubric)
|
42
|
+
|
43
|
+
valid_schema = File.read(fixture_path(File.join('common_cartridge', 'schema', 'cccv1p0.xsd')))
|
44
|
+
xsd = Nokogiri::XML::Schema(valid_schema)
|
45
|
+
expect(xsd.validate(xml)).to be_truthy
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'writes a rubric' do
|
49
|
+
xml = write_xml(rubric)
|
50
|
+
node = xml.at_xpath('//xmlns:rubrics/xmlns:rubric')
|
51
|
+
expect(node.attr('identifier')).to eql rubric.identifier
|
52
|
+
expect(node.at_xpath('xmlns:title').text).to eql rubric.title
|
53
|
+
criterion_node = node.at_xpath('./xmlns:criteria/xmlns:criterion')
|
54
|
+
expect(criterion_node.at_xpath('xmlns:criterion_id').text).to eql criterion.id
|
55
|
+
expect(criterion_node.at_xpath('xmlns:description').text).to eql criterion.description
|
56
|
+
rating_node = criterion_node.at_xpath('./xmlns:ratings/xmlns:rating')
|
57
|
+
expect(rating_node.at_xpath('xmlns:id').text).to eql rating.id
|
58
|
+
expect(rating_node.at_xpath('xmlns:description').text).to eql rating.description
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
def write_xml(rubric)
|
63
|
+
CanvasCc::CanvasCC::RubricWriter.new(tmpdir, rubric).write
|
64
|
+
path = File.join(tmpdir, CanvasCc::CanvasCC::CartridgeCreator::COURSE_SETTINGS_DIR,
|
65
|
+
CanvasCc::CanvasCC::RubricWriter::RUBRICS_FILE)
|
66
|
+
Nokogiri::XML(File.read(path))
|
67
|
+
end
|
68
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: canvas_cc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.28
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Instructure
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-11-
|
11
|
+
date: 2015-11-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubyzip
|
@@ -290,6 +290,8 @@ files:
|
|
290
290
|
- lib/canvas_cc/canvas_cc/models/range.rb
|
291
291
|
- lib/canvas_cc/canvas_cc/models/rating.rb
|
292
292
|
- lib/canvas_cc/canvas_cc/models/resource.rb
|
293
|
+
- lib/canvas_cc/canvas_cc/models/rubric.rb
|
294
|
+
- lib/canvas_cc/canvas_cc/models/rubric_criterion.rb
|
293
295
|
- lib/canvas_cc/canvas_cc/models/syllabus.rb
|
294
296
|
- lib/canvas_cc/canvas_cc/models/web_content.rb
|
295
297
|
- lib/canvas_cc/canvas_cc/models/web_link.rb
|
@@ -306,6 +308,7 @@ files:
|
|
306
308
|
- lib/canvas_cc/canvas_cc/question_group_writer.rb
|
307
309
|
- lib/canvas_cc/canvas_cc/question_writer.rb
|
308
310
|
- lib/canvas_cc/canvas_cc/rating_writer.rb
|
311
|
+
- lib/canvas_cc/canvas_cc/rubric_writer.rb
|
309
312
|
- lib/canvas_cc/canvas_cc/short_answer_question_writer.rb
|
310
313
|
- lib/canvas_cc/canvas_cc/text_only_question_writer.rb
|
311
314
|
- lib/canvas_cc/canvas_cc/true_false_question_writer.rb
|
@@ -367,6 +370,7 @@ files:
|
|
367
370
|
- spec/moodle2cc/canvas_cc/question_bank_writer_spec.rb
|
368
371
|
- spec/moodle2cc/canvas_cc/question_writer_spec.rb
|
369
372
|
- spec/moodle2cc/canvas_cc/rating_writer_spec.rb
|
373
|
+
- spec/moodle2cc/canvas_cc/rubric_writer_spec.rb
|
370
374
|
- spec/moodle2cc/canvas_cc/short_answer_question_writer_spec.rb
|
371
375
|
- spec/moodle2cc/canvas_cc/text_only_question_writer_spec.rb
|
372
376
|
- spec/moodle2cc/canvas_cc/true_false_question_writer_spec.rb
|
@@ -478,6 +482,7 @@ test_files:
|
|
478
482
|
- spec/moodle2cc/canvas_cc/question_bank_writer_spec.rb
|
479
483
|
- spec/moodle2cc/canvas_cc/question_writer_spec.rb
|
480
484
|
- spec/moodle2cc/canvas_cc/rating_writer_spec.rb
|
485
|
+
- spec/moodle2cc/canvas_cc/rubric_writer_spec.rb
|
481
486
|
- spec/moodle2cc/canvas_cc/short_answer_question_writer_spec.rb
|
482
487
|
- spec/moodle2cc/canvas_cc/text_only_question_writer_spec.rb
|
483
488
|
- spec/moodle2cc/canvas_cc/true_false_question_writer_spec.rb
|