class Jekyll::SeoTag::AuthorDrop

A drop representing the current page’s author

Author name will be pulled from:

  1. The page’s ‘author` key

  2. The first author in the page’s ‘authors` key

  3. The ‘author` key in the site config

If the result from the name search is a string, we’ll also check for additional author metadata in ‘site.data.authors`

Attributes

page[R]
site[R]

Public Class Methods

new(page: nil, site: nil) click to toggle source

Initialize a new AuthorDrop

page - The page hash (e.g., Page#to_liquid) site - The Jekyll::Drops::SiteDrop

# File lib/jekyll-seo-tag/author_drop.rb, line 20
def initialize(page: nil, site: nil)
  raise ArgumentError unless page && site

  @mutations = {}
  @page = page
  @site = site
end

Public Instance Methods

name() click to toggle source

AuthorDrop#to_s should return name, allowing the author drop to safely replace ‘page.author`, if necessary, and remain backwards compatible

# File lib/jekyll-seo-tag/author_drop.rb, line 30
def name
  author_hash["name"]
end
Also aliased as: to_s
to_s()
Alias for: name
twitter() click to toggle source
# File lib/jekyll-seo-tag/author_drop.rb, line 35
def twitter
  return @twitter if defined? @twitter

  twitter = author_hash["twitter"] || author_hash["name"]
  @twitter = twitter.is_a?(String) ? twitter.sub(%r!^@!, "") : nil
end

Private Instance Methods

author_hash() click to toggle source

Returns the normalized author hash representing the page author, including site-wide metadata if the author is provided as a string, or an empty hash, if the author cannot be resolved

# File lib/jekyll-seo-tag/author_drop.rb, line 75
def author_hash
  @author_hash ||= begin
    case resolved_author
    when Hash
      resolved_author
    when String
      { "name" => resolved_author }.merge!(site_data_hash)
    else
      {}
    end
  end
end
Also aliased as: fallback_data
fallback_data()

Since author_hash is aliased to fallback_data, any values in the hash will be exposed via the drop, allowing support for arbitrary metadata

Alias for: author_hash
resolved_author() click to toggle source

Finds the page author in the page.author, page.authors, or site.author

Returns a string or hash representing the author

# File lib/jekyll-seo-tag/author_drop.rb, line 49
def resolved_author
  return @resolved_author if defined? @resolved_author

  sources = [page["author"]]
  sources << page["authors"].first if page["authors"].is_a?(Array)
  sources << site["author"]
  @resolved_author = sources.find { |s| !s.to_s.empty? }
end
site_data_hash() click to toggle source

If resolved_author is a string, attempts to find coresponding author metadata in ‘site.data.authors`

Returns a hash representing additional metadata or an empty hash

# File lib/jekyll-seo-tag/author_drop.rb, line 62
def site_data_hash
  @site_data_hash ||= begin
    return {} unless resolved_author.is_a?(String)
    return {} unless site.data["authors"].is_a?(Hash)

    author_hash = site.data["authors"][resolved_author]
    author_hash.is_a?(Hash) ? author_hash : {}
  end
end