Skip to content

Commit 1078aa3

Browse files
authored
Merge pull request #85 from dentarg/default-to-site-url
Default to site.url
2 parents 7d0770d + 973f4b9 commit 1078aa3

File tree

3 files changed

+43
-13
lines changed

3 files changed

+43
-13
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,10 +100,10 @@ redirect_from: /post/123456798/
100100
```
101101

102102
### Prefix
103-
If `site.baseurl` is set, its value is used as a prefix for the redirect url automatically.
104-
This is useful for scenarios where a site isn't available from the domain root, so the redirects point to the correct path.
105103

106-
**_Note_**: If you are hosting your Jekyll site on [GitHub Pages](https://pages.github.com/), the prefix is set to the pages domain name i.e. `http://example.github.io/project` or a custom `CNAME`.
104+
If `site.url` is set, its value, together with `site.baseurl`, is used as a prefix for the redirect url automatically. This is useful for scenarios where a site isn't available from the domain root, so the redirects point to the correct path. If `site.url` is not set, only `site.baseurl` is used, if set.
105+
106+
**_Note_**: If you are hosting your Jekyll site on [GitHub Pages](https://pages.github.com/), and `site.url` is not set, the prefix is set to the pages domain name i.e. http://example.github.io/project or a custom CNAME.
107107

108108
### Redirect To
109109

lib/jekyll-redirect-from/redirector.rb

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,13 @@ def redirect_url(site, item)
7171
end
7272

7373
def redirect_prefix(site)
74-
config_github_url(site) || config_url(site)
74+
config_url_and_baseurl(site) || config_github_url(site) || config_baseurl(site) || ""
75+
end
76+
77+
def config_url_and_baseurl(site)
78+
return nil unless config_url(site)
79+
80+
File.join(config_url(site), config_baseurl(site).to_s)
7581
end
7682

7783
def config_github_url(site)
@@ -82,9 +88,11 @@ def config_github_url(site)
8288
end
8389

8490
def config_url(site)
85-
url = site.config.fetch('url', nil) || ""
86-
baseurl = site.config.fetch('baseurl', nil) || ""
87-
File.join url, baseurl
91+
site.config.fetch('url', nil)
92+
end
93+
94+
def config_baseurl(site)
95+
site.config.fetch('baseurl', nil)
8896
end
8997
end
9098
end

spec/jekyll_redirect_from/redirector_spec.rb

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -106,13 +106,17 @@
106106
end
107107

108108
context "prefix" do
109-
it "uses site.url as the redirect prefix when site.github.url is not set" do
110-
@site.config['url'] = "http://notgithub.io"
111-
@site.config['baseurl'] = nil
112-
expect(redirector.redirect_url(@site, page_with_one)).to eql("http://notgithub.io/one_redirect_url.html")
109+
it "uses site.url as the redirect prefix" do
110+
expect(redirector.redirect_url(@site, page_with_one)).to eql("http://jekyllrb.com/one_redirect_url.html")
113111
end
114112

115-
it "uses site.baseurl as the redirect prefix when site.github.url is not set" do
113+
it "uses site.github.url as the redirect prefix when site.url is not set" do
114+
@site.config['url'] = nil
115+
@site.config['github'] = { "url" => "http://example.github.io/test" }
116+
expect(redirector.redirect_url(@site, page_with_one)).to eql("http://example.github.io/test/one_redirect_url.html")
117+
end
118+
119+
it "uses site.baseurl as the redirect prefix when both site.url and site.github.url is not set" do
116120
@site.config['url'] = nil
117121
@site.config['baseurl'] = "/fancy/prefix"
118122
expect(redirector.redirect_url(@site, page_with_one)).to eql("/fancy/prefix/one_redirect_url.html")
@@ -124,14 +128,22 @@
124128
expect(redirector.redirect_url(@site, page_with_one)).to eql("http://notgithub.io/fancy/prefix/one_redirect_url.html")
125129
end
126130

127-
it "prefers site.github.url over site.url or site.baseurl" do
131+
it "prefers site.url + site.baseurl over site.github.url" do
128132
@site.config['url'] = "http://notgithub.io"
129133
@site.config['baseurl'] = "/fancy/prefix"
130134
@site.config['github'] = { "url" => "http://example.github.io/test" }
135+
expect(redirector.redirect_url(@site, page_with_one)).to eql("http://notgithub.io/fancy/prefix/one_redirect_url.html")
136+
end
137+
138+
it "prefers site.github.url over site.baseurl when site.url is not set" do
139+
@site.config['url'] = nil
140+
@site.config['github'] = { "url" => "http://example.github.io/test" }
141+
@site.config['baseurl'] = "/fancy/baseurl"
131142
expect(redirector.redirect_url(@site, page_with_one)).to eql("http://example.github.io/test/one_redirect_url.html")
132143
end
133144

134145
it "converts non-string values in site.github.url to strings" do
146+
@site.config['url'] = nil
135147
@site.config['github'] = { "url" => TestStringContainer.new("http://example.github.io/test") }
136148
expect(redirector.redirect_url(@site, page_with_one)).to eql("http://example.github.io/test/one_redirect_url.html")
137149
end
@@ -145,5 +157,15 @@
145157
@site.config['url'] = nil
146158
expect(redirector.redirect_url(@site, page_with_one)).to eql("/one_redirect_url.html")
147159
end
160+
161+
it "should handle site.baseurl being nil" do
162+
@site.config['baseurl'] = nil
163+
expect(redirector.redirect_url(@site, page_with_one)).to eql("http://jekyllrb.com/one_redirect_url.html")
164+
end
165+
166+
it "no-ops when site.url is empty" do
167+
@site.config['url'] = ""
168+
expect(redirector.redirect_url(@site, page_with_one)).to eql("/one_redirect_url.html")
169+
end
148170
end
149171
end

0 commit comments

Comments
 (0)