moodle2cc 0.2.28 → 0.2.29

Sign up to get free protection for your applications and to get access to all the features.
Files changed (30) hide show
  1. checksums.yaml +5 -13
  2. data/Changelog +4 -0
  3. data/lib/moodle2cc/moodle2/extractor.rb +7 -0
  4. data/lib/moodle2cc/moodle2/models.rb +1 -0
  5. data/lib/moodle2cc/moodle2/models/course.rb +3 -2
  6. data/lib/moodle2cc/moodle2/models/lti.rb +5 -0
  7. data/lib/moodle2cc/moodle2/models/section.rb +0 -2
  8. data/lib/moodle2cc/moodle2/parsers.rb +1 -0
  9. data/lib/moodle2cc/moodle2/parsers/lti_parser.rb +35 -0
  10. data/lib/moodle2cc/moodle2/parsers/section_parser.rb +1 -4
  11. data/lib/moodle2cc/moodle2converter/converter_helper.rb +3 -1
  12. data/lib/moodle2cc/moodle2converter/section_converter.rb +21 -0
  13. data/lib/moodle2cc/version.rb +1 -1
  14. data/moodle2cc.gemspec +1 -1
  15. data/spec/moodle2cc/moodle2/extractor_spec.rb +8 -0
  16. data/spec/moodle2cc/moodle2/models/course_spec.rb +1 -0
  17. data/spec/moodle2cc/moodle2/models/forum_spec.rb +1 -1
  18. data/spec/moodle2cc/moodle2/parsers/forum_parser_spec.rb +1 -1
  19. data/spec/moodle2cc/moodle2/parsers/lti_parser_spec.rb +21 -0
  20. data/spec/moodle2cc/moodle2converter/section_converter_spec.rb +42 -1
  21. data/test/fixtures/moodle2/backup/activities/lti_78841/calendar.xml +3 -0
  22. data/test/fixtures/moodle2/backup/activities/lti_78841/filters.xml +7 -0
  23. data/test/fixtures/moodle2/backup/activities/lti_78841/grade_history.xml +5 -0
  24. data/test/fixtures/moodle2/backup/activities/lti_78841/grades.xml +7 -0
  25. data/test/fixtures/moodle2/backup/activities/lti_78841/inforef.xml +3 -0
  26. data/test/fixtures/moodle2/backup/activities/lti_78841/lti.xml +26 -0
  27. data/test/fixtures/moodle2/backup/activities/lti_78841/module.xml +20 -0
  28. data/test/fixtures/moodle2/backup/activities/lti_78841/roles.xml +7 -0
  29. data/test/fixtures/moodle2/backup/moodle_backup.xml +8 -1
  30. metadata +56 -36
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- ZDgzMGY2MjI2OGU3YmM4NDI5Mzg5MTRkNGYwMzM5OGU4YWU5MzBiNw==
5
- data.tar.gz: !binary |-
6
- MzVhYjExMjAwODM0OTVkMjg0MTdmYTY1Njc0ZTI0ZWE0ZTFlZmYxMw==
2
+ SHA1:
3
+ metadata.gz: 7852ac0df4ec637ac21c82e50fb3af7d95913e4c
4
+ data.tar.gz: 2b7a0055cf75bea08fa84003241f84566c114ed1
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- OTQ1MjhmYzI5NWE3NGFjYWVlZWY5NWI1NmEwZGYyNzJmMjQwOTNlYzUxZWFj
10
- NzJjOTI2MjM2ZjE2MTNlOWE1N2UxMmQxNTRiM2QwODU2MzlhYTc3MzBiZjlh
11
- N2U2MTQ5ZTFhYTBhMGU3YWMwMzVkMDE2MjI5MmFjNzU1YWIwNzA=
12
- data.tar.gz: !binary |-
13
- MjgyZDZlM2M4NGM1YWE5YmVjMjg5MDQ5Nzg5NDE1N2M4ZmYzNjMzZDlhY2Iy
14
- ZmUyZDQwMTc5YzFhZTQyNWMxMWZiOTU0Njg1MDY3ZGNhMzYzZTM2MzNjYjA4
15
- NzQzY2M4ZjJmZWZmMDRlMWJiNDc1NmViNzNmNjk3ZWFhZGE3YTg=
6
+ metadata.gz: bbe007fcd42be598446394ec1b9baaddfd60289902420ba88033ded9cd9f0fdc3f793fdf0267c3fdb12ad06914db534363eb101b46f538b3927ded578b1b9eaa
7
+ data.tar.gz: ce26098ed8fae34f62e09935ee6dc12aafcb728c118ac58369698ee9a1c79f29b4d259011a5e61865cd67049fc22da67fbfb0fbcddff56c821f3bea613738f06
data/Changelog CHANGED
@@ -1,3 +1,7 @@
1
+ 2016-03-16 Version 0.2.29
2
+ * Imports LTI links as Canvas External Tool module items
3
+ * Uses the first section label as a module name if needed
4
+
1
5
  2015-11-18 Version 0.2.28
