canvas_link_migrator 1.0.1 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/canvas_link_migrator/link_parser.rb +12 -3
- data/spec/canvas_link_migrator/link_parser_spec.rb +51 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 68ad9b1c1c452ba59ce56cae7ec072c38c185a4b5e4e3457082d8356dc95cd95
|
4
|
+
data.tar.gz: cc85f34cf8cb4abdb812d6582f213371afc6ccfd0a8ca6bb11f6152367d3d359
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8c8c85af3a7357591b9f07ddae0c98649c72880fc134c56cdafb20deb5083d2379020b7c459b191beeb4973f8fab878c831fb39b801b4249f4f8d1407eaec040
|
7
|
+
data.tar.gz: eded5e2885a8e3be4c22a2878c75e7ad889621f5a0f2bc4b57242656e5800aab0ad87d1ce5d18185b4080c1526f50382b81c49330feb74bf3d90925926cdbea3
|
@@ -129,7 +129,12 @@ module CanvasLinkMigrator
|
|
129
129
|
url.gsub!("%24#{ref}%24", "$#{ref}$")
|
130
130
|
end
|
131
131
|
|
132
|
-
|
132
|
+
begin
|
133
|
+
result = parse_url(url, node, attr)
|
134
|
+
rescue Addressable::URI::InvalidURIError
|
135
|
+
return
|
136
|
+
end
|
137
|
+
|
133
138
|
if result[:resolved]
|
134
139
|
# resolved, just replace and carry on
|
135
140
|
new_url = result[:new_url] || url
|
@@ -166,6 +171,10 @@ module CanvasLinkMigrator
|
|
166
171
|
else
|
167
172
|
result[:old_value] = node[attr]
|
168
173
|
result[:placeholder] = placeholder(result[:old_value])
|
174
|
+
# replace the inner html of an anchor tag if it matches the href
|
175
|
+
if node.name == "a" && attr == "href" && node["href"] == node.inner_html.delete("\n").strip
|
176
|
+
node.inner_html = result[:placeholder]
|
177
|
+
end
|
169
178
|
node[attr] = result[:placeholder]
|
170
179
|
end
|
171
180
|
add_unresolved_link(result, item_type, mig_id, field)
|
@@ -177,7 +186,7 @@ module CanvasLinkMigrator
|
|
177
186
|
end
|
178
187
|
|
179
188
|
def resolved(new_url = nil)
|
180
|
-
{ resolved: true, new_url: new_url
|
189
|
+
{ resolved: true, new_url: new_url}
|
181
190
|
end
|
182
191
|
|
183
192
|
# returns a hash with resolution status and data to hold onto if unresolved
|
@@ -186,7 +195,7 @@ module CanvasLinkMigrator
|
|
186
195
|
query_values = parsed_url.query_values
|
187
196
|
media_attachment = query_values.try(:delete, "media_attachment") == "true"
|
188
197
|
if media_attachment
|
189
|
-
parsed_url.query_values = query_values.
|
198
|
+
parsed_url.query_values = query_values.presence || nil
|
190
199
|
url = Addressable::URI.unencode(parsed_url)
|
191
200
|
end
|
192
201
|
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# Copyright (C) 2023 - present Instructure, Inc.
|
5
|
+
#
|
6
|
+
# This file is part of Canvas.
|
7
|
+
#
|
8
|
+
# Canvas is free software: you can redistribute it and/or modify it under
|
9
|
+
# the terms of the GNU Affero General Public License as published by the Free
|
10
|
+
# Software Foundation, version 3 of the License.
|
11
|
+
#
|
12
|
+
# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY
|
13
|
+
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
14
|
+
# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
15
|
+
# details.
|
16
|
+
#
|
17
|
+
# You should have received a copy of the GNU Affero General Public License along
|
18
|
+
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
|
+
#
|
20
|
+
|
21
|
+
require "spec_helper"
|
22
|
+
|
23
|
+
describe CanvasLinkMigrator::LinkParser do
|
24
|
+
def parser
|
25
|
+
migration_query_service_mock = double()
|
26
|
+
allow(migration_query_service_mock).to receive(:supports_embedded_images).and_return(true)
|
27
|
+
allow(migration_query_service_mock).to receive(:fix_relative_urls?).and_return(true)
|
28
|
+
CanvasLinkMigrator::LinkParser.new(migration_query_service_mock)
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "convert_link" do
|
32
|
+
it "converts inner html of anchor tags when appropriate" do
|
33
|
+
doc = Nokogiri::HTML5.fragment("<a href=\"$WIKI_REFERENCE$/pages/1\">$WIKI_REFERENCE$/pages/1</a>")
|
34
|
+
parser.convert_link(doc.at_css('a'), "href","wiki_page", "migrationid", "")
|
35
|
+
expect(doc.at_css('a')['href']).to include("LINK.PLACEHOLDER")
|
36
|
+
expect(doc.at_css('a').inner_html).to include("LINK.PLACEHOLDER")
|
37
|
+
end
|
38
|
+
|
39
|
+
it "doesn't convert inner html of anchor tags if unnecessary" do
|
40
|
+
doc = Nokogiri::HTML5.fragment("<a href=\"$WIKI_REFERENCE$/pages/1\">$WIKI_REFERENCE$/pages/5</a>")
|
41
|
+
parser.convert_link(doc.at_css('a'), "href","wiki_page", "migrationid", "")
|
42
|
+
expect(doc.at_css('a')['href']).to include("LINK.PLACEHOLDER")
|
43
|
+
expect(doc.at_css('a').inner_html).not_to include("LINK.PLACEHOLDER")
|
44
|
+
end
|
45
|
+
|
46
|
+
it "doesn't convert inner html of anchor tags if unnecessary" do
|
47
|
+
doc = Nokogiri::HTML5.fragment("<a href=\"https://what:10.1111/HFP.0b013e31828df26\">broken link</a>")
|
48
|
+
expect{ parser.convert_link(doc.at_css('a'), "href", "wiki_page", "migrationid", "") }.not_to raise_error
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
metadata
CHANGED
@@ -1,16 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: canvas_link_migrator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mysti Lilla
|
8
8
|
- James Logan
|
9
9
|
- Sarah Gerard
|
10
|
+
- Math Costa
|
10
11
|
autorequire:
|
11
12
|
bindir: bin
|
12
13
|
cert_chain: []
|
13
|
-
date:
|
14
|
+
date: 2024-01-29 00:00:00.000000000 Z
|
14
15
|
dependencies:
|
15
16
|
- !ruby/object:Gem::Dependency
|
16
17
|
name: activesupport
|
@@ -129,6 +130,7 @@ email:
|
|
129
130
|
- mysti@instructure.com
|
130
131
|
- james.logan@instructure.com
|
131
132
|
- sarah.gerard@instructure.com
|
133
|
+
- luis.oliveira@instructure.com
|
132
134
|
executables: []
|
133
135
|
extensions: []
|
134
136
|
extra_rdoc_files: []
|
@@ -141,6 +143,7 @@ files:
|
|
141
143
|
- lib/canvas_link_migrator/resource_map_service.rb
|
142
144
|
- lib/canvas_link_migrator/version.rb
|
143
145
|
- spec/canvas_link_migrator/imported_html_converter_spec.rb
|
146
|
+
- spec/canvas_link_migrator/link_parser_spec.rb
|
144
147
|
- spec/canvas_link_migrator/link_resolver_spec.rb
|
145
148
|
- spec/canvas_link_migrator_spec.rb
|
146
149
|
- spec/fixtures/canvas_resource_map.json
|