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 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
- * Support exporting to CC 1.2
94
- * Quiz conversion
95
- * Question Category conversion
96
- * LTI configurations?
97
- * Convert more Moodle features as requested
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,7 +3,7 @@ module Moodle2CC::Moodle2::Models::Quizzes
3
3
 
4
4
  @@subclasses = {}
5
5
 
6
- STANDARD_TYPES = ['description', 'essay', 'shortanswer']
6
+ STANDARD_TYPES = ['description', 'essay', 'random', 'shortanswer']
7
7
 
8
8
  def self.create(type)
9
9
  if c = @@subclasses[type]
@@ -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
@@ -20,6 +20,7 @@ module Moodle2CC::Moodle2
20
20
  # simple question types
21
21
  register_parser_type('description')
22
22
  register_parser_type('essay')
23
+ register_parser_type('random')
23
24
 
24
25
  def parse_question(node, question_type = nil)
25
26
  begin
@@ -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
- canvas_assignment.points_possible = moodle_assignment.grade
15
- canvas_assignment.grading_type = 'points'
16
- canvas_assignment.submission_types << 'online_text_entry' if moodle_assignment.online_text_submission == '1'
17
- canvas_assignment.submission_types << 'online_upload' if moodle_assignment.file_submission == '1'
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.each { |entry| html += "<dt>#{entry.concept}</dt><dd>#{entry.definition}</dd>" }
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
@@ -1,3 +1,3 @@
1
1
  module Moodle2CC
2
- VERSION = "0.2.6"
2
+ VERSION = "0.2.7"
3
3
  end
@@ -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 be_nil
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 '30'
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.6
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-04-28 00:00:00.000000000 Z
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: 2.0.3
849
+ rubygems_version: 1.8.23
820
850
  signing_key:
821
- specification_version: 4
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