2
6
  * Fixes module item reference resolution caused by 0.2.26
3
7
  * Also distinguishes Announcement type discussion topics
@@ -45,6 +45,7 @@ module Moodle2CC::Moodle2
45
45
  parse_labels(work_dir, course)
46
46
  parse_external_urls(work_dir, course)
47
47
  parse_resources(work_dir, course)
48
+ parse_lti_links(work_dir, course)
48
49
  collect_files_for_resources(course)
49
50
  collect_activities_for_sections(course.sections, course.activities)
50
51
  course
@@ -171,6 +172,12 @@ module Moodle2CC::Moodle2
171
172
  end
172
173
  end
173
174
 
175
+ def parse_lti_links(work_dir, course)
176
+ if lti_links = Parsers::LtiParser.new(work_dir).parse
177
+ course.lti_links = lti_links
178
+ end
179
+ end
180
+
174
181
  def collect_files_for_resources(course)
175
182
  files_hash = {}
176
183
  course.files.each{ |file| files_hash[file.id] = file }
@@ -18,4 +18,5 @@ module Moodle2CC::Moodle2::Models
18
18
  require_relative 'models/questionnaire'
19
19
  require_relative 'models/resource'
20
20
  require_relative 'models/wiki'
21
+ require_relative 'models/lti'
21
22
  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, :grading_scales, :missing_files
7
+ :feedbacks, :wikis, :grading_scales, :missing_files, :lti_links
8
8
 
9
9
  def initialize
10
10
  @sections = []
@@ -26,11 +26,12 @@ module Moodle2CC::Moodle2::Models
26
26
  @external_urls = []
27
27
  @wikis = []
28
28
  @grading_scales = {}
29
+ @lti_links = []
29
30
  end
30
31
 
31
32
  def activities
32
33
  pages + forums + assignments + books + folders + quizzes + labels + resources + glossaries +
33
- external_urls + choices + questionnaires + feedbacks + wikis
34
+ external_urls + choices + questionnaires + feedbacks + wikis + lti_links
34
35
  end
35
36
 
36
37
  end
@@ -0,0 +1,5 @@
1
+ module Moodle2CC::Moodle2::Models
2
+ class Lti
3
+ attr_accessor :id, :module_id, :name, :url, :visible
4
+ end
5
+ end
@@ -3,8 +3,6 @@ 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
-
8
6
  def initialize
9
7
  @sequence = []
10
8
  @activities = []
@@ -20,4 +20,5 @@ module Moodle2CC::Moodle2::Parsers
20
20
  require_relative 'parsers/external_url_parser'
21
21
  require_relative 'parsers/resource_parser'
22
22
  require_relative 'parsers/wiki_parser'
23
+ require_relative 'parsers/lti_parser'
23
24
  end
@@ -0,0 +1,35 @@
1
+ module Moodle2CC::Moodle2
2
+ class Parsers::LtiParser
3
+ include Parsers::ParserHelper
4
+
5
+ LTI_XML = 'lti.xml'
6
+ LTI_MODULE_NAME = 'lti'
7
+
8
+ def initialize(backup_dir)
9
+ @backup_dir = backup_dir
10
+ end
11
+
12
+ def parse
13
+ activity_dirs = activity_directories(@backup_dir, LTI_MODULE_NAME)
14
+ activity_dirs.map { |dir| parse_lti(dir) }
15
+ end
16
+
17
+ private
18
+
19
+ def parse_lti(dir)
20
+ lti = Models::Lti.new
21
+ activity_dir = File.join(@backup_dir, dir)
22
+ File.open(File.join(activity_dir, LTI_XML)) do |f|
23
+ lti_xml = Nokogiri::XML(f)
24
+ lti.id = lti_xml.at_xpath('/activity/lti/@id').value
25
+ lti.module_id = lti_xml.at_xpath('/activity/@moduleid').value
26
+ lti.name = parse_text(lti_xml, '/activity/lti/name')
27
+ lti.url = parse_text(lti_xml, '/activity/lti/toolurl')
28
+ end
29
+ parse_module(activity_dir, lti)
30
+ lti
31
+ end
32
+
33
+
34
+ end
35
+ end
@@ -37,10 +37,7 @@ module Moodle2CC::Moodle2::Parsers
37
37
  section.grouping_id = parse_text(section_xml, 'section/groupingid')
38
38
  end
39
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
40
+ section.name = Nokogiri::HTML(section.summary.to_s).text.to_s.strip rescue ''
44
41
  end
45
42
 
46
43
  section
