moodle2cc 0.2.6 → 0.2.7
Sign up to get free protection for your applications and to get access to all the features.
- data/Changelog +6 -0
- data/README.md +8 -5
- data/lib/moodle2cc/canvas/question.rb +6 -0
- data/lib/moodle2cc/canvas_cc/models/assessment.rb +24 -0
- data/lib/moodle2cc/canvas_cc/models/assignment.rb +1 -1
- data/lib/moodle2cc/canvas_cc/models/question_bank.rb +16 -1
- data/lib/moodle2cc/moodle2/models/course.rb +2 -1
- data/lib/moodle2cc/moodle2/models/quizzes/question.rb +1 -1
- data/lib/moodle2cc/moodle2/models/section.rb +2 -0
- data/lib/moodle2cc/moodle2/parsers/course_parser.rb +9 -0
- data/lib/moodle2cc/moodle2/parsers/question_parsers/question_parser.rb +1 -0
- data/lib/moodle2cc/moodle2/parsers/section_parser.rb +7 -0
- data/lib/moodle2cc/moodle2converter/assignment_converter.rb +16 -6
- data/lib/moodle2cc/moodle2converter/glossary_converter.rb +2 -1
- data/lib/moodle2cc/moodle2converter/migrator.rb +3 -3
- data/lib/moodle2cc/moodle2converter/question_bank_converter.rb +9 -0
- data/lib/moodle2cc/version.rb +1 -1
- data/spec/moodle2cc/canvas_cc/models/assessment_spec.rb +46 -0
- data/spec/moodle2cc/moodle2/parsers/section_parser_spec.rb +1 -1
- data/spec/moodle2cc/moodle2converter/assignment_converter_spec.rb +15 -2
- data/spec/moodle2cc/moodle2converter/question_bank_converter_spec.rb +17 -0
- metadata +66 -35
- checksums.yaml +0 -7
data/Changelog
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
2014-05-09 Version 0.2.7
|
2
|
+
* Convert File path tokens in questions and answers
|
3
|
+
* Improve assignment gradint_type conversion
|
4
|
+
* Use section summary as title if none exists
|
5
|
+
* Convert random question types into quiz groups
|
6
|
+
|
1
7
|
2014-04-16 Version 0.2.6
|
2
8
|
* Substituting more variables in urls/file paths
|
3
9
|
* Many quiz settings fixes and quiz question improvements
|
data/README.md
CHANGED
@@ -90,11 +90,14 @@ made about these things:
|
|
90
90
|
|
91
91
|
## Todo
|
92
92
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
93
|
+
- [ ] Support exporting to CC 1.3
|
94
|
+
- [ ] Support converting to multiple versions of CC?
|
95
|
+
- [ ] Quiz conversion
|
96
|
+
- [ ] Question Category conversion
|
97
|
+
- [ ] LTI configurations?
|
98
|
+
- [ ] Convert more Moodle features as requested
|
99
|
+
- [ ] Moodle 2 support for standard CC
|
100
|
+
- [x] Moodle 2 support for canvas-flavored CC
|
98
101
|
|
99
102
|
## Contributing
|
100
103
|
|
@@ -118,6 +118,12 @@ module Moodle2CC::Canvas
|
|
118
118
|
material = material.gsub(/\{(.*?)\}/, '[\1]')
|
119
119
|
material = material + image_html(question.image) unless question.image.nil? || question.image.strip == ''
|
120
120
|
material = RDiscount.new(material).to_html if question.format == 4 # markdown
|
121
|
+
material = convert_file_path_tokens(material)
|
122
|
+
if @answers
|
123
|
+
@answers.each do |answer|
|
124
|
+
answer.text = convert_file_path_tokens(answer.text) if answer.text
|
125
|
+
end
|
126
|
+
end
|
121
127
|
@material = material
|
122
128
|
|
123
129
|
if @question_type == 'multiple_dropdowns_question' && !@answers.empty? && @length
|
@@ -46,12 +46,22 @@ module Moodle2CC::CanvasCC::Models
|
|
46
46
|
|
47
47
|
def resolve_question_references!(question_banks)
|
48
48
|
@items ||= []
|
49
|
+
|
50
|
+
# keep track of each time a bank is referenced through a random question reference
|
51
|
+
random_bank_counts = {}
|
52
|
+
|
49
53
|
@question_references.each do |ref|
|
50
54
|
question = nil
|
51
55
|
group = nil
|
52
56
|
question_banks.each do |bank|
|
53
57
|
break if (question = bank.questions.detect{|q| q.original_identifier.to_s == ref[:question]}) ||
|
54
58
|
(group = bank.question_groups.detect{|g| g.identifier.to_s == ref[:question]})
|
59
|
+
|
60
|
+
if bank.random_question_references.any?{|r| r.to_s == ref[:question]}
|
61
|
+
random_bank_counts[bank] ||= 0
|
62
|
+
random_bank_counts[bank] += 1
|
63
|
+
break
|
64
|
+
end
|
55
65
|
end
|
56
66
|
|
57
67
|
if question
|
@@ -68,6 +78,20 @@ module Moodle2CC::CanvasCC::Models
|
|
68
78
|
end
|
69
79
|
end
|
70
80
|
|
81
|
+
random_bank_counts.each do |bank, count|
|
82
|
+
new_group = Moodle2CC::CanvasCC::Models::QuestionGroup.new
|
83
|
+
new_group.identifier = "#{@identifier}#{bank.identifier}_random_group"
|
84
|
+
new_group.selection_number = count
|
85
|
+
|
86
|
+
new_group.questions = bank.questions.map(&:dup)
|
87
|
+
child_banks = bank.find_children_banks(question_banks)
|
88
|
+
child_banks.each do |child|
|
89
|
+
new_group.questions += child.questions.map(&:dup)
|
90
|
+
end
|
91
|
+
|
92
|
+
@items << new_group
|
93
|
+
end
|
94
|
+
|
71
95
|
@items.select{|i| i.is_a?(Moodle2CC::CanvasCC::Models::QuestionGroup)}.each do |group|
|
72
96
|
group.questions.each do |q|
|
73
97
|
@items.delete_if{|i| i.respond_to?(:original_identifier) && i.original_identifier == q.original_identifier}
|
@@ -19,7 +19,7 @@ module Moodle2CC::CanvasCC::Models
|
|
19
19
|
def assignment_resource
|
20
20
|
resource = Moodle2CC::CanvasCC::Models::Resource.new
|
21
21
|
resource.identifier = @identifier
|
22
|
-
resource.href = "#{resource.identifier}/assignment-#{title.downcase.gsub(/\s/, '-')}.html"
|
22
|
+
resource.href = "#{resource.identifier}/assignment-#{CGI::escape(title.downcase.gsub(/\s/, '-'))}.html"
|
23
23
|
resource.type = LAR_TYPE
|
24
24
|
resource.files = [resource.href, "#{resource.identifier}/#{ASSIGNMENT_SETTINGS_FILE}"]
|
25
25
|
|
@@ -1,11 +1,12 @@
|
|
1
1
|
module Moodle2CC::CanvasCC::Models
|
2
2
|
class QuestionBank
|
3
3
|
|
4
|
-
attr_accessor :identifier, :title, :questions, :question_groups
|
4
|
+
attr_accessor :identifier, :title, :questions, :question_groups, :random_question_references, :original_id, :parent_id
|
5
5
|
|
6
6
|
def initialize
|
7
7
|
@questions = []
|
8
8
|
@question_groups = []
|
9
|
+
@random_question_references = []
|
9
10
|
end
|
10
11
|
|
11
12
|
LAR_TYPE = 'associatedcontent/imscc_xmlv1p1/learning-application-resource'
|
@@ -23,5 +24,19 @@ module Moodle2CC::CanvasCC::Models
|
|
23
24
|
resource.files = [resource.href]
|
24
25
|
resource
|
25
26
|
end
|
27
|
+
|
28
|
+
# recursively find all banks that belong to this one
|
29
|
+
def find_children_banks(all_banks, visited_banks=[])
|
30
|
+
visited_banks << self
|
31
|
+
children = []
|
32
|
+
sub_children = []
|
33
|
+
all_banks.each do |bank|
|
34
|
+
children << bank if bank.parent_id && bank.parent_id == self.original_id && !visited_banks.include?(bank)
|
35
|
+
end
|
36
|
+
children.each do |child|
|
37
|
+
sub_children += child.find_children_banks(all_banks, visited_banks)
|
38
|
+
end
|
39
|
+
return children + sub_children
|
40
|
+
end
|
26
41
|
end
|
27
42
|
end
|
@@ -4,7 +4,7 @@ module Moodle2CC::Moodle2::Models
|
|
4
4
|
:course_id, :show_grades, :sections, :files, :pages, :forums, :assignments,
|
5
5
|
:books, :folders, :question_categories, :quizzes, :glossaries,
|
6
6
|
:labels, :resources, :external_urls, :choices, :questionnaires,
|
7
|
-
:feedbacks, :wikis
|
7
|
+
:feedbacks, :wikis, :grading_scales
|
8
8
|
|
9
9
|
def initialize
|
10
10
|
@sections = []
|
@@ -24,6 +24,7 @@ module Moodle2CC::Moodle2::Models
|
|
24
24
|
@resources = []
|
25
25
|
@external_urls = []
|
26
26
|
@wikis = []
|
27
|
+
@grading_scales = {}
|
27
28
|
end
|
28
29
|
|
29
30
|
def activities
|
@@ -3,6 +3,8 @@ module Moodle2CC::Moodle2::Models
|
|
3
3
|
attr_accessor :id, :number, :name, :summary, :summary_format, :sequence, :visible, :available_from, :available_until,
|
4
4
|
:release_code, :show_availability, :grouping_id, :position, :activities
|
5
5
|
|
6
|
+
DEFAULT_NAME = 'Untitled Module'
|
7
|
+
|
6
8
|
def initialize
|
7
9
|
@sequence = []
|
8
10
|
@activities = []
|
@@ -3,6 +3,7 @@ module Moodle2CC::Moodle2::Parsers
|
|
3
3
|
include ParserHelper
|
4
4
|
|
5
5
|
COURSE_XML_PATH = 'course/course.xml'
|
6
|
+
SCALES_XML_PATH = 'scales.xml'
|
6
7
|
|
7
8
|
def initialize(backup_folder)
|
8
9
|
@backup_folder = backup_folder
|
@@ -21,10 +22,18 @@ module Moodle2CC::Moodle2::Parsers
|
|
21
22
|
if unix_start_date = parse_text(course_doc, '/course/startdate')
|
22
23
|
course.startdate = Time.at(unix_start_date.to_i)
|
23
24
|
end
|
25
|
+
end
|
24
26
|
|
27
|
+
File.open(File.join(@backup_folder, SCALES_XML_PATH)) do |f|
|
28
|
+
scales_doc = Nokogiri::XML(f)
|
29
|
+
scales_doc.search('scales_definition/scale').each do |node|
|
30
|
+
course.grading_scales[node.attributes['id'].value.to_i] = parse_text(node, 'scale').split(',')
|
31
|
+
end
|
25
32
|
end
|
33
|
+
|
26
34
|
course
|
27
35
|
end
|
28
36
|
|
37
|
+
|
29
38
|
end
|
30
39
|
end
|
@@ -36,6 +36,13 @@ module Moodle2CC::Moodle2::Parsers
|
|
36
36
|
section.show_availability = parse_text(section_xml, 'section/showavailability')
|
37
37
|
section.grouping_id = parse_text(section_xml, 'section/groupingid')
|
38
38
|
end
|
39
|
+
if section.name.to_s.strip.length == 0
|
40
|
+
section.name = Nokogiri::HTML(section.summary.to_s).text rescue ''
|
41
|
+
if section.name.to_s.strip.length == 0
|
42
|
+
section.name = Moodle2CC::Moodle2::Models::Section::DEFAULT_NAME
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
39
46
|
section
|
40
47
|
end
|
41
48
|
|
@@ -2,7 +2,7 @@ module Moodle2CC::Moodle2Converter
|
|
2
2
|
class AssignmentConverter
|
3
3
|
include ConverterHelper
|
4
4
|
|
5
|
-
def convert(moodle_assignment)
|
5
|
+
def convert(moodle_assignment, moodle_grading_scales)
|
6
6
|
canvas_assignment = Moodle2CC::CanvasCC::Models::Assignment.new
|
7
7
|
canvas_assignment.identifier = generate_unique_identifier_for(moodle_assignment.id, ASSIGNMENT_SUFFIX)
|
8
8
|
canvas_assignment.title = truncate_text(moodle_assignment.name)
|
@@ -11,13 +11,23 @@ module Moodle2CC::Moodle2Converter
|
|
11
11
|
canvas_assignment.lock_at = Time.at(Integer(moodle_assignment.cut_off_date)) if moodle_assignment.cut_off_date
|
12
12
|
canvas_assignment.unlock_at = Time.at(Integer(moodle_assignment.allow_submissions_from_date)) if moodle_assignment.allow_submissions_from_date
|
13
13
|
canvas_assignment.workflow_state = workflow_state(moodle_assignment.visible)
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
14
|
+
points = Integer(moodle_assignment.grade)
|
15
|
+
if points > 0 || scale = moodle_grading_scales[-1 * points] # moodle uses negative numbers for grading scale ids
|
16
|
+
if scale && scale.count == 2
|
17
|
+
# I'm asssuming that if there's only two choices, that the best way to convert it will probably be pass/fail
|
18
|
+
canvas_assignment.grading_type = 'pass_fail'
|
19
|
+
else
|
20
|
+
canvas_assignment.grading_type = 'points'
|
21
|
+
canvas_assignment.points_possible = points
|
22
|
+
end
|
23
|
+
canvas_assignment.submission_types << 'online_text_entry' if moodle_assignment.online_text_submission == '1'
|
24
|
+
canvas_assignment.submission_types << 'online_upload' if moodle_assignment.file_submission == '1'
|
25
|
+
else
|
26
|
+
canvas_assignment.grading_type = 'not_graded'
|
27
|
+
canvas_assignment.submission_types << 'not_graded'
|
28
|
+
end
|
18
29
|
|
19
30
|
canvas_assignment
|
20
31
|
end
|
21
|
-
|
22
32
|
end
|
23
33
|
end
|
@@ -26,7 +26,8 @@ module Moodle2CC::Moodle2Converter
|
|
26
26
|
def generate_body(moodle_glossary)
|
27
27
|
html = "<h2>#{moodle_glossary.name}</h2>"
|
28
28
|
html += '<dl>'
|
29
|
-
moodle_glossary.entries.
|
29
|
+
entries = moodle_glossary.entries.sort_by{|entry| entry.concept.to_s.downcase}
|
30
|
+
entries.each { |entry| html += "<dt>#{entry.concept}</dt><dd>#{entry.definition}</dd>" }
|
30
31
|
html += '</dl>'
|
31
32
|
html
|
32
33
|
end
|
@@ -15,7 +15,7 @@ module Moodle2CC::Moodle2Converter
|
|
15
15
|
cc_course.pages += convert_pages(moodle_course.pages)
|
16
16
|
cc_course.pages += convert_wikis(moodle_course.wikis)
|
17
17
|
cc_course.discussions += convert_discussions(moodle_course.forums)
|
18
|
-
cc_course.assignments += convert_assignments(moodle_course.assignments)
|
18
|
+
cc_course.assignments += convert_assignments(moodle_course.assignments, moodle_course.grading_scales)
|
19
19
|
|
20
20
|
cc_course.mute_assignments! unless moodle_course.show_grades
|
21
21
|
|
@@ -75,9 +75,9 @@ module Moodle2CC::Moodle2Converter
|
|
75
75
|
discussions.map { |discussion| discussion_converter.convert(discussion) }
|
76
76
|
end
|
77
77
|
|
78
|
-
def convert_assignments(assignments)
|
78
|
+
def convert_assignments(assignments, grading_scales)
|
79
79
|
assignment_converter = Moodle2CC::Moodle2Converter::AssignmentConverter.new
|
80
|
-
assignments.map { |assignment| assignment_converter.convert(assignment) }
|
80
|
+
assignments.map { |assignment| assignment_converter.convert(assignment, grading_scales) }
|
81
81
|
end
|
82
82
|
|
83
83
|
def convert_sections_to_pages(sections)
|
@@ -8,8 +8,17 @@ module Moodle2CC::Moodle2Converter
|
|
8
8
|
canvas_bank.identifier = generate_unique_identifier_for(moodle_category.id, QUESTION_BANK_SUFFIX)
|
9
9
|
canvas_bank.title = truncate_text(moodle_category.name)
|
10
10
|
|
11
|
+
canvas_bank.original_id = moodle_category.id
|
12
|
+
canvas_bank.parent_id = moodle_category.parent
|
13
|
+
|
11
14
|
question_converter = Moodle2CC::Moodle2Converter::QuestionConverters::QuestionConverter.new
|
12
15
|
moodle_category.questions.each do |moodle_question|
|
16
|
+
if moodle_question.type == 'random'
|
17
|
+
# collect the question ids of random questions that belong to this bank
|
18
|
+
canvas_bank.random_question_references << moodle_question.id
|
19
|
+
next
|
20
|
+
end
|
21
|
+
|
13
22
|
item = question_converter.convert(moodle_question)
|
14
23
|
case item
|
15
24
|
when Moodle2CC::CanvasCC::Models::Question
|
data/lib/moodle2cc/version.rb
CHANGED
@@ -82,4 +82,50 @@ describe Moodle2CC::CanvasCC::Models::Assessment do
|
|
82
82
|
end
|
83
83
|
|
84
84
|
|
85
|
+
it 'resolves random quesiton references' do
|
86
|
+
subject.question_references = [
|
87
|
+
{:question => 'random1', :grade => '2'},
|
88
|
+
{:question => 'random2', :grade => '3'},
|
89
|
+
{:question => 'random3', :grade => '3'},
|
90
|
+
{:question => 'nonexistent', :grade => '4'}
|
91
|
+
]
|
92
|
+
|
93
|
+
qb1 = Moodle2CC::CanvasCC::Models::QuestionBank.new
|
94
|
+
q1 = Moodle2CC::CanvasCC::Models::Question.new
|
95
|
+
q1.identifier = '1'
|
96
|
+
q2 = Moodle2CC::CanvasCC::Models::Question.new
|
97
|
+
q2.identifier = '2'
|
98
|
+
|
99
|
+
qb1.questions = [q1, q2]
|
100
|
+
qb1.original_id = 'parent'
|
101
|
+
qb1.random_question_references = ['random1', 'random2']
|
102
|
+
|
103
|
+
qb2 = Moodle2CC::CanvasCC::Models::QuestionBank.new
|
104
|
+
q3 = Moodle2CC::CanvasCC::Models::Question.new
|
105
|
+
q3.identifier = '3'
|
106
|
+
qb2.parent_id = 'parent'
|
107
|
+
qb2.questions = [q3]
|
108
|
+
|
109
|
+
qb3 = Moodle2CC::CanvasCC::Models::QuestionBank.new
|
110
|
+
q4 = Moodle2CC::CanvasCC::Models::Question.new
|
111
|
+
q4.identifier = '4'
|
112
|
+
q5 = Moodle2CC::CanvasCC::Models::Question.new
|
113
|
+
q5.identifier = '5'
|
114
|
+
qb3.questions = [q4, q5]
|
115
|
+
qb3.random_question_references = ['random3']
|
116
|
+
|
117
|
+
subject.resolve_question_references!([qb1, qb2, qb3])
|
118
|
+
|
119
|
+
expect(subject.items.count).to eq 2
|
120
|
+
group1 = subject.items[0]
|
121
|
+
expect(group1.class).to eq Moodle2CC::CanvasCC::Models::QuestionGroup
|
122
|
+
expect(group1.selection_number).to eq 2
|
123
|
+
expect(group1.questions.map(&:identifier)).to eq [q1, q2, q3].map(&:identifier)
|
124
|
+
|
125
|
+
group2 = subject.items[1]
|
126
|
+
expect(group2.class).to eq Moodle2CC::CanvasCC::Models::QuestionGroup
|
127
|
+
expect(group2.selection_number).to eq 1
|
128
|
+
expect(group2.questions.map(&:identifier)).to eq qb3.questions.map(&:identifier)
|
129
|
+
end
|
130
|
+
|
85
131
|
end
|
@@ -10,7 +10,7 @@ module Moodle2CC::Moodle2::Parsers
|
|
10
10
|
|
11
11
|
expect(section.position).to eq(0)
|
12
12
|
expect(section.number).to eq('0')
|
13
|
-
expect(section.name).to
|
13
|
+
expect(section.name).to eq('This is the General Summary')
|
14
14
|
expect(section.summary).to eq('<p>This is the General Summary</p>')
|
15
15
|
expect(section.summary_format).to eq('1')
|
16
16
|
expect(section.sequence).to eq(['1', '11'])
|
@@ -15,7 +15,7 @@ describe Moodle2CC::Moodle2Converter::AssignmentConverter do
|
|
15
15
|
moodle_assign.file_submission = '1'
|
16
16
|
moodle_assign.visible = 1
|
17
17
|
|
18
|
-
canvas_assign = subject.convert(moodle_assign)
|
18
|
+
canvas_assign = subject.convert(moodle_assign, {})
|
19
19
|
|
20
20
|
expect(canvas_assign.identifier).to eq 'm2d12c3b616363d9f3088155447732972b_assignment'
|
21
21
|
expect(canvas_assign.title).to eq 'Assignment Name'
|
@@ -24,11 +24,24 @@ describe Moodle2CC::Moodle2Converter::AssignmentConverter do
|
|
24
24
|
expect(canvas_assign.lock_at).to eq Time.parse('Sat, 08 Feb 2014 18:00:00 GMT')
|
25
25
|
expect(canvas_assign.unlock_at).to eq Time.parse('Sat, 08 Feb 2014 01:00:00 GMT')
|
26
26
|
expect(canvas_assign.workflow_state).to eq 'active'
|
27
|
-
expect(canvas_assign.points_possible).to eq
|
27
|
+
expect(canvas_assign.points_possible).to eq 30
|
28
28
|
expect(canvas_assign.grading_type).to eq 'points'
|
29
|
+
end
|
29
30
|
|
31
|
+
it 'converts a not graded moodle2 assignment' do
|
32
|
+
moodle_assign.grade = '0'
|
30
33
|
|
34
|
+
canvas_assign = subject.convert(moodle_assign, {})
|
31
35
|
|
36
|
+
expect(canvas_assign.submission_types).to eq ['not_graded']
|
37
|
+
expect(canvas_assign.grading_type).to eq 'not_graded'
|
32
38
|
end
|
33
39
|
|
40
|
+
it 'converts a moodle2 assignment with a two part grading scale to pass/fail' do
|
41
|
+
moodle_assign.grade = '-500'
|
42
|
+
|
43
|
+
canvas_assign = subject.convert(moodle_assign, {500 => ['complete', 'not complete']})
|
44
|
+
|
45
|
+
expect(canvas_assign.grading_type).to eq 'pass_fail'
|
46
|
+
end
|
34
47
|
end
|
@@ -41,4 +41,21 @@ describe Moodle2CC::Moodle2Converter::QuestionBankConverter do
|
|
41
41
|
expect(canvas_group.questions.detect{|q| q.original_identifier == question1.id}).not_to be_nil
|
42
42
|
expect(canvas_group.questions.detect{|q| q.original_identifier == question2.id}).not_to be_nil
|
43
43
|
end
|
44
|
+
|
45
|
+
it 'retains references to random questions but does not convert them' do
|
46
|
+
question1 = Moodle2CC::Moodle2::Models::Quizzes::Question.create('random')
|
47
|
+
question2 = Moodle2CC::Moodle2::Models::Quizzes::Question.create('random')
|
48
|
+
question1.id = 'blah'
|
49
|
+
question2.id = 'bloo'
|
50
|
+
question3 = Moodle2CC::Moodle2::Models::Quizzes::Question.create('truefalse')
|
51
|
+
question4 = Moodle2CC::Moodle2::Models::Quizzes::Question.create('truefalse')
|
52
|
+
moodle_category.questions = [question1, question2, question3, question4]
|
53
|
+
|
54
|
+
canvas_bank = subject.convert(moodle_category)
|
55
|
+
|
56
|
+
expect(canvas_bank.questions.count).to eq 2
|
57
|
+
expect(canvas_bank.random_question_references.count).to eq 2
|
58
|
+
expect(canvas_bank.random_question_references.detect{|q| q == question1.id}).not_to be_nil
|
59
|
+
expect(canvas_bank.random_question_references.detect{|q| q == question2.id}).not_to be_nil
|
60
|
+
end
|
44
61
|
end
|
metadata
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: moodle2cc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.7
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Christopher Durtschi
|
@@ -10,202 +11,230 @@ authors:
|
|
10
11
|
autorequire:
|
11
12
|
bindir: bin
|
12
13
|
cert_chain: []
|
13
|
-
date: 2014-
|
14
|
+
date: 2014-05-09 00:00:00.000000000 Z
|
14
15
|
dependencies:
|
15
16
|
- !ruby/object:Gem::Dependency
|
16
17
|
name: rubyzip
|
17
18
|
requirement: !ruby/object:Gem::Requirement
|
19
|
+
none: false
|
18
20
|
requirements:
|
19
|
-
- - '>='
|
21
|
+
- - ! '>='
|
20
22
|
- !ruby/object:Gem::Version
|
21
23
|
version: 1.0.0
|
22
24
|
type: :runtime
|
23
25
|
prerelease: false
|
24
26
|
version_requirements: !ruby/object:Gem::Requirement
|
27
|
+
none: false
|
25
28
|
requirements:
|
26
|
-
- - '>='
|
29
|
+
- - ! '>='
|
27
30
|
- !ruby/object:Gem::Version
|
28
31
|
version: 1.0.0
|
29
32
|
- !ruby/object:Gem::Dependency
|
30
33
|
name: happymapper
|
31
34
|
requirement: !ruby/object:Gem::Requirement
|
35
|
+
none: false
|
32
36
|
requirements:
|
33
|
-
- - '>='
|
37
|
+
- - ! '>='
|
34
38
|
- !ruby/object:Gem::Version
|
35
39
|
version: '0'
|
36
40
|
type: :runtime
|
37
41
|
prerelease: false
|
38
42
|
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
none: false
|
39
44
|
requirements:
|
40
|
-
- - '>='
|
45
|
+
- - ! '>='
|
41
46
|
- !ruby/object:Gem::Version
|
42
47
|
version: '0'
|
43
48
|
- !ruby/object:Gem::Dependency
|
44
49
|
name: builder
|
45
50
|
requirement: !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
46
52
|
requirements:
|
47
|
-
- - '>='
|
53
|
+
- - ! '>='
|
48
54
|
- !ruby/object:Gem::Version
|
49
55
|
version: '0'
|
50
56
|
type: :runtime
|
51
57
|
prerelease: false
|
52
58
|
version_requirements: !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
53
60
|
requirements:
|
54
|
-
- - '>='
|
61
|
+
- - ! '>='
|
55
62
|
- !ruby/object:Gem::Version
|
56
63
|
version: '0'
|
57
64
|
- !ruby/object:Gem::Dependency
|
58
65
|
name: thor
|
59
66
|
requirement: !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
60
68
|
requirements:
|
61
|
-
- - '>='
|
69
|
+
- - ! '>='
|
62
70
|
- !ruby/object:Gem::Version
|
63
71
|
version: '0'
|
64
72
|
type: :runtime
|
65
73
|
prerelease: false
|
66
74
|
version_requirements: !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
67
76
|
requirements:
|
68
|
-
- - '>='
|
77
|
+
- - ! '>='
|
69
78
|
- !ruby/object:Gem::Version
|
70
79
|
version: '0'
|
71
80
|
- !ruby/object:Gem::Dependency
|
72
81
|
name: nokogiri
|
73
82
|
requirement: !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
74
84
|
requirements:
|
75
|
-
- - '>='
|
85
|
+
- - ! '>='
|
76
86
|
- !ruby/object:Gem::Version
|
77
87
|
version: '0'
|
78
88
|
type: :runtime
|
79
89
|
prerelease: false
|
80
90
|
version_requirements: !ruby/object:Gem::Requirement
|
91
|
+
none: false
|
81
92
|
requirements:
|
82
|
-
- - '>='
|
93
|
+
- - ! '>='
|
83
94
|
- !ruby/object:Gem::Version
|
84
95
|
version: '0'
|
85
96
|
- !ruby/object:Gem::Dependency
|
86
97
|
name: rdiscount
|
87
98
|
requirement: !ruby/object:Gem::Requirement
|
99
|
+
none: false
|
88
100
|
requirements:
|
89
|
-
- - '>='
|
101
|
+
- - ! '>='
|
90
102
|
- !ruby/object:Gem::Version
|
91
103
|
version: '0'
|
92
104
|
type: :runtime
|
93
105
|
prerelease: false
|
94
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
none: false
|
95
108
|
requirements:
|
96
|
-
- - '>='
|
109
|
+
- - ! '>='
|
97
110
|
- !ruby/object:Gem::Version
|
98
111
|
version: '0'
|
99
112
|
- !ruby/object:Gem::Dependency
|
100
113
|
name: rake
|
101
114
|
requirement: !ruby/object:Gem::Requirement
|
115
|
+
none: false
|
102
116
|
requirements:
|
103
|
-
- - '>='
|
117
|
+
- - ! '>='
|
104
118
|
- !ruby/object:Gem::Version
|
105
119
|
version: '0'
|
106
120
|
type: :development
|
107
121
|
prerelease: false
|
108
122
|
version_requirements: !ruby/object:Gem::Requirement
|
123
|
+
none: false
|
109
124
|
requirements:
|
110
|
-
- - '>='
|
125
|
+
- - ! '>='
|
111
126
|
- !ruby/object:Gem::Version
|
112
127
|
version: '0'
|
113
128
|
- !ruby/object:Gem::Dependency
|
114
129
|
name: minitest
|
115
130
|
requirement: !ruby/object:Gem::Requirement
|
131
|
+
none: false
|
116
132
|
requirements:
|
117
|
-
- - '>='
|
133
|
+
- - ! '>='
|
118
134
|
- !ruby/object:Gem::Version
|
119
135
|
version: '0'
|
120
136
|
type: :development
|
121
137
|
prerelease: false
|
122
138
|
version_requirements: !ruby/object:Gem::Requirement
|
139
|
+
none: false
|
123
140
|
requirements:
|
124
|
-
- - '>='
|
141
|
+
- - ! '>='
|
125
142
|
- !ruby/object:Gem::Version
|
126
143
|
version: '0'
|
127
144
|
- !ruby/object:Gem::Dependency
|
128
145
|
name: rspec
|
129
146
|
requirement: !ruby/object:Gem::Requirement
|
147
|
+
none: false
|
130
148
|
requirements:
|
131
|
-
- - '>='
|
149
|
+
- - ! '>='
|
132
150
|
- !ruby/object:Gem::Version
|
133
151
|
version: '0'
|
134
152
|
type: :development
|
135
153
|
prerelease: false
|
136
154
|
version_requirements: !ruby/object:Gem::Requirement
|
155
|
+
none: false
|
137
156
|
requirements:
|
138
|
-
- - '>='
|
157
|
+
- - ! '>='
|
139
158
|
- !ruby/object:Gem::Version
|
140
159
|
version: '0'
|
141
160
|
- !ruby/object:Gem::Dependency
|
142
161
|
name: guard
|
143
162
|
requirement: !ruby/object:Gem::Requirement
|
163
|
+
none: false
|
144
164
|
requirements:
|
145
|
-
- - '>='
|
165
|
+
- - ! '>='
|
146
166
|
- !ruby/object:Gem::Version
|
147
167
|
version: '0'
|
148
168
|
type: :development
|
149
169
|
prerelease: false
|
150
170
|
version_requirements: !ruby/object:Gem::Requirement
|
171
|
+
none: false
|
151
172
|
requirements:
|
152
|
-
- - '>='
|
173
|
+
- - ! '>='
|
153
174
|
- !ruby/object:Gem::Version
|
154
175
|
version: '0'
|
155
176
|
- !ruby/object:Gem::Dependency
|
156
177
|
name: guard-bundler
|
157
178
|
requirement: !ruby/object:Gem::Requirement
|
179
|
+
none: false
|
158
180
|
requirements:
|
159
|
-
- - '>='
|
181
|
+
- - ! '>='
|
160
182
|
- !ruby/object:Gem::Version
|
161
183
|
version: '0'
|
162
184
|
type: :development
|
163
185
|
prerelease: false
|
164
186
|
version_requirements: !ruby/object:Gem::Requirement
|
187
|
+
none: false
|
165
188
|
requirements:
|
166
|
-
- - '>='
|
189
|
+
- - ! '>='
|
167
190
|
- !ruby/object:Gem::Version
|
168
191
|
version: '0'
|
169
192
|
- !ruby/object:Gem::Dependency
|
170
193
|
name: guard-minitest
|
171
194
|
requirement: !ruby/object:Gem::Requirement
|
195
|
+
none: false
|
172
196
|
requirements:
|
173
|
-
- - '>='
|
197
|
+
- - ! '>='
|
174
198
|
- !ruby/object:Gem::Version
|
175
199
|
version: '0'
|
176
200
|
type: :development
|
177
201
|
prerelease: false
|
178
202
|
version_requirements: !ruby/object:Gem::Requirement
|
203
|
+
none: false
|
179
204
|
requirements:
|
180
|
-
- - '>='
|
205
|
+
- - ! '>='
|
181
206
|
- !ruby/object:Gem::Version
|
182
207
|
version: '0'
|
183
208
|
- !ruby/object:Gem::Dependency
|
184
209
|
name: guard-rspec
|
185
210
|
requirement: !ruby/object:Gem::Requirement
|
211
|
+
none: false
|
186
212
|
requirements:
|
187
|
-
- - '>='
|
213
|
+
- - ! '>='
|
188
214
|
- !ruby/object:Gem::Version
|
189
215
|
version: '0'
|
190
216
|
type: :development
|
191
217
|
prerelease: false
|
192
218
|
version_requirements: !ruby/object:Gem::Requirement
|
219
|
+
none: false
|
193
220
|
requirements:
|
194
|
-
- - '>='
|
221
|
+
- - ! '>='
|
195
222
|
- !ruby/object:Gem::Version
|
196
223
|
version: '0'
|
197
224
|
- !ruby/object:Gem::Dependency
|
198
225
|
name: debugger
|
199
226
|
requirement: !ruby/object:Gem::Requirement
|
227
|
+
none: false
|
200
228
|
requirements:
|
201
|
-
- - '>='
|
229
|
+
- - ! '>='
|
202
230
|
- !ruby/object:Gem::Version
|
203
231
|
version: '0'
|
204
232
|
type: :development
|
205
233
|
prerelease: false
|
206
234
|
version_requirements: !ruby/object:Gem::Requirement
|
235
|
+
none: false
|
207
236
|
requirements:
|
208
|
-
- - '>='
|
237
|
+
- - ! '>='
|
209
238
|
- !ruby/object:Gem::Version
|
210
239
|
version: '0'
|
211
240
|
description: Migrates Moodle backup ZIP to IMS Common Cartridge package
|
@@ -799,26 +828,27 @@ files:
|
|
799
828
|
homepage: https://github.com/instructure/moodle2cc
|
800
829
|
licenses:
|
801
830
|
- AGPLv3
|
802
|
-
metadata: {}
|
803
831
|
post_install_message:
|
804
832
|
rdoc_options: []
|
805
833
|
require_paths:
|
806
834
|
- lib
|
807
835
|
required_ruby_version: !ruby/object:Gem::Requirement
|
836
|
+
none: false
|
808
837
|
requirements:
|
809
|
-
- - '>='
|
838
|
+
- - ! '>='
|
810
839
|
- !ruby/object:Gem::Version
|
811
840
|
version: '0'
|
812
841
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
842
|
+
none: false
|
813
843
|
requirements:
|
814
|
-
- - '>='
|
844
|
+
- - ! '>='
|
815
845
|
- !ruby/object:Gem::Version
|
816
846
|
version: '0'
|
817
847
|
requirements: []
|
818
848
|
rubyforge_project:
|
819
|
-
rubygems_version:
|
849
|
+
rubygems_version: 1.8.23
|
820
850
|
signing_key:
|
821
|
-
specification_version:
|
851
|
+
specification_version: 3
|
822
852
|
summary: Migrates Moodle backup ZIP to IMS Common Cartridge package
|
823
853
|
test_files:
|
824
854
|
- spec/moodle2cc/canvas_cc/assessment_writer_spec.rb
|
@@ -1207,3 +1237,4 @@ test_files:
|
|
1207
1237
|
- test/unit/moodle/question_test.rb
|
1208
1238
|
- test/unit/moodle/section_test.rb
|
1209
1239
|
- test/unit/resource_factory_test.rb
|
1240
|
+
has_rdoc:
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 822f9cffd3b238adb3b971d6bf64a300c520a1fd
|
4
|
-
data.tar.gz: 9da80263ebae391337993e9163650ea8b373a754
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: e9047f2fab33dd05f09cdaa47681f03cedb883f544c355431a0c900ead6f343a7209bbf24c4d74e7d45a1b5d20be7f0d4827e7d7c78ab81d046e8b4351c5400d
|
7
|
-
data.tar.gz: 292b07a59bb7c6bc515039799a5bb37a7b5929c8f9af19d914dcaeccc4493adb6aaa5b50bbbd5e711f9050a6612f954b0de8db22eebc8f502c2252bac276f677
|