From 939823f291a6989422ab796428a4fbe85071a8e9 Mon Sep 17 00:00:00 2001 From: Remy Obein Date: Wed, 21 Nov 2018 18:28:09 +0000 Subject: [PATCH 01/13] Add a manifest document class. --- lib/common_cartridge/parsers/parser.rb | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/common_cartridge/parsers/parser.rb b/lib/common_cartridge/parsers/parser.rb index 1d5b27b..043dd82 100644 --- a/lib/common_cartridge/parsers/parser.rb +++ b/lib/common_cartridge/parsers/parser.rb @@ -9,6 +9,12 @@ module CommonCartridge module Parsers class Parser + class ManifestDocument + include SAXMachine + + element :manifest, class: CommonCartridge::Elements::Manifest, required: true + end + def self.use_file(zipfile, path) Zip::File.open(File.join(CommonCartridge.config.import_directory, zipfile)) do |file| f = file.glob(path).first @@ -25,7 +31,7 @@ def initialize(zipfile) def parse Parser.use_file(@zipfile, 'imsmanifest.xml') do |xml| - @package.manifest = CommonCartridge::Elements::Manifest.parse(xml) + @package.manifest = ManifestDocument.parse(xml).manifest end parse_content! From 3ad61ed2008d8f7409a028e0ba215a5e459f97f8 Mon Sep 17 00:00:00 2001 From: Remy Obein Date: Wed, 21 Nov 2018 22:09:29 +0000 Subject: [PATCH 02/13] Remove custom sax handler. --- lib/common_cartridge.rb | 1 - lib/sax_machine/sax_handler.rb | 11 ----------- 2 files changed, 12 deletions(-) delete mode 100644 lib/sax_machine/sax_handler.rb diff --git a/lib/common_cartridge.rb b/lib/common_cartridge.rb index b359b2e..3aa6952 100644 --- a/lib/common_cartridge.rb +++ b/lib/common_cartridge.rb @@ -1,5 +1,4 @@ require 'sax-machine' -require 'sax_machine/sax_handler' module CommonCartridge def self.parse_from_zip(zipfile) diff --git a/lib/sax_machine/sax_handler.rb b/lib/sax_machine/sax_handler.rb deleted file mode 100644 index 7db3cc7..0000000 --- a/lib/sax_machine/sax_handler.rb +++ /dev/null @@ -1,11 +0,0 @@ -module SAXMachine - module SAXAbstractHandler - # Not a great solution; will be solved gracefully with CNVS-13964 - remove_method :normalize_name - def normalize_name(name) - # strip namespaces - name = name.split(":").last - name.gsub(/\-/, '_') - end - end -end From 124ca26074f0e173292249dc07c600cdbf29b161 Mon Sep 17 00:00:00 2001 From: Remy Obein Date: Thu, 29 Nov 2018 11:53:54 +0000 Subject: [PATCH 03/13] Add xml namespace prefix to elements. --- lib/common_cartridge/elements/lom.rb | 22 +++++++++---------- lib/common_cartridge/elements/manifest.rb | 6 +++++ lib/common_cartridge/elements/metadata.rb | 2 +- .../elements/resources/attachments.rb | 2 +- .../elements/resources/topic.rb | 8 +++---- spec/elements/manifest_spec.rb | 4 ++++ 6 files changed, 27 insertions(+), 17 deletions(-) diff --git a/lib/common_cartridge/elements/lom.rb b/lib/common_cartridge/elements/lom.rb index 33943c0..511b75c 100644 --- a/lib/common_cartridge/elements/lom.rb +++ b/lib/common_cartridge/elements/lom.rb @@ -4,8 +4,8 @@ module Lom class Title include SAXMachine - element :string, as: :value - element :string, value: :language, as: :language + element 'lomimscc:string', as: :value + element 'lomimscc:string', value: :language, as: :language def to_s; string; end end @@ -13,8 +13,8 @@ def to_s; string; end class Description include SAXMachine - element :string, as: :value - element :string, value: :language, as: :language + element 'lomimscc:string', as: :value + element 'lomimscc:string', value: :language, as: :language def to_s; string; end end @@ -22,8 +22,8 @@ def to_s; string; end class Keyword include SAXMachine - element :string, as: :value - element :string, value: :language, as: :language + element 'lomimscc:string', as: :value + element 'lomimscc:string', value: :language, as: :language def to_s; string; end end @@ -37,22 +37,22 @@ class CopyrightAndOtherRestrictions class Rights include SAXMachine - element :description, class: CommonCartridge::Elements::Lom::Description + element 'lomimscc:description', as: :description, class: CommonCartridge::Elements::Lom::Description element :copyrightAndOtherRestrictions, class: CommonCartridge::Elements::Lom::CopyrightAndOtherRestrictions end class General include SAXMachine - element :title, class: CommonCartridge::Elements::Lom::Title - element :description, class: CommonCartridge::Elements::Lom::Description - elements :keyword, as: :keywords, class: CommonCartridge::Elements::Lom::Keyword + element 'lomimscc:title', as: :title, class: CommonCartridge::Elements::Lom::Title + element 'lomimscc:description', as: :description, class: CommonCartridge::Elements::Lom::Description + elements 'lomimscc:keyword', as: :keywords, class: CommonCartridge::Elements::Lom::Keyword end class Lom include SAXMachine - element :general, class: CommonCartridge::Elements::Lom::General + element 'lomimscc:general', as: :general, class: CommonCartridge::Elements::Lom::General element :rights, class: CommonCartridge::Elements::Lom::Rights end end diff --git a/lib/common_cartridge/elements/manifest.rb b/lib/common_cartridge/elements/manifest.rb index 178c4ac..b80e1f4 100644 --- a/lib/common_cartridge/elements/manifest.rb +++ b/lib/common_cartridge/elements/manifest.rb @@ -6,6 +6,12 @@ class Manifest element :metadata, class: CommonCartridge::Elements::Metadata element :organizations, class: CommonCartridge::Elements::Organizations::RootOrganization, as: :root_organization element :resources, class: CommonCartridge::Elements::Resources::RootResource, as: :root_resource + attribute :identifier, required: true + attribute :xmlns + attribute 'xmlns:lomimscc', as: :xmlns_lomimscc + attribute 'xmlns:lom', as: :xmlns_lom + attribute 'xmlns:xsi', as: :xmlns_xsi + attribute 'xsi:schemaLocation', as: :xsi_schema_location def organizations root_organization.organizations diff --git a/lib/common_cartridge/elements/metadata.rb b/lib/common_cartridge/elements/metadata.rb index 073c5ee..22fa461 100644 --- a/lib/common_cartridge/elements/metadata.rb +++ b/lib/common_cartridge/elements/metadata.rb @@ -6,7 +6,7 @@ class Metadata element :schema element :schemaversion - element :lom, class: CommonCartridge::Elements::Lom::Lom + element 'lomimscc:lom', as: :lom, class: CommonCartridge::Elements::Lom::Lom end end end diff --git a/lib/common_cartridge/elements/resources/attachments.rb b/lib/common_cartridge/elements/resources/attachments.rb index a48eb73..a1fcabd 100644 --- a/lib/common_cartridge/elements/resources/attachments.rb +++ b/lib/common_cartridge/elements/resources/attachments.rb @@ -12,7 +12,7 @@ class Attachment class RootAttachment include SAXMachine - elements :attachment, class: Attachment, as: :attachments + elements :'dt:attachment', class: Attachment, as: :attachments end end end diff --git a/lib/common_cartridge/elements/resources/topic.rb b/lib/common_cartridge/elements/resources/topic.rb index faffa35..de6e770 100644 --- a/lib/common_cartridge/elements/resources/topic.rb +++ b/lib/common_cartridge/elements/resources/topic.rb @@ -6,10 +6,10 @@ class Topic include SAXMachine - element :title - element :text - element :text, value: :texttype, as: :text_type - element :attachments, class: Attachments::RootAttachment, as: :attachment_root + element 'dt:title', as: :title + element 'dt:text', as: :text + element 'dt:text', value: :texttype, as: :text_type + element 'dt:attachments', class: Attachments::RootAttachment, as: :attachment_root def attachments attachment_root.attachments diff --git a/spec/elements/manifest_spec.rb b/spec/elements/manifest_spec.rb index 13333c8..5346578 100644 --- a/spec/elements/manifest_spec.rb +++ b/spec/elements/manifest_spec.rb @@ -22,6 +22,10 @@ module Elements it "has resources" do expect(@manifest.root_resource).to be_kind_of(CommonCartridge::Elements::Resources::RootResource) end + + it "has identifier" do + expect(@manifest.identifier).to eq('if33b9cbc13c56657b05bec722d30b84f') + end end end end From 967c2b2e1dd0e2479277aef70e2cd9b7a7067eb7 Mon Sep 17 00:00:00 2001 From: Remy Obein Date: Thu, 29 Nov 2018 11:54:28 +0000 Subject: [PATCH 04/13] Change Lom::Title element to support multiple languages. --- lib/common_cartridge/elements/lom.rb | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/common_cartridge/elements/lom.rb b/lib/common_cartridge/elements/lom.rb index 511b75c..f165756 100644 --- a/lib/common_cartridge/elements/lom.rb +++ b/lib/common_cartridge/elements/lom.rb @@ -1,11 +1,22 @@ module CommonCartridge module Elements module Lom + class LanguageString + include SAXMachine + + attribute :language + value :value + end + class Title include SAXMachine - element 'lomimscc:string', as: :value - element 'lomimscc:string', value: :language, as: :language + # http://www.imsglobal.org/profile/cc/ccv1p3/LOM/ccv1p3_lommanifest_v1p0.xsd + elements 'lomimscc:string', as: :strings, class: CommonCartridge::Elements::Lom::LanguageString + + # backward compatibility + def value; strings.first.value; end + def language; strings.first.language; end def to_s; string; end end From 3c6ecade9bb782f5359e9c7c74eece63965475b1 Mon Sep 17 00:00:00 2001 From: Remy Obein Date: Mon, 26 Nov 2018 14:18:09 +0000 Subject: [PATCH 05/13] Remove identifierref attribute from the organization element. --- lib/common_cartridge/elements/organizations.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/common_cartridge/elements/organizations.rb b/lib/common_cartridge/elements/organizations.rb index 45c81e4..7fd7cbf 100644 --- a/lib/common_cartridge/elements/organizations.rb +++ b/lib/common_cartridge/elements/organizations.rb @@ -17,8 +17,6 @@ class RootItem include SAXMachine attribute :identifier - attribute :identifierref - elements :item, class: Item, as: :items # todo: implement 'find_by' method here to quickly scan for particular items From bed8884d8a2b99d0aa38196a5b0f9cc5da0c3ec9 Mon Sep 17 00:00:00 2001 From: Remy Obein Date: Mon, 26 Nov 2018 14:19:56 +0000 Subject: [PATCH 06/13] Add method to Lom::Element to return all title translation. --- lib/common_cartridge/elements/lom.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/common_cartridge/elements/lom.rb b/lib/common_cartridge/elements/lom.rb index f165756..b22c3c6 100644 --- a/lib/common_cartridge/elements/lom.rb +++ b/lib/common_cartridge/elements/lom.rb @@ -18,6 +18,12 @@ class Title def value; strings.first.value; end def language; strings.first.language; end + def values + strings.map do |str| + [str.language, str.value] + end.to_h + end + def to_s; string; end end From e8ceb901f4a15ed4bf0f5d08fe2315984f911f6b Mon Sep 17 00:00:00 2001 From: Chadwick Bidwell Date: Thu, 1 Jun 2017 17:56:29 -0700 Subject: [PATCH 07/13] Add Basic LTI Link resource type for common cartridge. --- lib/common_cartridge/elements/resources.rb | 4 ++- .../elements/resources/basic_lti_link.rb | 27 ++++++++++++++++++ .../elements/resources/basic_lti_link_spec.rb | 27 ++++++++++++++++++ spec/files/canvas_small_1.1.imscc | Bin 28331 -> 27221 bytes 4 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 lib/common_cartridge/elements/resources/basic_lti_link.rb create mode 100644 spec/elements/resources/basic_lti_link_spec.rb diff --git a/lib/common_cartridge/elements/resources.rb b/lib/common_cartridge/elements/resources.rb index 43e19a3..c088648 100644 --- a/lib/common_cartridge/elements/resources.rb +++ b/lib/common_cartridge/elements/resources.rb @@ -4,6 +4,7 @@ require 'common_cartridge/elements/resources/assignment' require 'common_cartridge/elements/resources/assessment' require 'common_cartridge/elements/resources/page' +require 'common_cartridge/elements/resources/basic_lti_link' module CommonCartridge module Elements @@ -15,7 +16,8 @@ def self.type_mappings WebLink.pattern => WebLink, Assignment.pattern => Assignment, Assessment.pattern => Assessment, - Page.pattern => Page + Page.pattern => Page, + BasicLTILink.pattern => BasicLTILink } end diff --git a/lib/common_cartridge/elements/resources/basic_lti_link.rb b/lib/common_cartridge/elements/resources/basic_lti_link.rb new file mode 100644 index 0000000..693f2c0 --- /dev/null +++ b/lib/common_cartridge/elements/resources/basic_lti_link.rb @@ -0,0 +1,27 @@ +module CommonCartridge + module Elements + module Resources + class BasicLTILink + attr_accessor :identifier + + include SAXMachine + + element :title + element :description + element :secure_launch_url + element :code, :as => :vendor_code + element :name, :as => :vendor_name + element :url, :as => :vendor_url + element :email, :as => :vendor_contact_email + + def self.type + :basic_lti_link + end + + def self.pattern + /imsbasiclti_xmlv1p0/ + end + end + end + end +end \ No newline at end of file diff --git a/spec/elements/resources/basic_lti_link_spec.rb b/spec/elements/resources/basic_lti_link_spec.rb new file mode 100644 index 0000000..df55f15 --- /dev/null +++ b/spec/elements/resources/basic_lti_link_spec.rb @@ -0,0 +1,27 @@ +require 'spec_helper' + +module CommonCartridge + module Elements + module Resources + describe BasicLTILink do + before(:all) do + manifest = CommonCartridge.parse_from_zip('canvas_small_1.1.imscc').manifest + @resource = manifest.resources.detect { |r| r.identifier =~ /I_00015_R/ } + end + + it "is parsed correctly" do + expect(@resource.files.first.content).to be_kind_of(CommonCartridge::Elements::Resources::BasicLTILink) + end + + it "has a title" do + expect(@resource.files.first.content.title).to eq('Semester 1 Overview') + end + + it "has a secure_launch_url" do + expect(@resource.files.first.content.secure_launch_url).to eq('https://fakecollege.com/activity_lists/student-resources--122/activities/semester-1-overview--17?custom_course_id=275') + end + end + end + end +end + diff --git a/spec/files/canvas_small_1.1.imscc b/spec/files/canvas_small_1.1.imscc index 8083764353691d02dd5b34d6e05544a2ccd18873..45bc90af8f3025ec5ab15666bb73ce3234334e95 100644 GIT binary patch delta 6723 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 delta 7743 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 Date: Thu, 29 Nov 2018 11:40:55 +0000 Subject: [PATCH 08/13] Add xml namespaces to basic lti link. --- .../elements/resources/basic_lti_link.rb | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/common_cartridge/elements/resources/basic_lti_link.rb b/lib/common_cartridge/elements/resources/basic_lti_link.rb index 693f2c0..27ea698 100644 --- a/lib/common_cartridge/elements/resources/basic_lti_link.rb +++ b/lib/common_cartridge/elements/resources/basic_lti_link.rb @@ -6,6 +6,13 @@ class BasicLTILink include SAXMachine + attribute :xmlns + attribute 'xmlns:blti', as: :xmlns_blti + attribute 'xmlns:lticm', as: :xmlns_lticm + attribute 'xmlns:lticp', as: :xmlns_lticp + attribute 'xmlns:xsi', as: :xmlns_xsi + attribute 'xsi:schemaLocation', as: :xsi_schema_location + element :title element :description element :secure_launch_url @@ -24,4 +31,4 @@ def self.pattern end end end -end \ No newline at end of file +end From d9d4a274b016576396dabc9db8a190d7db0be910 Mon Sep 17 00:00:00 2001 From: Remy Obein Date: Fri, 30 Nov 2018 17:16:57 +0000 Subject: [PATCH 09/13] Add vendor contact and xml namespaces to BasicLtiLink. --- lib/common_cartridge/elements/resources.rb | 2 +- .../elements/resources/basic_lti_link.rb | 63 ++++++++++++------- 2 files changed, 40 insertions(+), 25 deletions(-) diff --git a/lib/common_cartridge/elements/resources.rb b/lib/common_cartridge/elements/resources.rb index c088648..f6a0897 100644 --- a/lib/common_cartridge/elements/resources.rb +++ b/lib/common_cartridge/elements/resources.rb @@ -17,7 +17,7 @@ def self.type_mappings Assignment.pattern => Assignment, Assessment.pattern => Assessment, Page.pattern => Page, - BasicLTILink.pattern => BasicLTILink + BasicLtiLink::BasicLtiLink.pattern => BasicLtiLink::BasicLtiLink } end diff --git a/lib/common_cartridge/elements/resources/basic_lti_link.rb b/lib/common_cartridge/elements/resources/basic_lti_link.rb index 27ea698..c759400 100644 --- a/lib/common_cartridge/elements/resources/basic_lti_link.rb +++ b/lib/common_cartridge/elements/resources/basic_lti_link.rb @@ -1,32 +1,47 @@ module CommonCartridge module Elements module Resources - class BasicLTILink - attr_accessor :identifier - - include SAXMachine - - attribute :xmlns - attribute 'xmlns:blti', as: :xmlns_blti - attribute 'xmlns:lticm', as: :xmlns_lticm - attribute 'xmlns:lticp', as: :xmlns_lticp - attribute 'xmlns:xsi', as: :xmlns_xsi - attribute 'xsi:schemaLocation', as: :xsi_schema_location - - element :title - element :description - element :secure_launch_url - element :code, :as => :vendor_code - element :name, :as => :vendor_name - element :url, :as => :vendor_url - element :email, :as => :vendor_contact_email - - def self.type - :basic_lti_link + module BasicLtiLink + class VendorContact + include SAXMachine + + element 'lticp:email', as: :email end - def self.pattern - /imsbasiclti_xmlv1p0/ + class Vendor + include SAXMachine + + element 'lticp:code', as: :code + element 'lticp:name', as: :name + element 'lticp:description', as: :description + element 'lticp:url', as: :url + element 'lticp:contact', class: VendorContact, as: :contact + end + + class BasicLtiLink + attr_accessor :identifier + + include SAXMachine + + attribute :xmlns + attribute 'xmlns:blti', as: :xmlns_blti + attribute 'xmlns:lticm', as: :xmlns_lticm + attribute 'xmlns:lticp', as: :xmlns_lticp + attribute 'xmlns:xsi', as: :xmlns_xsi + attribute 'xsi:schemaLocation', as: :xsi_schema_location + + element 'blti:title', as: :title + element 'blti:description', as: :description + element 'blti:secure_launch_url', as: :secure_launch_url + element 'blti:vendor', class: Vendor, as: :vendor + + def self.type + :basic_lti_link + end + + def self.pattern + /imsbasiclti_xmlv1p0/ + end end end end From 92e278da8682fab9656ddee052c918b9dc1432ee Mon Sep 17 00:00:00 2001 From: Remy Obein Date: Thu, 3 Jan 2019 17:46:14 +0000 Subject: [PATCH 10/13] Add extension to BasicLtiLink. --- .../elements/resources/basic_lti_link.rb | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/lib/common_cartridge/elements/resources/basic_lti_link.rb b/lib/common_cartridge/elements/resources/basic_lti_link.rb index c759400..e19f658 100644 --- a/lib/common_cartridge/elements/resources/basic_lti_link.rb +++ b/lib/common_cartridge/elements/resources/basic_lti_link.rb @@ -18,6 +18,20 @@ class Vendor element 'lticp:contact', class: VendorContact, as: :contact end + class ExtensionProperty + include SAXMachine + + attribute :name + value :value + end + + class Extension + include SAXMachine + + attribute :platform + elements 'lticm:property', class: ExtensionProperty, as: :properties + end + class BasicLtiLink attr_accessor :identifier @@ -33,8 +47,11 @@ class BasicLtiLink element 'blti:title', as: :title element 'blti:description', as: :description element 'blti:secure_launch_url', as: :secure_launch_url + element 'blti:launch_url', as: :launch_url element 'blti:vendor', class: Vendor, as: :vendor + elements 'blti:extensions', class: Extension, as: :extensions + def self.type :basic_lti_link end From 8c36e63f1c4a4b9a5c002d1c16ed1a86345a45a2 Mon Sep 17 00:00:00 2001 From: Adam Alboyadjian Date: Thu, 7 Mar 2019 13:47:00 -0300 Subject: [PATCH 11/13] Bump version to 2.0.0. --- common_cartridge.gemspec | 30 ++++++++++++++++-------------- lib/common_cartridge.rb | 1 + lib/common_cartridge/version.rb | 3 +++ 3 files changed, 20 insertions(+), 14 deletions(-) create mode 100644 lib/common_cartridge/version.rb diff --git a/common_cartridge.gemspec b/common_cartridge.gemspec index 918dc20..a1505ae 100644 --- a/common_cartridge.gemspec +++ b/common_cartridge.gemspec @@ -2,26 +2,28 @@ lib = File.expand_path('../lib', __FILE__) $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) +require 'common_cartridge/version' + Gem::Specification.new do |spec| - spec.name = "common_cartridge" - spec.version = "1.0.1" - spec.authors = ["Josh Simpson"] - spec.email = ["jsimpson@instructure.com"] + spec.name = 'common_cartridge' + spec.version = CommonCartridge::VERSION + spec.authors = ['Josh Simpson', 'Remy Obein'] + spec.email = ['jsimpson@instructure.com', 'remy@cassia.tech'] spec.summary = %q{CommonCartridge} - spec.description = "Parse IMS Common Cartridge packages" - spec.homepage = "http://www.instructure.com/" - spec.license = "MIT" + spec.description = 'Parse IMS Common Cartridge packages' + spec.homepage = 'http://www.instructure.com/' + spec.license = 'MIT' spec.files = Dir.glob("{lib,spec}/**/*") spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) } spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) - spec.require_paths = ["lib"] + spec.require_paths = ['lib'] - spec.add_dependency "sax-machine", "~> 1.3.2" - spec.add_dependency "nokogiri", "~> 1.8.1" - spec.add_dependency "rubyzip", "~> 1.2.1" + spec.add_dependency 'sax-machine', '~> 1.3.2' + spec.add_dependency 'nokogiri', '~> 1.8.1' + spec.add_dependency 'rubyzip', '~> 1.2.1' - spec.add_development_dependency "bundler" - spec.add_development_dependency "rake" - spec.add_development_dependency "rspec", "~> 3.0" + spec.add_development_dependency 'bundler' + spec.add_development_dependency 'rake' + spec.add_development_dependency 'rspec', '~> 3.0' end diff --git a/lib/common_cartridge.rb b/lib/common_cartridge.rb index 3aa6952..781a557 100644 --- a/lib/common_cartridge.rb +++ b/lib/common_cartridge.rb @@ -37,3 +37,4 @@ def initialize require 'common_cartridge/elements/manifest' require 'common_cartridge/package' require 'common_cartridge/parsers/parser' +require 'common_cartridge/version' diff --git a/lib/common_cartridge/version.rb b/lib/common_cartridge/version.rb new file mode 100644 index 0000000..c51aa99 --- /dev/null +++ b/lib/common_cartridge/version.rb @@ -0,0 +1,3 @@ +module CommonCartridge + VERSION = '2.0.0'.freeze +end From 954a4c0aa3fd940e96677dba5c327a3fec4b3bac Mon Sep 17 00:00:00 2001 From: Remy Obein Date: Tue, 18 Jun 2019 20:08:45 +0000 Subject: [PATCH 12/13] specs: Fix basic lti link spec. --- spec/elements/resources/basic_lti_link_spec.rb | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/spec/elements/resources/basic_lti_link_spec.rb b/spec/elements/resources/basic_lti_link_spec.rb index df55f15..565e105 100644 --- a/spec/elements/resources/basic_lti_link_spec.rb +++ b/spec/elements/resources/basic_lti_link_spec.rb @@ -3,21 +3,23 @@ module CommonCartridge module Elements module Resources - describe BasicLTILink do + describe BasicLtiLink do before(:all) do manifest = CommonCartridge.parse_from_zip('canvas_small_1.1.imscc').manifest @resource = manifest.resources.detect { |r| r.identifier =~ /I_00015_R/ } end - it "is parsed correctly" do - expect(@resource.files.first.content).to be_kind_of(CommonCartridge::Elements::Resources::BasicLTILink) + it 'is parsed correctly' do + expect(@resource.files.first.content).to be_kind_of( + CommonCartridge::Elements::Resources::BasicLtiLink::BasicLtiLink + ) end - it "has a title" do + it 'has a title' do expect(@resource.files.first.content.title).to eq('Semester 1 Overview') end - it "has a secure_launch_url" do + it 'has a secure_launch_url' do expect(@resource.files.first.content.secure_launch_url).to eq('https://fakecollege.com/activity_lists/student-resources--122/activities/semester-1-overview--17?custom_course_id=275') end end From 6f5ce9562cb0d4d5a86ea7cd77059826ef3c4955 Mon Sep 17 00:00:00 2001 From: Remy Obein Date: Tue, 18 Jun 2019 20:09:09 +0000 Subject: [PATCH 13/13] Change basic lti link pattern to allow v1p0 and v1p1. --- lib/common_cartridge/elements/resources/basic_lti_link.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/common_cartridge/elements/resources/basic_lti_link.rb b/lib/common_cartridge/elements/resources/basic_lti_link.rb index e19f658..7e81d24 100644 --- a/lib/common_cartridge/elements/resources/basic_lti_link.rb +++ b/lib/common_cartridge/elements/resources/basic_lti_link.rb @@ -57,7 +57,7 @@ def self.type end def self.pattern - /imsbasiclti_xmlv1p0/ + /imsbasiclti_xmlv1p/ end end end