@@ -17,6 +17,7 @@ module Moodle2CC
17
17
  GLOSSARY_SUFFIX = '_glossary'
18
18
  SUMMARY_PAGE_SUFFIX = '_summary_page'
19
19
  EXTERNAL_URL_SUFFIX = '_external_url'
20
+ LTI_SUFFIX = '_lti'
20
21
 
21
22
  ACTIVITY_LOOKUP = {
22
23
  Moodle2::Models::Page => {suffix: PAGE_SUFFIX, content_type: CanvasCC::Models::ModuleItem::CONTENT_TYPE_WIKI_PAGE},
@@ -33,7 +34,8 @@ module Moodle2CC
33
34
  Moodle2::Models::Label => {suffix: nil, content_type: CanvasCC::Models::ModuleItem::CONTENT_TYPE_CONTEXT_MODULE_SUB_HEADER},
34
35
  Moodle2::Models::Glossary => {suffix: GLOSSARY_SUFFIX, content_type: CanvasCC::Models::ModuleItem::CONTENT_TYPE_WIKI_PAGE},
35
36
  Moodle2::Models::ExternalUrl => {suffix: EXTERNAL_URL_SUFFIX, content_type: CanvasCC::Models::ModuleItem::CONTENT_TYPE_EXTERNAL_URL},
36
- Moodle2::Models::Resource => {suffix: nil, content_type: CanvasCC::Models::ModuleItem::CONTENT_TYPE_ATTACHMENT}
37
+ Moodle2::Models::Resource => {suffix: nil, content_type: CanvasCC::Models::ModuleItem::CONTENT_TYPE_ATTACHMENT},
38
+ Moodle2::Models::Lti => {suffix: LTI_SUFFIX, content_type: CanvasCC::Models::ModuleItem::CONTENT_TYPE_CONTEXT_EXTERNAL_TOOL}
37
39
  }
38
40
 
39
41
  MAX_TITLE_LENGTH = 250
@@ -7,6 +7,8 @@ module Moodle2CC
7
7
  Moodle2::Models::Label => Moodle2Converter::LabelConverter,
8
8
  }
9
9
 
10
+ DEFAULT_NAME = 'Untitled Module'
11
+
10
12
  def initialize
11
13
  @converters ={}
12
14
  end
@@ -21,6 +23,8 @@ module Moodle2CC
21
23
  canvas_module.module_items += moodle_section.activities.map { |a| convert_activity(a) }
22
24
  canvas_module.module_items = canvas_module.module_items.flatten.compact
23
25
 
26
+ handle_untitled_module!(canvas_module)
27
+
24
28
  canvas_module
25
29
  end
26
30
 
@@ -53,6 +57,9 @@ module Moodle2CC
53
57
  module_item.url = moodle_activity.external_url.gsub(/\s/, '%20')
54
58
  elsif moodle_activity.is_a? Moodle2::Models::Resource
55
59
  module_item.identifierref = moodle_activity.file.content_hash if moodle_activity.file
60
+ elsif moodle_activity.is_a? Moodle2::Models::Lti
61
+ module_item.identifierref = module_item.identifier
62
+ module_item.url = moodle_activity.url.gsub(/\s/, '%20')
56
63
  else
57
64
  module_item.identifierref = get_unique_identifier_for_activity(moodle_activity)
58
65
  end
@@ -70,5 +77,19 @@ module Moodle2CC
70
77
  ACTIVITY_CONVERTERS[moodle_activity.class] ? ACTIVITY_CONVERTERS[moodle_activity.class].new : self
71
78
  end
72
79
 
80
+ # If a module has no title, but its first item is a subheader, promote that to the title
81
+ # (per example package provided by a customer)
82
+ def handle_untitled_module!(canvas_module)
83
+ if canvas_module.title.nil? || canvas_module.title.empty?
84
+ if canvas_module.module_items.any? &&
85
+ canvas_module.module_items.first.is_a?(CanvasCC::Models::ModuleItem) &&
86
+ canvas_module.module_items.first.content_type == 'ContextModuleSubHeader'
87
+ canvas_module.title = canvas_module.module_items.shift.title
88
+ else
89
+ canvas_module.title = DEFAULT_NAME
90
+ end
91
+ end
92
+ end
93
+
73
94
  end
74
95
  end
@@ -1,3 +1,3 @@
1
1
  module Moodle2CC
2
- VERSION = "0.2.28"
2
+ VERSION = "0.2.29"
3
3
  end
data/moodle2cc.gemspec CHANGED
@@ -23,7 +23,7 @@ Gem::Specification.new do |gem|
23
23
  gem.add_development_dependency "guard-bundler"
24
24
  gem.add_development_dependency "guard-minitest"
25
25
  gem.add_development_dependency "guard-rspec"
26
- gem.add_development_dependency "debugger"
26
+ gem.add_development_dependency "byebug"
27
27
 
