common_cartridge 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. checksums.yaml +7 -0
  2. data/lib/common_cartridge.rb +40 -0
  3. data/lib/common_cartridge/elements/lom.rb +60 -0
  4. data/lib/common_cartridge/elements/manifest.rb +24 -0
  5. data/lib/common_cartridge/elements/metadata.rb +12 -0
  6. data/lib/common_cartridge/elements/organizations.rb +42 -0
  7. data/lib/common_cartridge/elements/outcomes.rb +10 -0
  8. data/lib/common_cartridge/elements/outcomes/outcome.rb +15 -0
  9. data/lib/common_cartridge/elements/outcomes/outcome_group.rb +12 -0
  10. data/lib/common_cartridge/elements/outcomes/outcome_root.rb +11 -0
  11. data/lib/common_cartridge/elements/resources.rb +117 -0
  12. data/lib/common_cartridge/elements/resources/assessment.rb +21 -0
  13. data/lib/common_cartridge/elements/resources/assignment.rb +59 -0
  14. data/lib/common_cartridge/elements/resources/attachments.rb +20 -0
  15. data/lib/common_cartridge/elements/resources/page.rb +22 -0
  16. data/lib/common_cartridge/elements/resources/topic.rb +28 -0
  17. data/lib/common_cartridge/elements/resources/web_link.rb +25 -0
  18. data/lib/common_cartridge/package.rb +87 -0
  19. data/lib/common_cartridge/parsers/dependencies.rb +23 -0
  20. data/lib/common_cartridge/parsers/files.rb +34 -0
  21. data/lib/common_cartridge/parsers/items.rb +58 -0
  22. data/lib/common_cartridge/parsers/outcomes.rb +17 -0
  23. data/lib/common_cartridge/parsers/parser.rb +78 -0
  24. data/lib/common_cartridge/parsers/questions.rb +34 -0
  25. data/lib/sax_machine/sax_handler.rb +13 -0
  26. data/spec/elements/lom_spec.rb +66 -0
  27. data/spec/elements/manifest_spec.rb +27 -0
  28. data/spec/elements/metadata_spec.rb +40 -0
  29. data/spec/elements/organizations_spec.rb +51 -0
  30. data/spec/elements/outcomes/outcome_group_spec.rb +29 -0
  31. data/spec/elements/outcomes/outcome_spec.rb +37 -0
  32. data/spec/elements/resources/assignment_spec.rb +53 -0
  33. data/spec/elements/resources/attachments_spec.rb +24 -0
  34. data/spec/elements/resources/resources_spec.rb +73 -0
  35. data/spec/elements/resources/topic_spec.rb +39 -0
  36. data/spec/elements/resources/web_link_spec.rb +31 -0
  37. data/spec/files/canvas_large_1.3.imscc +0 -0
  38. data/spec/files/canvas_small_1.1.corrupt.imscc +0 -0
  39. data/spec/files/canvas_small_1.1.imscc +0 -0
  40. data/spec/package_spec.rb +110 -0
  41. data/spec/parser_spec.rb +13 -0
  42. data/spec/spec_helper.rb +13 -0
  43. metadata +179 -0
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ module CommonCartridge
4
+ module Elements
5
+ module Resources
6
+ describe WebLink do
7
+ before(:all) do
8
+ manifest = CommonCartridge.parse_from_zip('canvas_small_1.1.imscc').manifest
9
+ @resource = manifest.resources.detect { |r| r.identifier =~ /I_00005_R/ }
10
+ end
11
+
12
+ it "is parsed correctly" do
13
+ expect(@resource.files.first.content).to be_kind_of(CommonCartridge::Elements::Resources::WebLink)
14
+ end
15
+
16
+ it "has a title" do
17
+ expect(@resource.files.first.content.title).to eq("Wikipedia - Your Mom")
18
+ end
19
+
20
+ it "has a href" do
21
+ expect(@resource.files.first.content.href).to eq("http://en.wikipedia.org/wiki/Maternal_insult")
22
+ end
23
+
24
+ it "has a target" do
25
+ expect(@resource.files.first.content.target).to eq("_self")
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+
Binary file
Binary file
@@ -0,0 +1,110 @@
1
+ require 'spec_helper'
2
+
3
+ module CommonCartridge
4
+ describe Package do
5
+ before(:all) do
6
+ @package = CommonCartridge.parse_from_zip('canvas_large_1.3.imscc')
7
+ end
8
+
9
+ describe "#find_resource" do
10
+ it "finds a resource by identifier" do
11
+ resource = @package.find_resource('i4874e552ee3da37b383af53dd9429827_syllabus')
12
+ expect(resource).to be_kind_of(CommonCartridge::Elements::Resources::Resource)
13
+ expect(resource.identifier).to eq('i4874e552ee3da37b383af53dd9429827_syllabus')
14
+ expect(resource.files.size).to be(1)
15
+ end
16
+
17
+ it "returns nil if no resource is found" do
18
+ resource = @package.find_resource('NONEXISTENT')
19
+ expect(resource).to be_nil
20
+ end
21
+
22
+ context "#modules" do
23
+ it "returns all modules in the course" do
24
+ modules = {'i224aa0e52b019dbf9aeece014df883c7' => 'Example Course Module', 'ibbc4f845ea3211abdd01b7d296a1e835' => 'Example, Locked Module'}
25
+
26
+ expect(@package.modules.size).to be(2)
27
+ @package.modules.each do |mod|
28
+ expect(modules).to have_key(mod.identifier)
29
+ expect(modules[mod.identifier]).to eq(mod.title)
30
+ end
31
+ end
32
+ end
33
+
34
+ context "#announcements" do
35
+ it "returns all announcements in a course" do
36
+ announcements = {"i528c2ce0186a758d13a9bd193bd88611"=>"Include Replies in Podcast Feed Announcement Example",
37
+ "ic5879f637e17f2e475484297bc1b843d"=>"Enable Podcast Feed Example Announcements",
38
+ "i1686b8be7bc843860fa51754ce47164a"=>"Basic Announcement",
39
+ "i852220027877f9c75a980885d566e950"=>"Users Must Post Before Seeing Replies Announcement"}
40
+
41
+ expect(@package.announcements.size).to be(4)
42
+ @package.announcements.each do |announcement|
43
+ expect(announcements).to have_key(announcement.identifier)
44
+ expect(announcements[announcement.identifier]).to eq(announcement.title)
45
+ end
46
+ end
47
+ end
48
+
49
+ context "#discussions" do
50
+ it "returns all discussions in the course" do
51
+ discussions = {"idf59303d98482bfce1042d7960b0dd08"=>"unpublished discussion",
52
+ "ic7f740de8643c0d8bdbb099edddf5c3b"=>"Closed for Comment Discussion",
53
+ "i45f927e81657f719963b4d5182ce7b87"=>"Graded Discussion",
54
+ "i049a4e1050a9ae9112d552c4bb1d927d"=>"Enable Podcast Feed Discussion",
55
+ "ia4977b4ba7e0b86ddbd48ce8808a108b"=>"Users Must Post Before Seeing Replies",
56
+ "i8f219f74f06e31465d76b8d53f1c15ce"=>"Include Replies in Podcast Feed Discussion",
57
+ "i658f87ccf2a665a190f7b684ba8a5d17"=>"Graded Group Discussion Example",
58
+ "i1a45b26146cf73c8530c039f1c5a6576"=>"Graded Group Discussion, Assign Grades to Each Student Individually",
59
+ "id82f5aee12aac6c03677da3baac04590"=>"Graded Discussion with Manually Assigned Peer Reviews",
60
+ "ifac8262aac5c07e2fd1425c21c2ec4db"=>"Graded Discussion with Automatically Assigned Peer Reviews",
61
+ "ib6df2d84b4dd1cdf6cec87fc54678b37"=>"Threaded Discussion",
62
+ "ie896adbc712bb119c4e9a1a673f8a673"=>"Non-Threaded Discussion",
63
+ "i9a5d38abe47ccfaf18da6727564f0d28"=>"Pinned Discussion"}
64
+
65
+ expect(@package.discussions.size).to be(13)
66
+ @package.discussions.each do |discussion|
67
+ expect(discussions).to have_key(discussion.identifier)
68
+ expect(discussions[discussion.identifier]).to eq(discussion.title)
69
+ end
70
+ end
71
+ end
72
+
73
+ context "#pages" do
74
+ it "returns all pages in the course" do
75
+ expect(@package.pages.size).to be(2)
76
+ expect(@package.pages.first.title).to eq("Front Page")
77
+ expect(@package.pages.last.title).to eq("Page hidden from Students")
78
+ end
79
+ end
80
+
81
+ context "#quizzes" do
82
+ it "returns all quizzes in the course" do
83
+ quizzes = {"i7d40ddafe1510b13e094faf1d8aede61"=>"50 Q's straight up tf and mc",
84
+ "iae800568e436f2368f690a2a87aa92e8"=>"Access code is \"Canvas\" Access Code Example",
85
+ "i92556d03cef1a20c975b43115011059f"=>"All Question Types with text only (should be 11)",
86
+ "ib9091a8b64585d919f2397719bf860c3"=>"Graded Anonymous Survey Example",
87
+ "i86bbc04ca52991f32dc0f9f041b147e9"=>"Graded Survey Example",
88
+ "iddbfdaac01dadef8fc889dc39ecb9830"=>"Hide Quiz Answers Quiz Example",
89
+ "i1dee4ce6a2ea508cbad5bca6bb9cdb8f"=>"MC, TF, MA, Essay, FITB 5 q's",
90
+ "i581ee685674f4a8c9231bd228a92976a"=>"Multiple Attempt Quiz",
91
+ "i3876e257310e19864b49172a2544bf56"=>"One Question At A Time, Can't Go Back Example",
92
+ "iad7e264143b9f2ec9dbc71a9d166f6f2"=>"One Question at a time Quiz Example",
93
+ "i18ee2ad283ef16acf172480ad0e3e514"=>"Practice Quiz Example",
94
+ "i13b04e02dbb103ae804043c7139d925f"=>"Shuffled Answers Quiz Example",
95
+ "iec0216ba5240b3b895d1f707dc03be0b"=>"Time Limit Quiz Example",
96
+ "i569b45ac1ff7388a1416381bc670488b"=>"Ungraded Anonymous Survey Example",
97
+ "i7a94069ff8e623310830263a426aed7f"=>"Ungraded Survey Example",
98
+ "i4a339a8425a8a073409188ac7ef5a097"=>"Unnamed Quiz",
99
+ "ie970b28994395e4ae82d86c22633708d"=>"Unpublished Quiz Example"}
100
+
101
+ expect(@package.quizzes.size).to be(17)
102
+ @package.quizzes.each do |quiz|
103
+ expect(quizzes).to have_key(quiz.identifier)
104
+ expect(quizzes[quiz.identifier]).to eq(quiz.title)
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ module CommonCartridge
4
+ describe Parsers::Parser do
5
+ describe ".parse_from_zip" do
6
+ it "parses a Common CommonCartridge zip successfully" do
7
+ package = CommonCartridge.parse_from_zip("canvas_small_1.1.imscc")
8
+ expect(package).to be_kind_of(CommonCartridge::Package)
9
+ expect(package.manifest).to be_kind_of(CommonCartridge::Elements::Manifest)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require 'bundler/setup'
2
+ Bundler.setup
3
+
4
+ require 'common_cartridge'
5
+
6
+ CommonCartridge.configure do |c|
7
+ c.import_directory = File.join(Dir.pwd, 'spec', 'files')
8
+ end
9
+
10
+ RSpec.configure do |config|
11
+ config.order = :random
12
+ Kernel.srand config.seed
13
+ end
metadata ADDED
@@ -0,0 +1,179 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: common_cartridge
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Josh Simpson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-03-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: sax-machine
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.2.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.2.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: rubyzip
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 1.1.6
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: '1.1'
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: 1.1.6
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '1.1'
47
+ - !ruby/object:Gem::Dependency
48
+ name: bundler
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '1.5'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '1.5'
61
+ - !ruby/object:Gem::Dependency
62
+ name: rake
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '10.3'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '10.3'
75
+ - !ruby/object:Gem::Dependency
76
+ name: rspec
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '3.0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '3.0'
89
+ description: Parse IMS Common Cartridge packages
90
+ email:
91
+ - jsimpson@instructure.com
92
+ executables: []
93
+ extensions: []
94
+ extra_rdoc_files: []
95
+ files:
96
+ - lib/common_cartridge.rb
97
+ - lib/common_cartridge/elements/lom.rb
98
+ - lib/common_cartridge/elements/manifest.rb
99
+ - lib/common_cartridge/elements/metadata.rb
100
+ - lib/common_cartridge/elements/organizations.rb
101
+ - lib/common_cartridge/elements/outcomes.rb
102
+ - lib/common_cartridge/elements/outcomes/outcome.rb
103
+ - lib/common_cartridge/elements/outcomes/outcome_group.rb
104
+ - lib/common_cartridge/elements/outcomes/outcome_root.rb
105
+ - lib/common_cartridge/elements/resources.rb
106
+ - lib/common_cartridge/elements/resources/assessment.rb
107
+ - lib/common_cartridge/elements/resources/assignment.rb
108
+ - lib/common_cartridge/elements/resources/attachments.rb
109
+ - lib/common_cartridge/elements/resources/page.rb
110
+ - lib/common_cartridge/elements/resources/topic.rb
111
+ - lib/common_cartridge/elements/resources/web_link.rb
112
+ - lib/common_cartridge/package.rb
113
+ - lib/common_cartridge/parsers/dependencies.rb
114
+ - lib/common_cartridge/parsers/files.rb
115
+ - lib/common_cartridge/parsers/items.rb
116
+ - lib/common_cartridge/parsers/outcomes.rb
117
+ - lib/common_cartridge/parsers/parser.rb
118
+ - lib/common_cartridge/parsers/questions.rb
119
+ - lib/sax_machine/sax_handler.rb
120
+ - spec/elements/lom_spec.rb
121
+ - spec/elements/manifest_spec.rb
122
+ - spec/elements/metadata_spec.rb
123
+ - spec/elements/organizations_spec.rb
124
+ - spec/elements/outcomes/outcome_group_spec.rb
125
+ - spec/elements/outcomes/outcome_spec.rb
126
+ - spec/elements/resources/assignment_spec.rb
127
+ - spec/elements/resources/attachments_spec.rb
128
+ - spec/elements/resources/resources_spec.rb
129
+ - spec/elements/resources/topic_spec.rb
130
+ - spec/elements/resources/web_link_spec.rb
131
+ - spec/files/canvas_large_1.3.imscc
132
+ - spec/files/canvas_small_1.1.corrupt.imscc
133
+ - spec/files/canvas_small_1.1.imscc
134
+ - spec/package_spec.rb
135
+ - spec/parser_spec.rb
136
+ - spec/spec_helper.rb
137
+ homepage: http://www.instructure.com/
138
+ licenses:
139
+ - MIT
140
+ metadata: {}
141
+ post_install_message:
142
+ rdoc_options: []
143
+ require_paths:
144
+ - lib
145
+ required_ruby_version: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ required_rubygems_version: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ version: '0'
155
+ requirements: []
156
+ rubyforge_project:
157
+ rubygems_version: 2.4.4
158
+ signing_key:
159
+ specification_version: 4
160
+ summary: CommonCartridge
161
+ test_files:
162
+ - spec/elements/lom_spec.rb
163
+ - spec/elements/manifest_spec.rb
164
+ - spec/elements/metadata_spec.rb
165
+ - spec/elements/organizations_spec.rb
166
+ - spec/elements/outcomes/outcome_group_spec.rb
167
+ - spec/elements/outcomes/outcome_spec.rb
168
+ - spec/elements/resources/assignment_spec.rb
169
+ - spec/elements/resources/attachments_spec.rb
170
+ - spec/elements/resources/resources_spec.rb
171
+ - spec/elements/resources/topic_spec.rb
172
+ - spec/elements/resources/web_link_spec.rb
173
+ - spec/files/canvas_large_1.3.imscc
174
+ - spec/files/canvas_small_1.1.corrupt.imscc
175
+ - spec/files/canvas_small_1.1.imscc
176
+ - spec/package_spec.rb
177
+ - spec/parser_spec.rb
178
+ - spec/spec_helper.rb
179
+ has_rdoc: