canvas_cc 0.0.27 → 0.0.28
Sign up to get free protection for your applications and to get access to all the features.
- 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
|