28
28
 
29
29
  gem.files = `git ls-files`.split($\)
@@ -25,6 +25,7 @@ module Moodle2CC::Moodle2
25
25
  Parsers::LabelParser.any_instance.stub(:parse)
26
26
  Parsers::ExternalUrlParser.any_instance.stub(:parse)
27
27
  Parsers::ResourceParser.any_instance.stub(:parse)
28
+ Parsers::LtiParser.any_instance.stub(:parse)
28
29
  Zip::File.stub(:open).and_yield([])
29
30
  end
30
31
 
@@ -203,5 +204,12 @@ module Moodle2CC::Moodle2
203
204
  extractor.extract {}
204
205
  expect(course.resources).to eq [resource]
205
206
  end
207
+
208
+ it 'parses lti links' do
209
+ resource = Models::Lti.new
210
+ Parsers::LtiParser.any_instance.stub(:parse).and_return([resource])
211
+ extractor.extract {}
212
+ expect(course.lti_links).to eq [resource]
213
+ end
206
214
  end
207
215
  end
@@ -15,6 +15,7 @@ module Moodle2CC::Moodle2::Models
15
15
  it_behaves_like 'it has an attribute for', :labels, []
16
16
  it_behaves_like 'it has an attribute for', :external_urls, []
17
17
  it_behaves_like 'it has an attribute for', :resources, []
18
+ it_behaves_like 'it has an attribute for', :lti_links, []
18
19
 
19
20
  describe '#activities' do
20
21
  it 'collects pages' do
@@ -14,7 +14,7 @@ describe Moodle2CC::Moodle2::Models::Forum do
14
14
  it_behaves_like 'it has an attribute for', :scale
15
15
  it_behaves_like 'it has an attribute for', :max_bytes
16
16
  it_behaves_like 'it has an attribute for', :max_attachments
17
- it_behaves_like 'it has an attribute for', :force_subsscribe
17
+ it_behaves_like 'it has an attribute for', :force_subscribe
18
18
  it_behaves_like 'it has an attribute for', :tracking_type
19
19
  it_behaves_like 'it has an attribute for', :rss_type
20
20
  it_behaves_like 'it has an attribute for', :rss_articles
@@ -19,7 +19,7 @@ describe Moodle2CC::Moodle2::Parsers::ForumParser do
19
19
  expect(forum.scale).to eq '1'
20
20
  expect(forum.max_bytes).to eq '0'
21
21
  expect(forum.max_attachments).to eq '1'
22
- expect(forum.force_subsscribe).to eq '1'
22
+ expect(forum.force_subscribe).to eq true
23
23
  expect(forum.tracking_type).to eq '1'
24
24
  expect(forum.rss_type).to eq '0'
25
25
  expect(forum.rss_articles).to eq '0'
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ module Moodle2CC::Moodle2::Parsers
4
+ describe LtiParser do
5
+
6
+ subject { LtiParser.new(fixture_path(File.join('moodle2', 'backup'))) }
7
+
8
+ it 'parses lti links' do
9
+ lti_links = subject.parse
10
+ expect(lti_links.count).to eq(1)
11
+
12
+ lti_link = lti_links.first
13
+ expect(lti_link.module_id).to eq('78841')
14
+ expect(lti_link.id).to eq('47236')
15
+ expect(lti_link.name).to eq('eTeacher Guide')
16
+ expect(lti_link.url).to eq('https://lti.flvsgl.com/tool.php?id=11&launch=educator_psychology1_v14_gs_guide/index.htm')
17
+ expect(lti_link.visible).to eq false
18
+ end
19
+
20
+ end
21
+ end
@@ -151,7 +151,7 @@ module Moodle2CC
151
151
  expect(module_item.indent).to eq '0'
152
152
  end
153
153
 
154
- it 'converts a moodle external url to a external url module item' do
154
+ it 'converts a moodle resource to a file module item' do
155
155
  moodle_resource = Moodle2::Models::Resource.new
156
156
  moodle_file = Moodle2::Models::Moodle2File.new
157
157
  moodle_file.content_hash = 'some_id'
@@ -165,6 +165,47 @@ module Moodle2CC
165
165
  expect(module_item.identifierref).to eq 'some_id'
166
166
  end
167
167
 
