Class: JekyllRedirectFrom::Redirector

Inherits:
Jekyll::Generator
  • Object
show all
Defined in:
lib/jekyll-redirect-from/redirector.rb

Instance Method Summary collapse

Instance Method Details

#alt_urls(page_or_post) ⇒ Object



53
54
55
# File 'lib/jekyll-redirect-from/redirector.rb', line 53

def alt_urls(page_or_post)
  Array[page_or_post.data['redirect_from']].flatten.compact
end

#config_baseurl(site) ⇒ Object



80
81
82
# File 'lib/jekyll-redirect-from/redirector.rb', line 80

def config_baseurl(site)
  site.config.fetch('baseurl', nil)
end

#config_github_url(site) ⇒ Object



75
76
77
78
# File 'lib/jekyll-redirect-from/redirector.rb', line 75

def config_github_url(site)
  github_config = site.config['github']
  github_config['url'] if github_config.is_a?(Hash)
end

#generate(site) ⇒ Object



5
6
7
8
9
10
# File 'lib/jekyll-redirect-from/redirector.rb', line 5

def generate(site)
  original_pages = site.pages.dup
  generate_alt_urls(site, site.posts) if Jekyll::VERSION < '3.0.0'
  generate_alt_urls(site, original_pages)
  generate_alt_urls(site, site.docs_to_write)
end

#generate_alt_urls(site, list) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/jekyll-redirect-from/redirector.rb', line 12

def generate_alt_urls(site, list)
  list.each do |item|
    if has_alt_urls?(item)
      alt_urls(item).each do |alt_url|
        redirect_page = RedirectPage.new(site, site.source, "", "")
        redirect_page.data['permalink'] = alt_url
        redirect_page.data['sitemap'] = false
        redirect_page.generate_redirect_content(redirect_url(site, item))
        site.pages << redirect_page
      end
    end
    if has_redirect_to_url?(item)
      redirect_to_url(item).flatten.each do |alt_url|
        item.data['sitemap'] = false
        redirect_page = RedirectPage.new(site, site.source, File.dirname(item.url), File.basename(item.url))
        redirect_page.data['permalink'] = item.url
        redirect_page.data['sitemap'] = false
        redirect_page.generate_redirect_content(alt_url)
        if item.is_a?(Jekyll::Document)
          item.content = item.output = redirect_page.content
        else
          site.pages << redirect_page
        end
      end
    end
  end
end

#has_alt_urls?(page_or_post) ⇒ Boolean

Returns:

  • (Boolean)


47
48
49
50
51
# File 'lib/jekyll-redirect-from/redirector.rb', line 47

def has_alt_urls?(page_or_post)
  is_dynamic_document?(page_or_post) &&
    page_or_post.data.has_key?('redirect_from') &&
    !alt_urls(page_or_post).empty?
end

#has_redirect_to_url?(page_or_post) ⇒ Boolean

Returns:

  • (Boolean)


57
58
59
60
61
# File 'lib/jekyll-redirect-from/redirector.rb', line 57

def has_redirect_to_url?(page_or_post)
  is_dynamic_document?(page_or_post) &&
    page_or_post.data.has_key?('redirect_to') &&
    !redirect_to_url(page_or_post).empty?
end

#is_dynamic_document?(page_or_post) ⇒ Boolean

Returns:

  • (Boolean)


40
41
42
43
44
45
# File 'lib/jekyll-redirect-from/redirector.rb', line 40

def is_dynamic_document?(page_or_post)
  page_or_post.is_a?(Jekyll::Page) ||
    page_or_post.is_a?(Jekyll::Document) ||
    (Jekyll::VERSION < '3.0.0' &&
      page_or_post.is_a?(Jekyll::Post))
end

#redirect_prefix(site) ⇒ Object



71
72
73
# File 'lib/jekyll-redirect-from/redirector.rb', line 71

def redirect_prefix(site)
  config_github_url(site) || config_baseurl(site) || ""
end

#redirect_to_url(page_or_post) ⇒ Object



63
64
65
# File 'lib/jekyll-redirect-from/redirector.rb', line 63

def redirect_to_url(page_or_post)
  [Array[page_or_post.data['redirect_to']].flatten.first].compact
end

#redirect_url(site, item) ⇒ Object



67
68
69
# File 'lib/jekyll-redirect-from/redirector.rb', line 67

def redirect_url(site, item)
  File.join redirect_prefix(site), item.url
end