strongmind_multi_version_common_cartridge 1.0.5 → 1.2.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.
- checksums.yaml +4 -4
- data/Gemfile +3 -0
- data/README.md +15 -0
- data/lib/multi_version_common_cartridge/cartridge.rb +13 -1
- data/lib/multi_version_common_cartridge/elements/canvas/assignment.rb +31 -0
- data/lib/multi_version_common_cartridge/elements/canvas/course_settings.rb +109 -0
- data/lib/multi_version_common_cartridge/elements/canvas/topic_meta.rb +24 -0
- data/lib/multi_version_common_cartridge/elements/topic.rb +24 -0
- data/lib/multi_version_common_cartridge/resources/canvas_course_settings.rb +1 -1
- data/lib/multi_version_common_cartridge/resources/canvas_topic.rb +7 -0
- data/lib/multi_version_common_cartridge/resources/resource.rb +4 -0
- data/lib/multi_version_common_cartridge/resources/topic.rb +11 -0
- data/lib/multi_version_common_cartridge/version.rb +1 -1
- data/lib/multi_version_common_cartridge/writers/canvas_assignment_writer.rb +1 -1
- data/lib/multi_version_common_cartridge/writers/canvas_course_settings_writer.rb +26 -13
- data/lib/multi_version_common_cartridge/writers/canvas_topic_writer.rb +100 -0
- data/lib/multi_version_common_cartridge/writers/factory.rb +4 -0
- data/lib/multi_version_common_cartridge/writers/resource_writer.rb +7 -0
- data/lib/multi_version_common_cartridge/writers/topic_writer.rb +53 -0
- data/lib/multi_version_common_cartridge/xml_definitions.rb +4 -2
- data/lib/multi_version_common_cartridge.rb +10 -2
- data/multi_version_common_cartridge.gemspec +2 -2
- metadata +17 -11
- data/lib/multi_version_common_cartridge/resources/canvas_elements/assignment.rb +0 -33
- data/lib/multi_version_common_cartridge/resources/canvas_elements/course_settings.rb +0 -111
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 955f7d3c504958926e11a9639d77e205edfe99d87bb499b8ea61e2b0e785dcb2
|
4
|
+
data.tar.gz: 2a7b52794daac6c12acf7d270362e56b0823875ab4bca7ddf56eb9615b1d2585
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f70662377342fa7ba28571840c3094451f6922ae1e761af367212a94b1f156cc576409e1d71433ba6404279193a4c59f827281860f69d94fb8e7c968fb1219da
|
7
|
+
data.tar.gz: c33ed8aa4c72b4b0489b6bef970d7a8ed5c0066a03a8cb8e598449cf0634876ab58e12bb4dc3cadd99c91e2274b8e609b0c0b1eb4ddf0f73f1b155721ec9748e
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -3,8 +3,23 @@ A gem for writing different versions of Common Cartridges.
|
|
3
3
|
|
4
4
|
It supports Common Cartridge version 1.1, 1.2, 1.3 and Thin CC version 1.2 and 1.3.
|
5
5
|
|
6
|
+
## Installation
|
7
|
+
[Ruby Gems](https://rubygems.org/gems/strongmind_multi_version_common_cartridge)
|
8
|
+
|
9
|
+
Gemfile:
|
10
|
+
``` ruby
|
11
|
+
gem 'strongmind_multi_version_common_cartridge', '~> 1.0', '>= 1.0.5'
|
12
|
+
```
|
13
|
+
|
14
|
+
Direct Install:
|
15
|
+
``` ruby
|
16
|
+
gem install strongmind_multi_version_common_cartridge
|
17
|
+
```
|
18
|
+
|
6
19
|
## Usage
|
7
20
|
``` ruby
|
21
|
+
require 'multi_version_common_cartridge'
|
22
|
+
|
8
23
|
# Create a Common Cartridge
|
9
24
|
cartridge = MultiVersionCommonCartridge::Cartridge.new
|
10
25
|
cartridge.manifest.set_title('My cartridge')
|
@@ -45,7 +45,7 @@ module MultiVersionCommonCartridge
|
|
45
45
|
end
|
46
46
|
|
47
47
|
def all_resources
|
48
|
-
@all_resources ||=
|
48
|
+
@all_resources ||= get_resources
|
49
49
|
end
|
50
50
|
|
51
51
|
private def child_items(item, memo)
|
@@ -54,5 +54,17 @@ module MultiVersionCommonCartridge
|
|
54
54
|
child_items(child, memo)
|
55
55
|
end
|
56
56
|
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def get_resources
|
61
|
+
all_resources = all_items.flat_map do |item|
|
62
|
+
next if item.resource.nil?
|
63
|
+
|
64
|
+
item.resource.dependencies.insert(0, item.resource)
|
65
|
+
end
|
66
|
+
|
67
|
+
all_resources.compact + @resources
|
68
|
+
end
|
57
69
|
end
|
58
70
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module MultiVersionCommonCartridge
|
2
|
+
module Elements
|
3
|
+
module Canvas
|
4
|
+
|
5
|
+
class Assignment
|
6
|
+
include SAXMachine
|
7
|
+
|
8
|
+
attribute :xmlns
|
9
|
+
attribute 'xmlns:xsi', as: :xmlns_xsi
|
10
|
+
attribute :identifier, as: :identifier
|
11
|
+
|
12
|
+
element 'title', as: :title
|
13
|
+
element 'assignment_group_identifierref', as: :assignment_group_identifierref
|
14
|
+
element 'points_possible', as: :points_possible
|
15
|
+
element 'max_attempts', as: :max_attempts
|
16
|
+
element 'allowed_attempts', as: :allowed_attempts
|
17
|
+
element 'is_end_of_module_exam', as: :is_end_of_module_exam
|
18
|
+
element 'grading_type', as: :grading_type
|
19
|
+
element 'submission_types', as: :submission_types
|
20
|
+
element 'peer_review_count', as: :peer_review_count
|
21
|
+
element 'external_tool_url', as: :external_tool_url
|
22
|
+
|
23
|
+
def self.type
|
24
|
+
:canvas_assignment
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.pattern; end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
module MultiVersionCommonCartridge
|
2
|
+
module Elements
|
3
|
+
module Canvas
|
4
|
+
|
5
|
+
class CourseSettings
|
6
|
+
include SAXMachine
|
7
|
+
|
8
|
+
attribute :identifier
|
9
|
+
|
10
|
+
attribute :xmlns
|
11
|
+
attribute 'xmlns:xsi', as: :xmlns_xsi
|
12
|
+
|
13
|
+
element 'image_url', as: :image_url
|
14
|
+
element 'group_weighting_scheme', as: :group_weighting_scheme
|
15
|
+
|
16
|
+
def self.type
|
17
|
+
:course_settings
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.pattern; end
|
21
|
+
end
|
22
|
+
|
23
|
+
class AssignmentGroup
|
24
|
+
include SAXMachine
|
25
|
+
|
26
|
+
attribute :identifier
|
27
|
+
|
28
|
+
element 'title', as: :title
|
29
|
+
element 'position', as: :position
|
30
|
+
element 'group_weight', as: :group_weight
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
class AssignmentGroups
|
35
|
+
include SAXMachine
|
36
|
+
|
37
|
+
attribute :xmlns
|
38
|
+
attribute 'xmlns:xsi', as: :xmlns_xsi
|
39
|
+
|
40
|
+
elements 'assignmentGroup', class: AssignmentGroup, as: :groups
|
41
|
+
end
|
42
|
+
|
43
|
+
class Prerequisite
|
44
|
+
include SAXMachine
|
45
|
+
attribute :type
|
46
|
+
element :title
|
47
|
+
element :identifierref
|
48
|
+
end
|
49
|
+
|
50
|
+
class Prerequisites
|
51
|
+
include SAXMachine
|
52
|
+
|
53
|
+
elements :prerequisite, as: :prerequisites, class: Prerequisite
|
54
|
+
end
|
55
|
+
|
56
|
+
class Item
|
57
|
+
include SAXMachine
|
58
|
+
attribute :identifier, as: :identifier
|
59
|
+
element :title
|
60
|
+
element :workflow_state
|
61
|
+
element :content_type
|
62
|
+
element :identifierref
|
63
|
+
element :url
|
64
|
+
element :position
|
65
|
+
element :indent
|
66
|
+
element :global_identifierref
|
67
|
+
end
|
68
|
+
|
69
|
+
class Items
|
70
|
+
include SAXMachine
|
71
|
+
|
72
|
+
elements :item, as: :items, class: Item
|
73
|
+
end
|
74
|
+
|
75
|
+
class CompletionRequirement
|
76
|
+
include SAXMachine
|
77
|
+
attribute :type
|
78
|
+
element :identifierref
|
79
|
+
end
|
80
|
+
|
81
|
+
class CompletionRequirements
|
82
|
+
include SAXMachine
|
83
|
+
|
84
|
+
elements :completionRequirement, as: :completion_requirements, class: CompletionRequirement
|
85
|
+
end
|
86
|
+
|
87
|
+
class Module
|
88
|
+
include SAXMachine
|
89
|
+
attribute :identifier
|
90
|
+
element :title
|
91
|
+
element :workflow_state
|
92
|
+
element :position
|
93
|
+
element :require_sequential_progress
|
94
|
+
element :requirement_count
|
95
|
+
element :prerequisites, as: :root_prerequisites, class: Prerequisites
|
96
|
+
element :items, as: :root_items, class: Items
|
97
|
+
element :completionRequirements, as: :root_requirements, class: CompletionRequirements
|
98
|
+
end
|
99
|
+
|
100
|
+
class Modules
|
101
|
+
include SAXMachine
|
102
|
+
|
103
|
+
attribute :xmlns
|
104
|
+
attribute 'xmlns:xsi', as: :xmlns_xsi
|
105
|
+
elements :module, as: :modules, class: Module
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module MultiVersionCommonCartridge
|
2
|
+
module Elements
|
3
|
+
module Canvas
|
4
|
+
class TopicMeta
|
5
|
+
include SAXMachine
|
6
|
+
|
7
|
+
attribute :xmlns
|
8
|
+
attribute 'xmlns:xsi', as: :xmlns_xsi
|
9
|
+
attribute :identifier, as: :identifier
|
10
|
+
|
11
|
+
element :topic_id
|
12
|
+
element :title
|
13
|
+
|
14
|
+
element :assignment, class: Assignment
|
15
|
+
|
16
|
+
element :position
|
17
|
+
element :workflow_state
|
18
|
+
element :discussion_type
|
19
|
+
element :type
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module MultiVersionCommonCartridge
|
2
|
+
module Elements
|
3
|
+
class TopicText
|
4
|
+
include SAXMachine
|
5
|
+
|
6
|
+
attribute :type
|
7
|
+
|
8
|
+
element :text
|
9
|
+
end
|
10
|
+
|
11
|
+
class Topic
|
12
|
+
include SAXMachine
|
13
|
+
|
14
|
+
attribute :xmlns
|
15
|
+
attribute 'xmlns:xsi', as: :xmlns_xsi
|
16
|
+
|
17
|
+
element 'title', as: :title
|
18
|
+
element 'text_', as: :text, class: TopicText
|
19
|
+
|
20
|
+
element 'attachments', class: ::CommonCartridge::Elements::Resources::Attachments::RootAttachment, as: :attachment_root
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
@@ -19,7 +19,7 @@ module MultiVersionCommonCartridge
|
|
19
19
|
module CanvasCourseSettings
|
20
20
|
|
21
21
|
class CanvasCourseSettings < MultiVersionCommonCartridge::Resources::Resource
|
22
|
-
attr_accessor :image_url, :group_weighting_scheme, :assignment_groups, :modules, :href
|
22
|
+
attr_accessor :image_url, :group_weighting_scheme, :assignment_groups, :modules, :href, :syllabus_body
|
23
23
|
|
24
24
|
def initialize; end
|
25
25
|
|
@@ -67,7 +67,7 @@ module MultiVersionCommonCartridge
|
|
67
67
|
|
68
68
|
def canvas_assignment_element
|
69
69
|
@canvas_assignment_element ||=
|
70
|
-
|
70
|
+
MultiVersionCommonCartridge::Elements::Canvas::Assignment.new.tap do |element|
|
71
71
|
element.xmlns = required_namespaces['xmlns']
|
72
72
|
element.xmlns_xsi = required_namespaces['xmlns:xsi']
|
73
73
|
element.identifier = resource.identifier
|
@@ -28,18 +28,21 @@ module MultiVersionCommonCartridge
|
|
28
28
|
CANVAS_EXPORT_FILENAME = 'canvas_export.txt'.freeze
|
29
29
|
ASSIGNMENT_GROUPS_FILENAME = 'assignment_groups.xml'.freeze
|
30
30
|
MODULE_META_FILENAME = 'module_meta.xml'.freeze
|
31
|
+
SYLLABUS_FILENAME = 'syllabus.html'.freeze
|
31
32
|
|
32
33
|
def type
|
33
34
|
'webcontent'
|
34
35
|
end
|
35
36
|
|
36
37
|
def files
|
37
|
-
[
|
38
|
+
file_list = [
|
38
39
|
File.join(resource_path, COURSE_SETTINGS_FILENAME),
|
39
40
|
File.join(resource_path, CANVAS_EXPORT_FILENAME),
|
40
41
|
File.join(resource_path, ASSIGNMENT_GROUPS_FILENAME),
|
41
|
-
File.join(resource_path, MODULE_META_FILENAME)
|
42
|
+
File.join(resource_path, MODULE_META_FILENAME)
|
42
43
|
]
|
44
|
+
file_list << File.join(resource_path, SYLLABUS_FILENAME) if resource.syllabus_body
|
45
|
+
file_list
|
43
46
|
end
|
44
47
|
|
45
48
|
def create_files(out_dir)
|
@@ -77,11 +80,21 @@ module MultiVersionCommonCartridge
|
|
77
80
|
File.open(File.join(out_dir, resource_path, MODULE_META_FILENAME), 'w') do |file|
|
78
81
|
file.write(module_meta_doc.to_xml)
|
79
82
|
end
|
83
|
+
|
84
|
+
if resource.syllabus_body
|
85
|
+
File.open(File.join(out_dir, resource_path, SYLLABUS_FILENAME), 'w') do |file|
|
86
|
+
file.write(syllabus_contents)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def syllabus_contents
|
92
|
+
"<html><body><h1>Syllabus</h1>#{resource.syllabus_body}</body></html>"
|
80
93
|
end
|
81
94
|
|
82
95
|
def course_settings_element
|
83
96
|
@course_settings_element ||=
|
84
|
-
|
97
|
+
MultiVersionCommonCartridge::Elements::Canvas::CourseSettings.new.tap do |element|
|
85
98
|
element.identifier = resource.identifier
|
86
99
|
element.xmlns = required_namespaces['xmlns']
|
87
100
|
element.xmlns_xsi = required_namespaces['xmlns:xsi']
|
@@ -92,7 +105,7 @@ module MultiVersionCommonCartridge
|
|
92
105
|
|
93
106
|
def assignment_groups_element
|
94
107
|
@assignment_groups_element ||=
|
95
|
-
|
108
|
+
MultiVersionCommonCartridge::Elements::Canvas::AssignmentGroups.new.tap do |element|
|
96
109
|
element.xmlns = required_namespaces['xmlns']
|
97
110
|
element.xmlns_xsi = required_namespaces['xmlns:xsi']
|
98
111
|
element.groups = groups_child_elements
|
@@ -103,7 +116,7 @@ module MultiVersionCommonCartridge
|
|
103
116
|
return if resource.assignment_groups.nil?
|
104
117
|
|
105
118
|
resource.assignment_groups.map do |key, value|
|
106
|
-
|
119
|
+
MultiVersionCommonCartridge::Elements::Canvas::AssignmentGroup.new.tap do |element|
|
107
120
|
element.identifier = key
|
108
121
|
element.title = value[:title]
|
109
122
|
element.position = value[:position]
|
@@ -114,7 +127,7 @@ module MultiVersionCommonCartridge
|
|
114
127
|
|
115
128
|
def module_meta_element
|
116
129
|
@module_meta_element ||=
|
117
|
-
|
130
|
+
MultiVersionCommonCartridge::Elements::Canvas::Modules.new.tap do |element|
|
118
131
|
element.xmlns = required_namespaces['xmlns']
|
119
132
|
element.xmlns_xsi = required_namespaces['xmlns:xsi']
|
120
133
|
element.modules = modules_child_elements
|
@@ -125,7 +138,7 @@ module MultiVersionCommonCartridge
|
|
125
138
|
return if resource.modules.nil?
|
126
139
|
|
127
140
|
resource.modules.map do |key, value|
|
128
|
-
|
141
|
+
MultiVersionCommonCartridge::Elements::Canvas::Module.new.tap do |element|
|
129
142
|
element.identifier = key
|
130
143
|
element.title = value[:title]
|
131
144
|
element.workflow_state = value[:workflow_state]
|
@@ -142,14 +155,14 @@ module MultiVersionCommonCartridge
|
|
142
155
|
def prerequisites_root_element(prerequisites)
|
143
156
|
return if prerequisites.nil?
|
144
157
|
|
145
|
-
|
158
|
+
MultiVersionCommonCartridge::Elements::Canvas::Prerequisites.new.tap do |element|
|
146
159
|
element.prerequisites = prerequisites_child_elements(prerequisites)
|
147
160
|
end
|
148
161
|
end
|
149
162
|
|
150
163
|
def prerequisites_child_elements(prerequisites)
|
151
164
|
prerequisites.map do |prerequisite|
|
152
|
-
|
165
|
+
MultiVersionCommonCartridge::Elements::Canvas::Prerequisite.new.tap do |element|
|
153
166
|
element.type = prerequisite[:type]
|
154
167
|
element.title = prerequisite[:title]
|
155
168
|
element.identifierref = prerequisite[:identifierref]
|
@@ -160,14 +173,14 @@ module MultiVersionCommonCartridge
|
|
160
173
|
def items_root_element(items)
|
161
174
|
return if items.nil?
|
162
175
|
|
163
|
-
|
176
|
+
MultiVersionCommonCartridge::Elements::Canvas::Items.new.tap do |element|
|
164
177
|
element.items = items_child_elements(items)
|
165
178
|
end
|
166
179
|
end
|
167
180
|
|
168
181
|
def items_child_elements(items)
|
169
182
|
items.map do |item|
|
170
|
-
|
183
|
+
MultiVersionCommonCartridge::Elements::Canvas::Item.new.tap do |element|
|
171
184
|
element.identifier = item[:identifier]
|
172
185
|
element.title = item[:title]
|
173
186
|
element.workflow_state = item[:workflow_state]
|
@@ -184,14 +197,14 @@ module MultiVersionCommonCartridge
|
|
184
197
|
def completion_requirements_root_element(completion_requirements)
|
185
198
|
return if completion_requirements.nil?
|
186
199
|
|
187
|
-
|
200
|
+
MultiVersionCommonCartridge::Elements::Canvas::CompletionRequirements.new.tap do |element|
|
188
201
|
element.completion_requirements = completion_requirements_child_elements(completion_requirements)
|
189
202
|
end
|
190
203
|
end
|
191
204
|
|
192
205
|
def completion_requirements_child_elements(completion_requirements)
|
193
206
|
completion_requirements.map do |completion_requirement|
|
194
|
-
|
207
|
+
MultiVersionCommonCartridge::Elements::Canvas::CompletionRequirement.new.tap do |element|
|
195
208
|
element.type = completion_requirement[:type]
|
196
209
|
element.identifierref = completion_requirement[:identifierref]
|
197
210
|
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
# multi_version_common_cartridge
|
2
|
+
# Copyright © 2023 StrongMind
|
3
|
+
#
|
4
|
+
# multi_version_common_cartridge is free software: you can redistribute it
|
5
|
+
# and/or modify it under the terms of the GNU General Public
|
6
|
+
# License as published by the Free Software Foundation, either
|
7
|
+
# version 3 of the License, or (at your option) any later version.
|
8
|
+
#
|
9
|
+
# multi_version_common_cartridge is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
12
|
+
# General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License
|
15
|
+
# along with multi_version_common_cartridge. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
|
17
|
+
module MultiVersionCommonCartridge
|
18
|
+
module Writers
|
19
|
+
class CanvasTopicWriter < ResourceWriter
|
20
|
+
REQUIRED_NAMESPACES = {
|
21
|
+
MultiVersionCommonCartridge::CartridgeVersions::CC_1_1_0 => {
|
22
|
+
'xmlns' => 'http://canvas.instructure.com/xsd/cccv1p0',
|
23
|
+
'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance'
|
24
|
+
}
|
25
|
+
}.freeze
|
26
|
+
|
27
|
+
MESSAGES = {
|
28
|
+
no_title: 'A title is required.',
|
29
|
+
no_external_tool_url: 'An external tool url is required.'
|
30
|
+
}.freeze
|
31
|
+
|
32
|
+
def finalize
|
33
|
+
super
|
34
|
+
validate_title
|
35
|
+
end
|
36
|
+
|
37
|
+
def type
|
38
|
+
'webcontent'
|
39
|
+
end
|
40
|
+
|
41
|
+
def create_files(out_dir)
|
42
|
+
FileUtils.mkdir_p(File.join(out_dir))
|
43
|
+
doc = Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |builder|
|
44
|
+
SaxMachineNokogiriXmlSaver.new.save(
|
45
|
+
builder, canvas_topic_element, 'topicMeta'
|
46
|
+
)
|
47
|
+
end
|
48
|
+
File.open(File.join(out_dir, "#{resource.identifier}.xml"), 'w') do |file|
|
49
|
+
file.write(doc.to_xml)
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
def canvas_topic_element
|
55
|
+
@canvas_topic_element ||=
|
56
|
+
MultiVersionCommonCartridge::Elements::Canvas::TopicMeta.new.tap do |element|
|
57
|
+
element.xmlns = required_namespaces['xmlns']
|
58
|
+
element.xmlns_xsi = required_namespaces['xmlns:xsi']
|
59
|
+
element.identifier = resource.identifier
|
60
|
+
element.topic_id = resource.identifier.gsub(/_canvasTopic$/, '')
|
61
|
+
element.title = resource.title
|
62
|
+
assignment_resource = resource.assignment
|
63
|
+
element.assignment = MultiVersionCommonCartridge::Elements::Canvas::Assignment.new.tap do |assignment|
|
64
|
+
assignment.title = resource.title
|
65
|
+
assignment.identifier = resource.identifier
|
66
|
+
assignment.assignment_group_identifierref = assignment_resource.assignment_group_identifierref
|
67
|
+
assignment.points_possible = assignment_resource.points_possible
|
68
|
+
assignment.max_attempts = assignment_resource.max_attempts
|
69
|
+
assignment.allowed_attempts = assignment_resource.allowed_attempts
|
70
|
+
assignment.is_end_of_module_exam = assignment_resource.is_end_of_module_exam
|
71
|
+
assignment.grading_type = assignment_resource.grading_type
|
72
|
+
assignment.submission_types = assignment_resource.submission_types
|
73
|
+
assignment.peer_review_count = assignment_resource.peer_review_count
|
74
|
+
end
|
75
|
+
|
76
|
+
element.position = resource.position
|
77
|
+
element.workflow_state = resource.workflow_state
|
78
|
+
element.discussion_type = resource.discussion_type
|
79
|
+
element.type = resource.type
|
80
|
+
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def files
|
85
|
+
[
|
86
|
+
"#{resource.identifier}.xml"
|
87
|
+
]
|
88
|
+
end
|
89
|
+
|
90
|
+
private def validate_title
|
91
|
+
raise StandardError, MESSAGES[:no_title] unless resource.title
|
92
|
+
end
|
93
|
+
|
94
|
+
private def required_namespaces
|
95
|
+
REQUIRED_NAMESPACES[@version]
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
@@ -21,6 +21,8 @@ module MultiVersionCommonCartridge
|
|
21
21
|
::MultiVersionCommonCartridge::Resources::BasicLtiLink::BasicLtiLink => BasicLtiLinkWriter,
|
22
22
|
::MultiVersionCommonCartridge::Resources::CanvasAssignment::CanvasAssignment => CanvasAssignmentWriter,
|
23
23
|
::MultiVersionCommonCartridge::Resources::CanvasCourseSettings::CanvasCourseSettings => CanvasCourseSettingsWriter,
|
24
|
+
::MultiVersionCommonCartridge::Resources::Topic => Writers::TopicWriter,
|
25
|
+
::MultiVersionCommonCartridge::Resources::CanvasTopic => Writers::CanvasTopicWriter
|
24
26
|
}.freeze
|
25
27
|
|
26
28
|
def initialize(cartridge, version)
|
@@ -52,8 +54,10 @@ module MultiVersionCommonCartridge
|
|
52
54
|
|
53
55
|
def resource_writer(resource)
|
54
56
|
return @resource_writers[resource] if @resource_writers.key?(resource)
|
57
|
+
|
55
58
|
writer_class = RESOURCE_WRITERS[resource.class]
|
56
59
|
raise "Unknown resource '#{resource.class.name}'" unless writer_class
|
60
|
+
|
57
61
|
@resource_writers[resource] = writer_class.new(resource, @version)
|
58
62
|
end
|
59
63
|
end
|
@@ -38,6 +38,9 @@ module MultiVersionCommonCartridge
|
|
38
38
|
element.files = files.map do |file|
|
39
39
|
CommonCartridge::Elements::Resources::File.new(href: file)
|
40
40
|
end
|
41
|
+
element.dependencies = dependencies.map do |dependency|
|
42
|
+
CommonCartridge::Elements::Resources::Dependency.new(identifierref: dependency)
|
43
|
+
end
|
41
44
|
end
|
42
45
|
end
|
43
46
|
|
@@ -49,6 +52,10 @@ module MultiVersionCommonCartridge
|
|
49
52
|
def files
|
50
53
|
[]
|
51
54
|
end
|
55
|
+
|
56
|
+
def dependencies
|
57
|
+
[]
|
58
|
+
end
|
52
59
|
end
|
53
60
|
end
|
54
61
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module MultiVersionCommonCartridge
|
4
|
+
module Writers
|
5
|
+
class TopicWriter < ResourceWriter
|
6
|
+
include SupportedVersions
|
7
|
+
|
8
|
+
CANVAS_TOPIC_IDENTIFIER_SUFFIX = '_canvasTopic'.freeze
|
9
|
+
|
10
|
+
def type
|
11
|
+
'imsdt_xmlv1p1'
|
12
|
+
end
|
13
|
+
|
14
|
+
def create_files(dir)
|
15
|
+
doc = Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |builder|
|
16
|
+
SaxMachineNokogiriXmlSaver.new.save(builder, topic_element, 'topic')
|
17
|
+
end
|
18
|
+
File.write(File.join(dir, "#{resource.identifier}.xml"), doc.to_xml)
|
19
|
+
end
|
20
|
+
|
21
|
+
def topic_element
|
22
|
+
@topic_element ||= MultiVersionCommonCartridge::Elements::Topic.new.tap do |element|
|
23
|
+
element.xmlns_xsi = required_namespaces['xmlns:xsi']
|
24
|
+
element.xmlns = required_namespaces['xmlns:imsdt']
|
25
|
+
element.title = resource.title
|
26
|
+
element.text = MultiVersionCommonCartridge::Elements::TopicText.new.tap do |text|
|
27
|
+
text.text = resource.text
|
28
|
+
text.type = 'text/html'
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def files
|
34
|
+
[
|
35
|
+
"#{resource.identifier}.xml"
|
36
|
+
]
|
37
|
+
end
|
38
|
+
|
39
|
+
def dependencies
|
40
|
+
return [] unless resource.canvas_topic
|
41
|
+
|
42
|
+
[
|
43
|
+
"#{resource.identifier}#{CANVAS_TOPIC_IDENTIFIER_SUFFIX}"
|
44
|
+
]
|
45
|
+
end
|
46
|
+
|
47
|
+
private def required_namespaces
|
48
|
+
XmlDefinitions::REQUIRED_NAMESPACES[@version]
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -37,13 +37,15 @@ module MultiVersionCommonCartridge
|
|
37
37
|
'xmlns' => 'http://www.imsglobal.org/xsd/imsccv1p1/imscp_v1p1',
|
38
38
|
'xmlns:lom' => 'http://ltsc.ieee.org/xsd/imsccv1p1/LOM/resource',
|
39
39
|
'xmlns:lomimscc' => 'http://ltsc.ieee.org/xsd/imsccv1p1/LOM/manifest',
|
40
|
-
'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance'
|
40
|
+
'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
|
41
|
+
'xmlns:imsdt' => 'http://www.imsglobal.org/xsd/imsccv1p1/imsdt_v1p1'
|
41
42
|
},
|
42
43
|
MultiVersionCommonCartridge::CartridgeVersions::CC_1_2_0 => {
|
43
44
|
'xmlns' => 'http://www.imsglobal.org/xsd/imsccv1p2/imscp_v1p1',
|
44
45
|
'xmlns:lom' => 'http://ltsc.ieee.org/xsd/imsccv1p2/LOM/resource',
|
45
46
|
'xmlns:lomimscc' => 'http://ltsc.ieee.org/xsd/imsccv1p2/LOM/manifest',
|
46
|
-
'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance'
|
47
|
+
'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
|
48
|
+
'xmlns:imsdt' => 'http://www.imsglobal.org/xsd/imsccv1p1/imsdt_v1p1'
|
47
49
|
},
|
48
50
|
MultiVersionCommonCartridge::CartridgeVersions::CC_1_3_0 => {
|
49
51
|
'xmlns' => 'http://www.imsglobal.org/xsd/imsccv1p3/imscp_v1p1',
|
@@ -15,6 +15,7 @@
|
|
15
15
|
# along with multi_version_common_cartridge. If not, see <http://www.gnu.org/licenses/>.
|
16
16
|
|
17
17
|
require 'sax-machine'
|
18
|
+
require 'common_cartridge'
|
18
19
|
require 'multi_version_common_cartridge/version'
|
19
20
|
require 'multi_version_common_cartridge/sax_machine_nokogiri_xml_saver'
|
20
21
|
|
@@ -24,8 +25,12 @@ require 'multi_version_common_cartridge/resources/resource'
|
|
24
25
|
require 'multi_version_common_cartridge/resources/basic_lti_link'
|
25
26
|
require 'multi_version_common_cartridge/resources/canvas_assignment'
|
26
27
|
require 'multi_version_common_cartridge/resources/canvas_course_settings'
|
27
|
-
require 'multi_version_common_cartridge/resources/
|
28
|
-
require 'multi_version_common_cartridge/resources/
|
28
|
+
require 'multi_version_common_cartridge/resources/topic'
|
29
|
+
require 'multi_version_common_cartridge/resources/canvas_topic'
|
30
|
+
require 'multi_version_common_cartridge/elements/canvas/assignment'
|
31
|
+
require 'multi_version_common_cartridge/elements/canvas/course_settings'
|
32
|
+
require 'multi_version_common_cartridge/elements/canvas/topic_meta'
|
33
|
+
require 'multi_version_common_cartridge/elements/topic'
|
29
34
|
require 'multi_version_common_cartridge/manifest'
|
30
35
|
require 'multi_version_common_cartridge/cartridge'
|
31
36
|
require 'multi_version_common_cartridge/xml_definitions'
|
@@ -37,9 +42,12 @@ require 'multi_version_common_cartridge/writers/basic_lti_extension_writer'
|
|
37
42
|
require 'multi_version_common_cartridge/writers/basic_lti_link_writer'
|
38
43
|
require 'multi_version_common_cartridge/writers/canvas_course_settings_writer'
|
39
44
|
require 'multi_version_common_cartridge/writers/canvas_assignment_writer'
|
45
|
+
require 'multi_version_common_cartridge/writers/canvas_topic_writer'
|
40
46
|
require 'multi_version_common_cartridge/writers/manifest_writer'
|
41
47
|
require 'multi_version_common_cartridge/writers/manifest_metadata_writer'
|
42
48
|
require 'multi_version_common_cartridge/writers/manifest_organization_writer'
|
43
49
|
require 'multi_version_common_cartridge/writers/manifest_resources_writer'
|
44
50
|
require 'multi_version_common_cartridge/writers/cartridge_writer'
|
51
|
+
require 'multi_version_common_cartridge/writers/topic_writer'
|
45
52
|
require 'multi_version_common_cartridge/writers/factory'
|
53
|
+
|
@@ -20,10 +20,10 @@ Gem::Specification.new do |spec|
|
|
20
20
|
end
|
21
21
|
|
22
22
|
spec.add_dependency 'activesupport', '> 2.0'
|
23
|
-
spec.add_dependency 'common_cartridge_parser', '~> 1.0'
|
23
|
+
spec.add_dependency 'common_cartridge_parser', '~> 1.0.9'
|
24
24
|
|
25
25
|
spec.add_development_dependency 'rspec', '~> 3.8'
|
26
26
|
spec.add_development_dependency 'rubocop'
|
27
27
|
spec.add_development_dependency 'rubocop-rspec'
|
28
|
-
spec.add_development_dependency 'simplecov', '~> 0.
|
28
|
+
spec.add_development_dependency 'simplecov', '~> 0.22'
|
29
29
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: strongmind_multi_version_common_cartridge
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- StrongMind
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-03-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 1.0.9
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 1.0.9
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,14 +86,14 @@ dependencies:
|
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '0.
|
89
|
+
version: '0.22'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '0.
|
96
|
+
version: '0.22'
|
97
97
|
description: 'Target versions supported: 1.1, 1.2, 1.3; Thin 1.2, 1.3'
|
98
98
|
email:
|
99
99
|
- vendor@strongmind.com
|
@@ -112,14 +112,18 @@ files:
|
|
112
112
|
- lib/multi_version_common_cartridge.rb
|
113
113
|
- lib/multi_version_common_cartridge/cartridge.rb
|
114
114
|
- lib/multi_version_common_cartridge/cartridge_versions.rb
|
115
|
+
- lib/multi_version_common_cartridge/elements/canvas/assignment.rb
|
116
|
+
- lib/multi_version_common_cartridge/elements/canvas/course_settings.rb
|
117
|
+
- lib/multi_version_common_cartridge/elements/canvas/topic_meta.rb
|
118
|
+
- lib/multi_version_common_cartridge/elements/topic.rb
|
115
119
|
- lib/multi_version_common_cartridge/item.rb
|
116
120
|
- lib/multi_version_common_cartridge/manifest.rb
|
117
121
|
- lib/multi_version_common_cartridge/resources/basic_lti_link.rb
|
118
122
|
- lib/multi_version_common_cartridge/resources/canvas_assignment.rb
|
119
123
|
- lib/multi_version_common_cartridge/resources/canvas_course_settings.rb
|
120
|
-
- lib/multi_version_common_cartridge/resources/
|
121
|
-
- lib/multi_version_common_cartridge/resources/canvas_elements/course_settings.rb
|
124
|
+
- lib/multi_version_common_cartridge/resources/canvas_topic.rb
|
122
125
|
- lib/multi_version_common_cartridge/resources/resource.rb
|
126
|
+
- lib/multi_version_common_cartridge/resources/topic.rb
|
123
127
|
- lib/multi_version_common_cartridge/sax_machine_nokogiri_xml_saver.rb
|
124
128
|
- lib/multi_version_common_cartridge/version.rb
|
125
129
|
- lib/multi_version_common_cartridge/writers/basic_lti_extension_writer.rb
|
@@ -127,6 +131,7 @@ files:
|
|
127
131
|
- lib/multi_version_common_cartridge/writers/basic_lti_vendor_writer.rb
|
128
132
|
- lib/multi_version_common_cartridge/writers/canvas_assignment_writer.rb
|
129
133
|
- lib/multi_version_common_cartridge/writers/canvas_course_settings_writer.rb
|
134
|
+
- lib/multi_version_common_cartridge/writers/canvas_topic_writer.rb
|
130
135
|
- lib/multi_version_common_cartridge/writers/cartridge_writer.rb
|
131
136
|
- lib/multi_version_common_cartridge/writers/factory.rb
|
132
137
|
- lib/multi_version_common_cartridge/writers/item_writer.rb
|
@@ -136,12 +141,13 @@ files:
|
|
136
141
|
- lib/multi_version_common_cartridge/writers/manifest_writer.rb
|
137
142
|
- lib/multi_version_common_cartridge/writers/resource_writer.rb
|
138
143
|
- lib/multi_version_common_cartridge/writers/supported_versions.rb
|
144
|
+
- lib/multi_version_common_cartridge/writers/topic_writer.rb
|
139
145
|
- lib/multi_version_common_cartridge/xml_definitions.rb
|
140
146
|
- multi_version_common_cartridge.gemspec
|
141
147
|
homepage: https://github.com/StrongMind/multi_version_common_cartridge
|
142
148
|
licenses: []
|
143
149
|
metadata: {}
|
144
|
-
post_install_message:
|
150
|
+
post_install_message:
|
145
151
|
rdoc_options: []
|
146
152
|
require_paths:
|
147
153
|
- lib
|
@@ -157,7 +163,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
157
163
|
version: '0'
|
158
164
|
requirements: []
|
159
165
|
rubygems_version: 3.4.10
|
160
|
-
signing_key:
|
166
|
+
signing_key:
|
161
167
|
specification_version: 4
|
162
168
|
summary: Creates IMS Common Cartridge files, supporting several versions of the CC
|
163
169
|
standard.
|
@@ -1,33 +0,0 @@
|
|
1
|
-
module CanvasCartridge
|
2
|
-
module Elements
|
3
|
-
module Resources
|
4
|
-
module CanvasAssignment
|
5
|
-
|
6
|
-
class Assignment
|
7
|
-
include SAXMachine
|
8
|
-
|
9
|
-
attribute :xmlns
|
10
|
-
attribute 'xmlns:xsi', as: :xmlns_xsi
|
11
|
-
attribute :identifier, as: :identifier
|
12
|
-
|
13
|
-
element 'title', as: :title
|
14
|
-
element 'assignment_group_identifierref', as: :assignment_group_identifierref
|
15
|
-
element 'points_possible', as: :points_possible
|
16
|
-
element 'max_attempts', as: :max_attempts
|
17
|
-
element 'allowed_attempts', as: :allowed_attempts
|
18
|
-
element 'is_end_of_module_exam', as: :is_end_of_module_exam
|
19
|
-
element 'grading_type', as: :grading_type
|
20
|
-
element 'submission_types', as: :submission_types
|
21
|
-
element 'peer_review_count', as: :peer_review_count
|
22
|
-
element 'external_tool_url', as: :external_tool_url
|
23
|
-
|
24
|
-
def self.type
|
25
|
-
:canvas_assignment
|
26
|
-
end
|
27
|
-
|
28
|
-
def self.pattern; end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,111 +0,0 @@
|
|
1
|
-
module CanvasCartridge
|
2
|
-
module Elements
|
3
|
-
module Resources
|
4
|
-
module CourseSettings
|
5
|
-
|
6
|
-
class CourseSettings
|
7
|
-
include SAXMachine
|
8
|
-
|
9
|
-
attribute :identifier
|
10
|
-
|
11
|
-
attribute :xmlns
|
12
|
-
attribute 'xmlns:xsi', as: :xmlns_xsi
|
13
|
-
|
14
|
-
element 'image_url', as: :image_url
|
15
|
-
element 'group_weighting_scheme', as: :group_weighting_scheme
|
16
|
-
|
17
|
-
def self.type
|
18
|
-
:course_settings
|
19
|
-
end
|
20
|
-
|
21
|
-
def self.pattern; end
|
22
|
-
end
|
23
|
-
|
24
|
-
class AssignmentGroup
|
25
|
-
include SAXMachine
|
26
|
-
|
27
|
-
attribute :identifier
|
28
|
-
|
29
|
-
element 'title', as: :title
|
30
|
-
element 'position', as: :position
|
31
|
-
element 'group_weight', as: :group_weight
|
32
|
-
|
33
|
-
end
|
34
|
-
|
35
|
-
class AssignmentGroups
|
36
|
-
include SAXMachine
|
37
|
-
|
38
|
-
attribute :xmlns
|
39
|
-
attribute 'xmlns:xsi', as: :xmlns_xsi
|
40
|
-
|
41
|
-
elements 'assignmentGroup', class: AssignmentGroup, as: :groups
|
42
|
-
end
|
43
|
-
|
44
|
-
class Prerequisite
|
45
|
-
include SAXMachine
|
46
|
-
attribute :type
|
47
|
-
element :title
|
48
|
-
element :identifierref
|
49
|
-
end
|
50
|
-
|
51
|
-
class Prerequisites
|
52
|
-
include SAXMachine
|
53
|
-
|
54
|
-
elements :prerequisite, as: :prerequisites, class: Prerequisite
|
55
|
-
end
|
56
|
-
|
57
|
-
class Item
|
58
|
-
include SAXMachine
|
59
|
-
attribute :identifier, as: :identifier
|
60
|
-
element :title
|
61
|
-
element :workflow_state
|
62
|
-
element :content_type
|
63
|
-
element :identifierref
|
64
|
-
element :url
|
65
|
-
element :position
|
66
|
-
element :indent
|
67
|
-
element :global_identifierref
|
68
|
-
end
|
69
|
-
|
70
|
-
class Items
|
71
|
-
include SAXMachine
|
72
|
-
|
73
|
-
elements :item, as: :items, class: Item
|
74
|
-
end
|
75
|
-
|
76
|
-
class CompletionRequirement
|
77
|
-
include SAXMachine
|
78
|
-
attribute :type
|
79
|
-
element :identifierref
|
80
|
-
end
|
81
|
-
|
82
|
-
class CompletionRequirements
|
83
|
-
include SAXMachine
|
84
|
-
|
85
|
-
elements :completionRequirement, as: :completion_requirements, class: CompletionRequirement
|
86
|
-
end
|
87
|
-
|
88
|
-
class Module
|
89
|
-
include SAXMachine
|
90
|
-
attribute :identifier
|
91
|
-
element :title
|
92
|
-
element :workflow_state
|
93
|
-
element :position
|
94
|
-
element :require_sequential_progress
|
95
|
-
element :requirement_count
|
96
|
-
element :prerequisites, as: :root_prerequisites, class: Prerequisites
|
97
|
-
element :items, as: :root_items, class: Items
|
98
|
-
element :completionRequirements, as: :root_requirements, class: CompletionRequirements
|
99
|
-
end
|
100
|
-
|
101
|
-
class Modules
|
102
|
-
include SAXMachine
|
103
|
-
|
104
|
-
attribute :xmlns
|
105
|
-
attribute 'xmlns:xsi', as: :xmlns_xsi
|
106
|
-
elements :module, as: :modules, class: Module
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|