168
+ it 'converts a moodle LTI item to an external tool module item' do
169
+ subject.stub(:generate_unique_identifier) { 'some_random_id' }
170
+
171
+ moodle_lti = Moodle2::Models::Lti.new
172
+ moodle_lti.id = 1
173
+ moodle_lti.name = 'Whatever'
174
+ moodle_lti.url = 'http://whatever.invalid'
175
+ moodle_lti.visible = false
176
+
177
+ module_items = subject.convert_to_module_items(moodle_lti)
178
+ expect(module_items.size).to eq 1
179
+
180
+ expect(module_items[0].identifier).to eq 'some_random_id'
181
+ expect(module_items[0].workflow_state).to eq 'unpublished'
182
+ expect(module_items[0].title).to eq 'Whatever'
183
+ expect(module_items[0].identifierref).to eq 'some_random_id'
184
+ expect(module_items[0].content_type).to eq 'ContextExternalTool'
185
+ expect(module_items[0].url).to eq 'http://whatever.invalid'
186
+ expect(module_items[0].indent).to eq '0'
187
+ end
188
+
189
+ it 'infers a default name for an untitled section' do
190
+ moodle_section.id = 'section_id'
191
+ moodle_section.name = ''
192
+ canvas_module = subject.convert(moodle_section)
193
+ expect(canvas_module.title).to eq('Untitled Module')
194
+ end
195
+
196
+ it 'uses the first label as a title if needed' do
197
+ moodle_section.id = 'section_id'
198
+ moodle_section.name = ''
199
+ label = Moodle2::Models::Label.new
200
+ label.module_id = 'section_id'
201
+ label.id = 'label_id'
202
+ label.name = 'blah'
203
+ moodle_section.activities << label
204
+ canvas_module = subject.convert(moodle_section)
205
+ expect(canvas_module.title).to eq 'blah'
206
+ expect(canvas_module.module_items).to be_empty
207
+ end
208
+
168
209
  end
169
210
  end
170
211
  end
@@ -0,0 +1,3 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <events>
3
+ </events>
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <filters>
3
+ <filter_actives>
4
+ </filter_actives>
5
+ <filter_configs>
6
+ </filter_configs>
7
+ </filters>
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <grade_history>
3
+ <grade_grades>
4
+ </grade_grades>
5
+ </grade_history>
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <activity_gradebook>
3
+ <grade_items>
4
+ </grade_items>
5
+ <grade_letters>
6
+ </grade_letters>
7
+ </activity_gradebook>
@@ -0,0 +1,3 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <inforef>
3
+ </inforef>
@@ -0,0 +1,26 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <activity id="47236" moduleid="78841" modulename="lti" contextid="82672">
3
+ <lti id="47236">
4
+ <name>eTeacher Guide</name>
5
+ <intro></intro>
6
+ <introformat>1</introformat>
7
+ <timecreated>1375814377</timecreated>
8
+ <timemodified>1375968182</timemodified>
9
+ <typeid>0</typeid>
10
+ <toolurl>https://lti.flvsgl.com/tool.php?id=11&amp;launch=educator_psychology1_v14_gs_guide/index.htm</toolurl>
11
+ <securetoolurl></securetoolurl>
12
+ <launchcontainer>1</launchcontainer>
13
+ <instructorchoicesendname>$@NULL@$</instructorchoicesendname>
14
+ <instructorchoicesendemailaddr>$@NULL@$</instructorchoicesendemailaddr>
15
+ <instructorchoiceacceptgrades>$@NULL@$</instructorchoiceacceptgrades>
16
+ <instructorchoiceallowroster>$@NULL@$</instructorchoiceallowroster>
17
+ <instructorchoiceallowsetting>$@NULL@$</instructorchoiceallowsetting>
18
+ <grade>100</grade>
19
+ <instructorcustomparameters></instructorcustomparameters>
20
+ <debuglaunch>0</debuglaunch>
21
+ <showtitlelaunch>0</showtitlelaunch>
22
+ <showdescriptionlaunch>0</showdescriptionlaunch>
23
+ <icon></icon>
24
+ <secureicon></secureicon>
25
+ </lti>
26
+ </activity>
@@ -0,0 +1,20 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <module id="78841" version="2014111000">
3
+ <modulename>lti</modulename>
4
+ <sectionid>3443</sectionid>
5
+ <sectionnumber>0</sectionnumber>
6
+ <idnumber></idnumber>
7
+ <added>1375814377</added>
8
+ <score>0</score>
9
+ <indent>0</indent>
10
+ <visible>0</visible>
11
+ <visibleold>1</visibleold>
12
+ <groupmode>0</groupmode>
13
+ <groupingid>0</groupingid>
14
+ <completion>0</completion>
15
+ <completiongradeitemnumber>$@NULL@$</completiongradeitemnumber>
16
+ <completionview>0</completionview>
17
+ <completionexpected>0</completionexpected>
18
+ <availability>$@NULL@$</availability>
19
+ <showdescription>0</showdescription>
20
+ </module>
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <roles>
3
+ <role_overrides>
4
+ </role_overrides>
5
+ <role_assignments>
6
+ </role_assignments>
7
+ </roles>
@@ -169,6 +169,13 @@
169
169
  <title>Hidden Assignmnet</title>
