strongmind_multi_version_common_cartridge 1.0.4 → 1.1.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_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 +11 -11
- 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 +4 -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: fafc7a3fb601c861dbaa2cd0cdd0283fc99f9ab9063422c5bd35979a7c4736f8
|
4
|
+
data.tar.gz: 28d30a8390ce6ca47e9c45981c94657d1a6656a5bb635861f5b75408047e60e7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 71ffa47bd5eea926e2a92738a84680b81cc4a554bdc0b78e588f8ad8179004430bd0c51ea64bf190f4a2d09c31bc0480f3e429d8cca4365ad1b226776d99f900
|
7
|
+
data.tar.gz: c0fe805700fdf621beea2ffb6744a085fd95c2d21dc7a03c312fe35f5ef8b1849877f70164d113294795d9432d17f4c79b2f40ec85341c882d18afa719c52eb7
|
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
|
@@ -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
|
@@ -81,7 +81,7 @@ module MultiVersionCommonCartridge
|
|
81
81
|
|
82
82
|
def course_settings_element
|
83
83
|
@course_settings_element ||=
|
84
|
-
|
84
|
+
MultiVersionCommonCartridge::Elements::Canvas::CourseSettings.new.tap do |element|
|
85
85
|
element.identifier = resource.identifier
|
86
86
|
element.xmlns = required_namespaces['xmlns']
|
87
87
|
element.xmlns_xsi = required_namespaces['xmlns:xsi']
|
@@ -92,7 +92,7 @@ module MultiVersionCommonCartridge
|
|
92
92
|
|
93
93
|
def assignment_groups_element
|
94
94
|
@assignment_groups_element ||=
|
95
|
-
|
95
|
+
MultiVersionCommonCartridge::Elements::Canvas::AssignmentGroups.new.tap do |element|
|
96
96
|
element.xmlns = required_namespaces['xmlns']
|
97
97
|
element.xmlns_xsi = required_namespaces['xmlns:xsi']
|
98
98
|
element.groups = groups_child_elements
|
@@ -103,7 +103,7 @@ module MultiVersionCommonCartridge
|
|
103
103
|
return if resource.assignment_groups.nil?
|
104
104
|
|
105
105
|
resource.assignment_groups.map do |key, value|
|
106
|
-
|
106
|
+
MultiVersionCommonCartridge::Elements::Canvas::AssignmentGroup.new.tap do |element|
|
107
107
|
element.identifier = key
|
108
108
|
element.title = value[:title]
|
109
109
|
element.position = value[:position]
|
@@ -114,7 +114,7 @@ module MultiVersionCommonCartridge
|
|
114
114
|
|
115
115
|
def module_meta_element
|
116
116
|
@module_meta_element ||=
|
117
|
-
|
117
|
+
MultiVersionCommonCartridge::Elements::Canvas::Modules.new.tap do |element|
|
118
118
|
element.xmlns = required_namespaces['xmlns']
|
119
119
|
element.xmlns_xsi = required_namespaces['xmlns:xsi']
|
120
120
|
element.modules = modules_child_elements
|
@@ -125,7 +125,7 @@ module MultiVersionCommonCartridge
|
|
125
125
|
return if resource.modules.nil?
|
126
126
|
|
127
127
|
resource.modules.map do |key, value|
|
128
|
-
|
128
|
+
MultiVersionCommonCartridge::Elements::Canvas::Module.new.tap do |element|
|
129
129
|
element.identifier = key
|
130
130
|
element.title = value[:title]
|
131
131
|
element.workflow_state = value[:workflow_state]
|
@@ -142,14 +142,14 @@ module MultiVersionCommonCartridge
|
|
142
142
|
def prerequisites_root_element(prerequisites)
|
143
143
|
return if prerequisites.nil?
|
144
144
|
|
145
|
-
|
145
|
+
MultiVersionCommonCartridge::Elements::Canvas::Prerequisites.new.tap do |element|
|
146
146
|
element.prerequisites = prerequisites_child_elements(prerequisites)
|
147
147
|
end
|
148
148
|
end
|
149
149
|
|
150
150
|
def prerequisites_child_elements(prerequisites)
|
151
151
|
prerequisites.map do |prerequisite|
|
152
|
-
|
152
|
+
MultiVersionCommonCartridge::Elements::Canvas::Prerequisite.new.tap do |element|
|
153
153
|
element.type = prerequisite[:type]
|
154
154
|
element.title = prerequisite[:title]
|
155
155
|
element.identifierref = prerequisite[:identifierref]
|
@@ -160,14 +160,14 @@ module MultiVersionCommonCartridge
|
|
160
160
|
def items_root_element(items)
|
161
161
|
return if items.nil?
|
162
162
|
|
163
|
-
|
163
|
+
MultiVersionCommonCartridge::Elements::Canvas::Items.new.tap do |element|
|
164
164
|
element.items = items_child_elements(items)
|
165
165
|
end
|
166
166
|
end
|
167
167
|
|
168
168
|
def items_child_elements(items)
|
169
169
|
items.map do |item|
|
170
|
-
|
170
|
+
MultiVersionCommonCartridge::Elements::Canvas::Item.new.tap do |element|
|
171
171
|
element.identifier = item[:identifier]
|
172
172
|
element.title = item[:title]
|
173
173
|
element.workflow_state = item[:workflow_state]
|
@@ -184,14 +184,14 @@ module MultiVersionCommonCartridge
|
|
184
184
|
def completion_requirements_root_element(completion_requirements)
|
185
185
|
return if completion_requirements.nil?
|
186
186
|
|
187
|
-
|
187
|
+
MultiVersionCommonCartridge::Elements::Canvas::CompletionRequirements.new.tap do |element|
|
188
188
|
element.completion_requirements = completion_requirements_child_elements(completion_requirements)
|
189
189
|
end
|
190
190
|
end
|
191
191
|
|
192
192
|
def completion_requirements_child_elements(completion_requirements)
|
193
193
|
completion_requirements.map do |completion_requirement|
|
194
|
-
|
194
|
+
MultiVersionCommonCartridge::Elements::Canvas::CompletionRequirement.new.tap do |element|
|
195
195
|
element.type = completion_requirement[:type]
|
196
196
|
element.identifierref = completion_requirement[:identifierref]
|
197
197
|
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
|
+
|
@@ -13,15 +13,17 @@ Gem::Specification.new do |spec|
|
|
13
13
|
spec.description = 'Target versions supported: 1.1, 1.2, 1.3; Thin 1.2, 1.3'
|
14
14
|
spec.homepage = 'https://github.com/StrongMind/multi_version_common_cartridge'
|
15
15
|
|
16
|
+
spec.require_paths = ["lib"]
|
17
|
+
|
16
18
|
spec.files = `git ls-files -z`.split("\x0").reject do |file|
|
17
19
|
file.match(%r{^(test|spec|features)/})
|
18
20
|
end
|
19
21
|
|
20
22
|
spec.add_dependency 'activesupport', '> 2.0'
|
21
|
-
spec.add_dependency 'common_cartridge_parser', '~> 1.0'
|
23
|
+
spec.add_dependency 'common_cartridge_parser', '~> 1.0.9'
|
22
24
|
|
23
25
|
spec.add_development_dependency 'rspec', '~> 3.8'
|
24
26
|
spec.add_development_dependency 'rubocop'
|
25
27
|
spec.add_development_dependency 'rubocop-rspec'
|
26
|
-
spec.add_development_dependency 'simplecov', '~> 0.
|
28
|
+
spec.add_development_dependency 'simplecov', '~> 0.22'
|
27
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.1.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: 2024-
|
11
|
+
date: 2024-12-30 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
|