jekyll-redirect-from 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rspec +2 -0
- data/.travis.yml +6 -0
- data/History.markdown +27 -0
- data/README.md +3 -1
- data/Rakefile +5 -0
- data/jekyll-redirect-from.gemspec +3 -2
- data/lib/jekyll-redirect-from.rb +4 -0
- data/lib/jekyll-redirect-from/redirect_page.rb +40 -0
- data/lib/{jekyll/redirect_from.rb → jekyll-redirect-from/redirector.rb} +2 -5
- data/lib/jekyll-redirect-from/version.rb +3 -0
- data/script/bootstrap +3 -0
- data/script/cibuild +4 -0
- data/spec/fixtures/_config.yml +3 -0
- data/spec/fixtures/_posts/2014-01-03-redirect-me-plz.md +6 -0
- data/spec/fixtures/multiple_redirect_urls.md +10 -0
- data/spec/fixtures/one_redirect_url.md +6 -0
- data/spec/jekyll_redirect_from/redirect_page_spec.rb +50 -0
- data/spec/jekyll_redirect_from/redirector_spec.rb +41 -0
- data/spec/spec_helper.rb +48 -0
- metadata +40 -6
- data/lib/jekyll/redirect_from/redirect_page.rb +0 -41
- data/lib/jekyll/redirect_from/version.rb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aec13092a90f8e5d5e8c9b4484b2e78c7dccdd6b
|
4
|
+
data.tar.gz: 18270a4f1c6667b89bda14064042cce909370686
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b108df3637aaf1355a1be30b15432816545fe29c905acc41607008c76b4a1fc9b2418c025eba1bd620315917284dcf2e7b88ea8f3cbb491dd60ede933126d4c2
|
7
|
+
data.tar.gz: e9328c6da23831ac226d13266f0b01fe620c59c8c02c7a8df0dfc06856b0607e9b08599a06bc1cb991eefe37ef94b44f93d5c199de3c0b9ea5901242388e14cc
|
data/.rspec
ADDED
data/.travis.yml
ADDED
data/History.markdown
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
## HEAD
|
2
|
+
|
3
|
+
### Major Enhancements
|
4
|
+
|
5
|
+
### Minor Enhancements
|
6
|
+
|
7
|
+
### Bug Fixes
|
8
|
+
|
9
|
+
### Development Fixes
|
10
|
+
|
11
|
+
## 0.2.0 / 2014-01-04
|
12
|
+
|
13
|
+
### Minor Enhancements
|
14
|
+
|
15
|
+
* Allow user to set one or many `redirect_from` URLs
|
16
|
+
* Rename from `jekyll-alt-urls` to `jekyll-redirect-from` (props to @benbalter)
|
17
|
+
* Namespace now its own module: `JekyllRedirectFrom` (#3)
|
18
|
+
|
19
|
+
### Development Fixes
|
20
|
+
|
21
|
+
* Add history file
|
22
|
+
* Add specs (#3)
|
23
|
+
* Add TravisCI badge (#4)
|
24
|
+
|
25
|
+
## 0.1.0 / 2013-12-15
|
26
|
+
|
27
|
+
* Birthday!
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# JekyllRedirectFrom
|
2
2
|
|
3
3
|
Give your Jekyll posts and pages multiple URLs.
|
4
4
|
|
@@ -9,6 +9,8 @@ impractical to create new pages in the proper subdirectories so they, e.g.
|
|
9
9
|
Instead of dealing with maintaining those pages for redirection, let
|
10
10
|
`jekyll-redirect-from` handle it for you.
|
11
11
|
|
12
|
+
[](https://travis-ci.org/jekyll/jekyll-redirect-from)
|
13
|
+
|
12
14
|
## Installation
|
13
15
|
|
14
16
|
Add this line to your application's Gemfile:
|
data/Rakefile
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
lib = File.expand_path('../lib', __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'jekyll/
|
4
|
+
require 'jekyll-redirect-from/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "jekyll-redirect-from"
|
8
|
-
spec.version =
|
8
|
+
spec.version = JekyllRedirectFrom::VERSION
|
9
9
|
spec.authors = ["Parker Moore"]
|
10
10
|
spec.email = ["parkrmoore@gmail.com"]
|
11
11
|
spec.description = %q{Seamlessly specify multiple redirection URLs for your pages and posts}
|
@@ -22,4 +22,5 @@ Gem::Specification.new do |spec|
|
|
22
22
|
|
23
23
|
spec.add_development_dependency "bundler", "~> 1.3"
|
24
24
|
spec.add_development_dependency "rake"
|
25
|
+
spec.add_development_dependency "rspec"
|
25
26
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module JekyllRedirectFrom
|
2
|
+
class RedirectPage < Jekyll::Page
|
3
|
+
# Initialize a new RedirectPage.
|
4
|
+
#
|
5
|
+
# site - The Site object.
|
6
|
+
# base - The String path to the source.
|
7
|
+
# dir - The String path between the source and the file.
|
8
|
+
# name - The String filename of the file.
|
9
|
+
def initialize(site, base, dir, name)
|
10
|
+
@site = site
|
11
|
+
@base = base
|
12
|
+
@dir = dir
|
13
|
+
@name = name
|
14
|
+
|
15
|
+
self.process(name)
|
16
|
+
self.data = {}
|
17
|
+
end
|
18
|
+
|
19
|
+
def generate_redirect_content(item_url)
|
20
|
+
self.output = self.content = <<-EOF
|
21
|
+
<!DOCTYPE html>
|
22
|
+
<html>
|
23
|
+
<head>
|
24
|
+
<title>Redirecting...</title>
|
25
|
+
<link rel="canonical" href="#{item_url}"/>
|
26
|
+
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
27
|
+
<meta http-equiv="refresh" content="0; url=#{item_url}" />
|
28
|
+
</head>
|
29
|
+
<body>
|
30
|
+
<p><strong>Redirecting...</strong></p>
|
31
|
+
<p><a href='#{item_url}'>Click here if you are not redirected.</a></p>
|
32
|
+
<script>
|
33
|
+
document.location.href = "#{item_url}";
|
34
|
+
</script>
|
35
|
+
</body>
|
36
|
+
</html>
|
37
|
+
EOF
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -1,8 +1,5 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
module Jekyll
|
5
|
-
class RedirectFrom < Generator
|
1
|
+
module JekyllRedirectFrom
|
2
|
+
class Redirector < Jekyll::Generator
|
6
3
|
def generate(site)
|
7
4
|
original_pages = site.pages.dup
|
8
5
|
generate_alt_urls(site, site.posts)
|
data/script/bootstrap
ADDED
data/script/cibuild
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe JekyllRedirectFrom::RedirectPage do
|
4
|
+
let(:redirect_page) { described_class.new(@site, @site.source, "posts/12435151125", "larry-had-a-little-lamb") }
|
5
|
+
let(:item_url) { File.join(@site.config["url"], "2014", "01", "03", "moving-to-jekyll.md") }
|
6
|
+
let(:page_content) { redirect_page.generate_redirect_content(item_url) }
|
7
|
+
|
8
|
+
context "#generate_redirect_content" do
|
9
|
+
it "sets the #content to the generated refresh page" do
|
10
|
+
expect(page_content).to eq(" <!DOCTYPE html>\n <html>\n <head>\n <title>Redirecting...</title>\n <link rel=\"canonical\" href=\"http://jekyllrb.com/2014/01/03/moving-to-jekyll.md\"/>\n <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n <meta http-equiv=\"refresh\" content=\"0; url=http://jekyllrb.com/2014/01/03/moving-to-jekyll.md\" />\n </head>\n <body>\n <p><strong>Redirecting...</strong></p>\n <p><a href='http://jekyllrb.com/2014/01/03/moving-to-jekyll.md'>Click here if you are not redirected.</a></p>\n <script>\n document.location.href = \"http://jekyllrb.com/2014/01/03/moving-to-jekyll.md\";\n </script>\n </body>\n </html>\n")
|
11
|
+
end
|
12
|
+
|
13
|
+
it "contains the meta refresh tag" do
|
14
|
+
expect(page_content).to include("<meta http-equiv=\"refresh\" content=\"0; url=#{item_url}\" />")
|
15
|
+
end
|
16
|
+
|
17
|
+
it "contains JavaScript redirect" do
|
18
|
+
expect(page_content).to include("document.location.href = \"http://jekyllrb.com/2014/01/03/moving-to-jekyll.md\";")
|
19
|
+
end
|
20
|
+
|
21
|
+
it "contains canonical link in header" do
|
22
|
+
expect(page_content).to include("<link rel=\"canonical\" href=\"http://jekyllrb.com/2014/01/03/moving-to-jekyll.md\"/>")
|
23
|
+
end
|
24
|
+
|
25
|
+
it "contains a clickable link to redirect" do
|
26
|
+
expect(page_content).to include("<a href='http://jekyllrb.com/2014/01/03/moving-to-jekyll.md'>Click here if you are not redirected.</a>")
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context "when writing to disk" do
|
31
|
+
let(:redirect_page_full_path) { redirect_page.destination(@site.dest) }
|
32
|
+
|
33
|
+
before(:each) do
|
34
|
+
redirect_page.generate_redirect_content(item_url)
|
35
|
+
redirect_page.write(@site.dest)
|
36
|
+
end
|
37
|
+
|
38
|
+
it "fetches the path properly" do
|
39
|
+
expect(redirect_page_full_path).to match /\/spec\/fixtures\/\_site\/posts\/12435151125\/larry-had-a-little-lamb/
|
40
|
+
end
|
41
|
+
|
42
|
+
it "is written to the proper location" do
|
43
|
+
expect(File.exist?(redirect_page_full_path)).to be_true
|
44
|
+
end
|
45
|
+
|
46
|
+
it "writes the context we expect" do
|
47
|
+
expect(File.read(redirect_page_full_path)).to eql(page_content)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe JekyllRedirectFrom::Redirector do
|
4
|
+
let(:redirector) { described_class.new }
|
5
|
+
let(:post_to_redirect) { setup_post("2014-01-03-redirect-me-plz.md") }
|
6
|
+
let(:page_with_one) { setup_page("one_redirect_url.md") }
|
7
|
+
let(:page_with_many) { setup_page("multiple_redirect_urls.md") }
|
8
|
+
|
9
|
+
it "knows if a page or post is requesting a redirect page" do
|
10
|
+
expect(redirector.has_alt_urls?(post_to_redirect)).to be_true
|
11
|
+
end
|
12
|
+
|
13
|
+
it "handles one redirect path" do
|
14
|
+
expect(redirector.alt_urls(page_with_one)).to eql(["mencius/was/my/father"])
|
15
|
+
end
|
16
|
+
|
17
|
+
it "handles many redirect paths" do
|
18
|
+
expect(redirector.alt_urls(page_with_many)).to eql(["help", "contact", "let-there/be/light-he-said", "/geepers/mccreepin"])
|
19
|
+
end
|
20
|
+
|
21
|
+
context "refresh page generation" do
|
22
|
+
before(:all) do
|
23
|
+
described_class.new.generate(@site)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "generates the refresh page for the post properly" do
|
27
|
+
expect(destination_file_exists?("posts/23128432159832/mary-had-a-little-lamb")).to be_true
|
28
|
+
end
|
29
|
+
|
30
|
+
it "generates the refresh pages for the page with multiple redirect_from urls" do
|
31
|
+
expect(destination_file_exists?("help")).to be_true
|
32
|
+
expect(destination_file_exists?("contact")).to be_true
|
33
|
+
expect(destination_file_exists?("let-there/be/light-he-said")).to be_true
|
34
|
+
expect(destination_file_exists?("/geepers/mccreepin")).to be_true
|
35
|
+
end
|
36
|
+
|
37
|
+
it "generates the refresh page for the page with one redirect_from url" do
|
38
|
+
expect(destination_file_exists?("mencius/was/my/father")).to be_true
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
require "jekyll"
|
2
|
+
require File.expand_path("lib/jekyll-redirect-from.rb")
|
3
|
+
|
4
|
+
RSpec.configure do |config|
|
5
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
6
|
+
config.run_all_when_everything_filtered = true
|
7
|
+
config.filter_run :focus
|
8
|
+
config.order = 'random'
|
9
|
+
|
10
|
+
config.expect_with :rspec do |c|
|
11
|
+
c.syntax = :expect
|
12
|
+
end
|
13
|
+
|
14
|
+
config.before(:all) do
|
15
|
+
Jekyll.logger.log_level = Jekyll::Stevenson::ERROR
|
16
|
+
|
17
|
+
@fixtures_path = Pathname.new(__FILE__).parent.join("fixtures")
|
18
|
+
@dest = @fixtures_path.join("_site")
|
19
|
+
@posts_src = File.join(@fixtures_path, "_posts")
|
20
|
+
@layouts_src = File.join(@fixtures_path, "_layouts")
|
21
|
+
@plugins_src = File.join(@fixtures_path, "_plugins")
|
22
|
+
|
23
|
+
@site = Jekyll::Site.new(Jekyll.configuration({
|
24
|
+
"source" => @fixtures_path.to_s,
|
25
|
+
"destination" => @dest.to_s,
|
26
|
+
"plugins" => @plugins_src
|
27
|
+
}))
|
28
|
+
|
29
|
+
@dest.rmtree if @dest.exist?
|
30
|
+
@site.process
|
31
|
+
end
|
32
|
+
|
33
|
+
config.after(:all) do
|
34
|
+
@dest.rmtree if @dest.exist?
|
35
|
+
end
|
36
|
+
|
37
|
+
def setup_post(file)
|
38
|
+
Jekyll::Post.new(@site, @fixtures_path, '', file)
|
39
|
+
end
|
40
|
+
|
41
|
+
def setup_page(file)
|
42
|
+
Jekyll::Page.new(@site, @fixtures_path, File.dirname(file), File.basename(file))
|
43
|
+
end
|
44
|
+
|
45
|
+
def destination_file_exists?(file)
|
46
|
+
File.exists?(File.join(@dest.to_s, file))
|
47
|
+
end
|
48
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-redirect-from
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Parker Moore
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-01-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
description: Seamlessly specify multiple redirection URLs for your pages and posts
|
56
70
|
email:
|
57
71
|
- parkrmoore@gmail.com
|
@@ -60,14 +74,27 @@ extensions: []
|
|
60
74
|
extra_rdoc_files: []
|
61
75
|
files:
|
62
76
|
- .gitignore
|
77
|
+
- .rspec
|
78
|
+
- .travis.yml
|
63
79
|
- Gemfile
|
80
|
+
- History.markdown
|
64
81
|
- LICENSE.txt
|
65
82
|
- README.md
|
66
83
|
- Rakefile
|
67
84
|
- jekyll-redirect-from.gemspec
|
68
|
-
- lib/jekyll
|
69
|
-
- lib/jekyll/
|
70
|
-
- lib/jekyll/
|
85
|
+
- lib/jekyll-redirect-from.rb
|
86
|
+
- lib/jekyll-redirect-from/redirect_page.rb
|
87
|
+
- lib/jekyll-redirect-from/redirector.rb
|
88
|
+
- lib/jekyll-redirect-from/version.rb
|
89
|
+
- script/bootstrap
|
90
|
+
- script/cibuild
|
91
|
+
- spec/fixtures/_config.yml
|
92
|
+
- spec/fixtures/_posts/2014-01-03-redirect-me-plz.md
|
93
|
+
- spec/fixtures/multiple_redirect_urls.md
|
94
|
+
- spec/fixtures/one_redirect_url.md
|
95
|
+
- spec/jekyll_redirect_from/redirect_page_spec.rb
|
96
|
+
- spec/jekyll_redirect_from/redirector_spec.rb
|
97
|
+
- spec/spec_helper.rb
|
71
98
|
homepage: https://github.com/jekyll/jekyll-redirect-from
|
72
99
|
licenses:
|
73
100
|
- MIT
|
@@ -92,4 +119,11 @@ rubygems_version: 2.0.14
|
|
92
119
|
signing_key:
|
93
120
|
specification_version: 4
|
94
121
|
summary: Seamlessly specify multiple redirection URLs for your pages and posts
|
95
|
-
test_files:
|
122
|
+
test_files:
|
123
|
+
- spec/fixtures/_config.yml
|
124
|
+
- spec/fixtures/_posts/2014-01-03-redirect-me-plz.md
|
125
|
+
- spec/fixtures/multiple_redirect_urls.md
|
126
|
+
- spec/fixtures/one_redirect_url.md
|
127
|
+
- spec/jekyll_redirect_from/redirect_page_spec.rb
|
128
|
+
- spec/jekyll_redirect_from/redirector_spec.rb
|
129
|
+
- spec/spec_helper.rb
|
@@ -1,41 +0,0 @@
|
|
1
|
-
module Jekyll
|
2
|
-
class RedirectFrom < Generator
|
3
|
-
class RedirectPage < Page
|
4
|
-
# Initialize a new RedirectPage.
|
5
|
-
#
|
6
|
-
# site - The Site object.
|
7
|
-
# base - The String path to the source.
|
8
|
-
# dir - The String path between the source and the file.
|
9
|
-
# name - The String filename of the file.
|
10
|
-
def initialize(site, base, dir, name)
|
11
|
-
@site = site
|
12
|
-
@base = base
|
13
|
-
@dir = dir
|
14
|
-
@name = name
|
15
|
-
|
16
|
-
self.process(name)
|
17
|
-
end
|
18
|
-
|
19
|
-
def generate_redirect_content(item_url)
|
20
|
-
self.content = <<-EOF
|
21
|
-
<!DOCTYPE html>
|
22
|
-
<html>
|
23
|
-
<head>
|
24
|
-
<title>Redirecting...</title>
|
25
|
-
<link rel="canonical" href="#{item_url}"/>
|
26
|
-
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
27
|
-
<meta http-equiv="refresh" content="0; url=#{item_url}" />
|
28
|
-
</head>
|
29
|
-
<body>
|
30
|
-
<p><strong>Redirecting...</strong></p>
|
31
|
-
<p><a href='#{item_url}'>Click here if you are not redirected.</a></p>
|
32
|
-
<script>
|
33
|
-
document.location.href = "#{item_url}";
|
34
|
-
</script>
|
35
|
-
</body>
|
36
|
-
</html>
|
37
|
-
EOF
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|