170
170
  <directory>activities/assignment_42</directory>
171
171
  </activity>
172
+ <activity>
173
+ <moduleid>78841</moduleid>
174
+ <sectionid>3443</sectionid>
175
+ <modulename>lti</modulename>
176
+ <title>eTeacher Guide</title>
177
+ <directory>activities/lti_78841</directory>
178
+ </activity>
172
179
  </activities>
173
180
  <sections>
174
181
  <section>
@@ -562,4 +569,4 @@
562
569
  </setting>
563
570
  </settings>
564
571
  </information>
565
- </moodle_backup>
572
+ </moodle_backup>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: moodle2cc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.28
4
+ version: 0.2.29
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christopher Durtschi
@@ -10,202 +10,202 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-11-18 00:00:00.000000000 Z
13
+ date: 2016-03-16 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rubyzip
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
- - - ! '>='
19
+ - - ">="
20
20
  - !ruby/object:Gem::Version
21
21
  version: 1.0.0
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
- - - ! '>='
26
+ - - ">="
27
27
  - !ruby/object:Gem::Version
28
28
  version: 1.0.0
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: instructure-happymapper
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
- - - ~>
33
+ - - "~>"
34
34
  - !ruby/object:Gem::Version
35
35
  version: 0.5.10
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
- - - ~>
40
+ - - "~>"
41
41
  - !ruby/object:Gem::Version
42
42
  version: 0.5.10
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: builder
45
45
  requirement: !ruby/object:Gem::Requirement
46
46
  requirements:
47
- - - ! '>='
47
+ - - ">="
48
48
  - !ruby/object:Gem::Version
49
49
  version: '0'
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
- - - ! '>='
54
+ - - ">="
55
55
  - !ruby/object:Gem::Version
56
56
  version: '0'
57
57
  - !ruby/object:Gem::Dependency
58
58
  name: thor
59
59
  requirement: !ruby/object:Gem::Requirement
60
60
  requirements:
61
- - - ! '>='
61
+ - - ">="
62
62
  - !ruby/object:Gem::Version
63
63
  version: '0'
64
64
  type: :runtime
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
67
67
  requirements:
68
- - - ! '>='
68
+ - - ">="
69
69
  - !ruby/object:Gem::Version
70
70
  version: '0'
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: nokogiri
73
73
  requirement: !ruby/object:Gem::Requirement
74
74
  requirements:
75
- - - ! '>='
75
+ - - ">="
76
76
  - !ruby/object:Gem::Version
77
77
  version: '0'
78
78
  type: :runtime
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
- - - ! '>='
82
+ - - ">="
83
83
  - !ruby/object:Gem::Version
84
84
  version: '0'
85
85
  - !ruby/object:Gem::Dependency
86
86
  name: rdiscount
87
87
  requirement: !ruby/object:Gem::Requirement
88
88
  requirements:
89
- - - ! '>='
89
+ - - ">="
90
90
  - !ruby/object:Gem::Version
91
91
  version: '0'
92
92
  type: :runtime
93
93
  prerelease: false
94
94
  version_requirements: !ruby/object:Gem::Requirement
95
95
  requirements:
96
- - - ! '>='
96
+ - - ">="
97
97
  - !ruby/object:Gem::Version
98
98
  version: '0'
99
99
  - !ruby/object:Gem::Dependency
100
100
  name: rake
101
101
  requirement: !ruby/object:Gem::Requirement
102
102
  requirements:
103
- - - ! '>='
103
+ - - ">="
104
104
  - !ruby/object:Gem::Version
105
105
  version: '0'
106
106
  type: :development
107
107
  prerelease: false
108
108
  version_requirements: !ruby/object:Gem::Requirement
109
109
  requirements:
110
- - - ! '>='
110
+ - - ">="
111
111
  - !ruby/object:Gem::Version
112
112
  version: '0'
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: minitest
115
115
  requirement: !ruby/object:Gem::Requirement
116
116
  requirements:
117
- - - ! '>='
117
+ - - ">="
118
118
  - !ruby/object:Gem::Version
119
119
  version: '0'
120
120
  type: :development
121
121
  prerelease: false
122
122
  version_requirements: !ruby/object:Gem::Requirement
123
123
  requirements:
124
- - - ! '>='
124
+ - - ">="
125
125
  - !ruby/object:Gem::Version
126
126
  version: '0'
127
127
  - !ruby/object:Gem::Dependency
128
128
  name: rspec
129
129
  requirement: !ruby/object:Gem::Requirement
130
130
  requirements:
131
- - - ~>
131
+ - - "~>"
132
132
  - !ruby/object:Gem::Version
133
133
  version: '2'
134
134
  type: :development
135
135
  prerelease: false
136
136
  version_requirements: !ruby/object:Gem::Requirement
137
137
  requirements:
