class BuntoRedirectFrom::Redirector

Public Instance Methods

alt_urls(page_or_post) click to toggle source
# File lib/bunto-redirect-from/redirector.rb, line 55
def alt_urls(page_or_post)
  Array[page_or_post.data['redirect_from']].flatten.compact
end
config_github_url(site) click to toggle source
# File lib/bunto-redirect-from/redirector.rb, line 77
def config_github_url(site)
  github_config = site.config['github']
  if github_config.is_a?(Hash) && github_config['url']
    github_config['url'].to_s
  end
end
config_url(site) click to toggle source
# File lib/bunto-redirect-from/redirector.rb, line 84
def config_url(site)
  url = site.config.fetch('url', nil) || ""
  baseurl = site.config.fetch('baseurl', nil) || ""
  File.join url, baseurl
end
generate(site) click to toggle source
# File lib/bunto-redirect-from/redirector.rb, line 5
def generate(site)
  original_pages = site.pages.dup
  generate_alt_urls(site, site.posts) if Bunto::VERSION < '3.0.0'
  generate_alt_urls(site, original_pages)
  generate_alt_urls(site, site.docs_to_write)
end
generate_alt_urls(site, list) click to toggle source
# File lib/bunto-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.html")
        redirect_page.data['permalink'] = alt_url
        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
        item.data['layout'] = nil

        item.url << "index.html" if item.url.end_with?("/")
        redirect_page = RedirectPage.new(site, site.source, File.dirname(item.url), File.basename(item.url))

        redirect_page.data['permalink'] = item.url
        redirect_page.generate_redirect_content(alt_url)
        if item.is_a?(Bunto::Document)
          item.content = item.output = redirect_page.content
        else
          site.pages << redirect_page
        end
      end
    end
  end
end
has_alt_urls?(page_or_post) click to toggle source
# File lib/bunto-redirect-from/redirector.rb, line 49
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) click to toggle source
# File lib/bunto-redirect-from/redirector.rb, line 59
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) click to toggle source
# File lib/bunto-redirect-from/redirector.rb, line 42
def is_dynamic_document?(page_or_post)
  page_or_post.is_a?(Bunto::Page) ||
    page_or_post.is_a?(Bunto::Document) ||
    (Bunto::VERSION < '3.0.0' &&
      page_or_post.is_a?(Bunto::Post))
end
redirect_prefix(site) click to toggle source
# File lib/bunto-redirect-from/redirector.rb, line 73
def redirect_prefix(site)
  config_github_url(site) || config_url(site)
end
redirect_to_url(page_or_post) click to toggle source
# File lib/bunto-redirect-from/redirector.rb, line 65
def redirect_to_url(page_or_post)
  [Array[page_or_post.data['redirect_to']].flatten.first].compact
end
redirect_url(site, item) click to toggle source
# File lib/bunto-redirect-from/redirector.rb, line 69
def redirect_url(site, item)
  File.join redirect_prefix(site), item.url
end