strongmind_multi_version_common_cartridge 1.0.5 → 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.
Files changed (24) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -0
  3. data/README.md +15 -0
  4. data/lib/multi_version_common_cartridge/cartridge.rb +13 -1
  5. data/lib/multi_version_common_cartridge/elements/canvas/assignment.rb +31 -0
  6. data/lib/multi_version_common_cartridge/elements/canvas/course_settings.rb +109 -0
  7. data/lib/multi_version_common_cartridge/elements/canvas/topic_meta.rb +24 -0
  8. data/lib/multi_version_common_cartridge/elements/topic.rb +24 -0
  9. data/lib/multi_version_common_cartridge/resources/canvas_topic.rb +7 -0
  10. data/lib/multi_version_common_cartridge/resources/resource.rb +4 -0
  11. data/lib/multi_version_common_cartridge/resources/topic.rb +11 -0
  12. data/lib/multi_version_common_cartridge/version.rb +1 -1
  13. data/lib/multi_version_common_cartridge/writers/canvas_assignment_writer.rb +1 -1
  14. data/lib/multi_version_common_cartridge/writers/canvas_course_settings_writer.rb +11 -11
  15. data/lib/multi_version_common_cartridge/writers/canvas_topic_writer.rb +100 -0
  16. data/lib/multi_version_common_cartridge/writers/factory.rb +4 -0
  17. data/lib/multi_version_common_cartridge/writers/resource_writer.rb +7 -0
  18. data/lib/multi_version_common_cartridge/writers/topic_writer.rb +53 -0
  19. data/lib/multi_version_common_cartridge/xml_definitions.rb +4 -2
  20. data/lib/multi_version_common_cartridge.rb +10 -2
  21. data/multi_version_common_cartridge.gemspec +2 -2
  22. metadata +17 -11
  23. data/lib/multi_version_common_cartridge/resources/canvas_elements/assignment.rb +0 -33
  24. 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: 94cb7196e16412a945d37c2aa2d82870c5d4fb120bed0c491858edad936653c1
4
- data.tar.gz: '08a1330ada21fa8552471e524a2aab5238fa1cc7e50b36bf83b4c5d4b928f913'
3
+ metadata.gz: fafc7a3fb601c861dbaa2cd0cdd0283fc99f9ab9063422c5bd35979a7c4736f8
4
+ data.tar.gz: 28d30a8390ce6ca47e9c45981c94657d1a6656a5bb635861f5b75408047e60e7
5
5
  SHA512:
6
- metadata.gz: abcb6144d68a4792abe0030e6f1736481a0dd6342358e59ab6e9bef1adb407675474e3602457f3d3602061d95cb607e307eecb60fad61bdbc82e5bbf6495f94a
7
- data.tar.gz: 760bc1e6881b8d6f904e7496a2b47f97cc821869ba212bbf96fd38b5ded38bc01ad089859711133295d717ad916f596f642198bbd9615342904f7ed0f3d25bef
6
+ metadata.gz: 71ffa47bd5eea926e2a92738a84680b81cc4a554bdc0b78e588f8ad8179004430bd0c51ea64bf190f4a2d09c31bc0480f3e429d8cca4365ad1b226776d99f900
7
+ data.tar.gz: c0fe805700fdf621beea2ffb6744a085fd95c2d21dc7a03c312fe35f5ef8b1849877f70164d113294795d9432d17f4c79b2f40ec85341c882d18afa719c52eb7
data/Gemfile CHANGED
@@ -1,3 +1,6 @@
1
1
  source 'https://rubygems.org'
2
+ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
3
+
4
+ gem 'common_cartridge_parser', github: 'vhl/common_cartridge_parser'
2
5
  gemspec
3
6
  ruby '>=3.2'
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 ||= all_items.map(&:resource).compact + @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
@@ -0,0 +1,7 @@
1
+ module MultiVersionCommonCartridge
2
+ module Resources
3
+ class CanvasTopic < MultiVersionCommonCartridge::Resources::Resource
4
+ attr_accessor :title, :position, :workflow_state, :discussion_type, :type, :assignment
5
+ end
6
+ end
7
+ end
@@ -18,6 +18,10 @@ module MultiVersionCommonCartridge
18
18
  module Resources
19
19
  class Resource
20
20
  attr_accessor :identifier, :href
21
+
22
+ def dependencies
23
+ []
24
+ end
21
25
  end
22
26
  end
23
27
  end
@@ -0,0 +1,11 @@
1
+ module MultiVersionCommonCartridge
2
+ module Resources
3
+ class Topic < MultiVersionCommonCartridge::Resources::Resource
4
+ attr_accessor :title, :text, :canvas_topic
5
+
6
+ def dependencies
7
+ [canvas_topic]
8
+ end
9
+ end
10
+ end
11
+ end
@@ -15,5 +15,5 @@
15
15
  # along with multi_version_common_cartridge. If not, see <http://www.gnu.org/licenses/>.
16
16
 
17
17
  module MultiVersionCommonCartridge
18
- VERSION = '1.0.5'.freeze
18
+ VERSION = '1.1.0'.freeze
19
19
  end
@@ -67,7 +67,7 @@ module MultiVersionCommonCartridge
67
67
 
68
68
  def canvas_assignment_element
69
69
  @canvas_assignment_element ||=
70
- CanvasCartridge::Elements::Resources::CanvasAssignment::Assignment.new.tap do |element|
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
- CanvasCartridge::Elements::Resources::CourseSettings::CourseSettings.new.tap do |element|
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
- CanvasCartridge::Elements::Resources::CourseSettings::AssignmentGroups.new.tap do |element|
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
- CanvasCartridge::Elements::Resources::CourseSettings::AssignmentGroup.new.tap do |element|
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
- CanvasCartridge::Elements::Resources::CourseSettings::Modules.new.tap do |element|
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
- CanvasCartridge::Elements::Resources::CourseSettings::Module.new.tap do |element|
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
- CanvasCartridge::Elements::Resources::CourseSettings::Prerequisites.new.tap do |element|
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
- CanvasCartridge::Elements::Resources::CourseSettings::Prerequisite.new.tap do |element|
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
- CanvasCartridge::Elements::Resources::CourseSettings::Items.new.tap do |element|
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
- CanvasCartridge::Elements::Resources::CourseSettings::Item.new.tap do |element|
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
- CanvasCartridge::Elements::Resources::CourseSettings::CompletionRequirements.new.tap do |element|
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
- CanvasCartridge::Elements::Resources::CourseSettings::CompletionRequirement.new.tap do |element|
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/canvas_elements/assignment'
28
- require 'multi_version_common_cartridge/resources/canvas_elements/course_settings'
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.16'
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.5
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-07-05 00:00:00.000000000 Z
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: '1.0'
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: '1.0'
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.16'
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.16'
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/canvas_elements/assignment.rb
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