138
- - - ~>
138
+ - - "~>"
139
139
  - !ruby/object:Gem::Version
140
140
  version: '2'
141
141
  - !ruby/object:Gem::Dependency
142
142
  name: guard
143
143
  requirement: !ruby/object:Gem::Requirement
144
144
  requirements:
145
- - - ! '>='
145
+ - - ">="
146
146
  - !ruby/object:Gem::Version
147
147
  version: '0'
148
148
  type: :development
149
149
  prerelease: false
150
150
  version_requirements: !ruby/object:Gem::Requirement
151
151
  requirements:
152
- - - ! '>='
152
+ - - ">="
153
153
  - !ruby/object:Gem::Version
154
154
  version: '0'
155
155
  - !ruby/object:Gem::Dependency
156
156
  name: guard-bundler
157
157
  requirement: !ruby/object:Gem::Requirement
158
158
  requirements:
159
- - - ! '>='
159
+ - - ">="
160
160
  - !ruby/object:Gem::Version
161
161
  version: '0'
162
162
  type: :development
163
163
  prerelease: false
164
164
  version_requirements: !ruby/object:Gem::Requirement
165
165
  requirements:
166
- - - ! '>='
166
+ - - ">="
167
167
  - !ruby/object:Gem::Version
168
168
  version: '0'
169
169
  - !ruby/object:Gem::Dependency
170
170
  name: guard-minitest
171
171
  requirement: !ruby/object:Gem::Requirement
172
172
  requirements:
173
- - - ! '>='
173
+ - - ">="
174
174
  - !ruby/object:Gem::Version
175
175
  version: '0'
176
176
  type: :development
177
177
  prerelease: false
178
178
  version_requirements: !ruby/object:Gem::Requirement
179
179
  requirements:
180
- - - ! '>='
180
+ - - ">="
181
181
  - !ruby/object:Gem::Version
182
182
  version: '0'
183
183
  - !ruby/object:Gem::Dependency
184
184
  name: guard-rspec
185
185
  requirement: !ruby/object:Gem::Requirement
186
186
  requirements:
187
- - - ! '>='
187
+ - - ">="
188
188
  - !ruby/object:Gem::Version
189
189
  version: '0'
190
190
  type: :development
191
191
  prerelease: false
192
192
  version_requirements: !ruby/object:Gem::Requirement
193
193
  requirements:
194
- - - ! '>='
194
+ - - ">="
195
195
  - !ruby/object:Gem::Version
196
196
  version: '0'
197
197
  - !ruby/object:Gem::Dependency
198
- name: debugger
198
+ name: byebug
199
199
  requirement: !ruby/object:Gem::Requirement
200
200
  requirements:
201
- - - ! '>='
201
+ - - ">="
202
202
  - !ruby/object:Gem::Version
203
203
  version: '0'
204
204
  type: :development
205
205
  prerelease: false
206
206
  version_requirements: !ruby/object:Gem::Requirement
207
207
  requirements:
208
- - - ! '>='
208
+ - - ">="
209
209
  - !ruby/object:Gem::Version
210
210
  version: '0'
211
211
  description: Migrates Moodle backup ZIP to IMS Common Cartridge package
@@ -218,8 +218,8 @@ executables:
218
218
  extensions: []
219
219
  extra_rdoc_files: []
220
220
  files:
221
- - .gitignore
222
- - .travis.yml
221
+ - ".gitignore"
222
+ - ".travis.yml"
223
223
  - Changelog
224
224
  - Gemfile
225
225
  - Guardfile
@@ -331,6 +331,7 @@ files:
331
331
  - lib/moodle2cc/moodle2/models/glossary.rb
332
332
  - lib/moodle2cc/moodle2/models/glossary_entry.rb
333
333
  - lib/moodle2cc/moodle2/models/label.rb
334
+ - lib/moodle2cc/moodle2/models/lti.rb
334
335
  - lib/moodle2cc/moodle2/models/moodle2_file.rb
335
336
  - lib/moodle2cc/moodle2/models/page.rb
336
337
  - lib/moodle2cc/moodle2/models/questionnaire.rb
@@ -362,6 +363,7 @@ files:
362
363
  - lib/moodle2cc/moodle2/parsers/forum_parser.rb
363
364
  - lib/moodle2cc/moodle2/parsers/glossary_parser.rb
364
365
  - lib/moodle2cc/moodle2/parsers/label_parser.rb
366
+ - lib/moodle2cc/moodle2/parsers/lti_parser.rb
365
367
  - lib/moodle2cc/moodle2/parsers/page_parser.rb
366
368
  - lib/moodle2cc/moodle2/parsers/parser_helper.rb
367
369
  - lib/moodle2cc/moodle2/parsers/question_category_parser.rb
@@ -483,6 +485,7 @@ files:
483
485
  - spec/moodle2cc/moodle2/parsers/forum_parser_spec.rb
484
486
  - spec/moodle2cc/moodle2/parsers/glossary_parser_spec.rb
485
487
  - spec/moodle2cc/moodle2/parsers/label_parser_spec.rb
488
+ - spec/moodle2cc/moodle2/parsers/lti_parser_spec.rb
486
489
  - spec/moodle2cc/moodle2/parsers/page_parser_spec.rb
487
490
  - spec/moodle2cc/moodle2/parsers/parser_helper_spec.rb
488
491
  - spec/moodle2cc/moodle2/parsers/question_category_parser_spec.rb
@@ -641,6 +644,14 @@ files:
641
644
  - test/fixtures/moodle2/backup/activities/label_11/label.xml
642
645
  - test/fixtures/moodle2/backup/activities/label_11/module.xml
643
646
  - test/fixtures/moodle2/backup/activities/label_11/roles.xml
647
+ - test/fixtures/moodle2/backup/activities/lti_78841/calendar.xml
648
+ - test/fixtures/moodle2/backup/activities/lti_78841/filters.xml
649
+ - test/fixtures/moodle2/backup/activities/lti_78841/grade_history.xml
650
+ - test/fixtures/moodle2/backup/activities/lti_78841/grades.xml
651
+ - test/fixtures/moodle2/backup/activities/lti_78841/inforef.xml
652
+ - test/fixtures/moodle2/backup/activities/lti_78841/lti.xml
653
+ - test/fixtures/moodle2/backup/activities/lti_78841/module.xml
654
+ - test/fixtures/moodle2/backup/activities/lti_78841/roles.xml
644
655
  - test/fixtures/moodle2/backup/activities/page_10/calendar.xml
645
656
  - test/fixtures/moodle2/backup/activities/page_10/comments.xml
646
657
  - test/fixtures/moodle2/backup/activities/page_10/completion.xml
@@ -822,17 +833,17 @@ require_paths:
822
833
  - lib
823
834
  required_ruby_version: !ruby/object:Gem::Requirement
824
835
  requirements:
825
- - - ! '>='
836
+ - - ">="
826
837
  - !ruby/object:Gem::Version
827
838
  version: '0'
828
839
  required_rubygems_version: !ruby/object:Gem::Requirement
829
840
  requirements:
830
- - - ! '>='
841
+ - - ">="
831
842
  - !ruby/object:Gem::Version
832
843
  version: '0'
833
844
  requirements: []
834
845
  rubyforge_project:
835
- rubygems_version: 2.4.5
846
+ rubygems_version: 2.4.7
836
847
  signing_key:
837
848
  specification_version: 4
838
849
  summary: Migrates Moodle backup ZIP to IMS Common Cartridge package
@@ -910,6 +921,7 @@ test_files:
910
921
  - spec/moodle2cc/moodle2/parsers/forum_parser_spec.rb
911
922
  - spec/moodle2cc/moodle2/parsers/glossary_parser_spec.rb
912
923
  - spec/moodle2cc/moodle2/parsers/label_parser_spec.rb
924
+ - spec/moodle2cc/moodle2/parsers/lti_parser_spec.rb
913
925
  - spec/moodle2cc/moodle2/parsers/page_parser_spec.rb
914
926
  - spec/moodle2cc/moodle2/parsers/parser_helper_spec.rb
915
927
  - spec/moodle2cc/moodle2/parsers/question_category_parser_spec.rb
@@ -1068,6 +1080,14 @@ test_files:
1068
1080
  - test/fixtures/moodle2/backup/activities/label_11/label.xml
1069
1081
  - test/fixtures/moodle2/backup/activities/label_11/module.xml
1070
1082
  - test/fixtures/moodle2/backup/activities/label_11/roles.xml
1083
+ - test/fixtures/moodle2/backup/activities/lti_78841/calendar.xml
1084
+ - test/fixtures/moodle2/backup/activities/lti_78841/filters.xml
1085
+ - test/fixtures/moodle2/backup/activities/lti_78841/grade_history.xml
1086
+ - test/fixtures/moodle2/backup/activities/lti_78841/grades.xml
1087
+ - test/fixtures/moodle2/backup/activities/lti_78841/inforef.xml
1088
+ - test/fixtures/moodle2/backup/activities/lti_78841/lti.xml
1089
+ - test/fixtures/moodle2/backup/activities/lti_78841/module.xml
1090
+ - test/fixtures/moodle2/backup/activities/lti_78841/roles.xml
1071
1091
  - test/fixtures/moodle2/backup/activities/page_10/calendar.xml
1072
1092
  - test/fixtures/moodle2/backup/activities/page_10/comments.xml
1073
1093
  - test/fixtures/moodle2/backup/activities/page_10/completion.xml