class Middleman::OGP::OGPExtension

Middleman::OGP::OGPExtension

Public Instance Methods

after_configuration() click to toggle source
# File lib/middleman-ogp/extension.rb, line 17
def after_configuration
  Middleman::OGP::Helper.namespaces = options[:namespaces] || {}
  Middleman::OGP::Helper.blog = options[:blog]
  Middleman::OGP::Helper.auto = options[:auto]
  Middleman::OGP::Helper.base_url = options[:base_url]
  Middleman::OGP::Helper.image_base_url = options[:image_base_url]
end
ogp_tags(&block) click to toggle source
# File lib/middleman-ogp/extension.rb, line 27
def ogp_tags(&block) # rubocop:disable all
  opts = current_resource.data['ogp'] || {}
  is_blog_article = Middleman::OGP::Helper.blog && respond_to?(:is_blog_article?) && is_blog_article?
  if is_blog_article
    opts.deep_merge4!({
                        og: {
                          type: 'article'
                        },
                        article: {
                          published_time: current_article.date.to_time.utc.iso8601,
                          tag: current_article.tags
                        }
                      })
    opts[:article][:section] = current_article.data.section if current_article.data.section
    if current_article.data.expiration_time
      expiration_time = if current_article.data.expiration_time.is_a? Time
                          current_article.data.expiration_time
                        else
                          Time.parse(current_article.data.expiration_time.to_s)
                        end
      opts[:article][:expiration_time] = expiration_time.utc.iso8601
    end
    if current_article.data.modified_time
      modified_time = if current_article.data.modified_time.is_a? Time
                        current_article.data.modified_time
                      else
                        Time.parse(current_article.data.modified_time.to_s)
                      end
      opts[:article][:modified_time] = modified_time.utc.iso8601
    end

    if current_article.data.author || current_article.data.authors
      authors = current_article.data.authors || [current_article.data.author]
      opts[:article][:author] = []
      authors.each do |author|
        next unless author.is_a?(Hash)

        opts[:article][:author] << author.to_h.symbolize_keys.slice(
          :first_name,
          :last_name,
          :username,
          :gender
        )
      end
    end
  end
  opts[:og] ||= {}
  if Middleman::OGP::Helper.auto.include?('title')
    if current_resource.data['title']
      opts[:og][:title] = current_resource.data['title']
    elsif content_for?(:title)
      opts[:og][:title] = yield_content(:title)
    end
  end
  if Middleman::OGP::Helper.auto.include?('description')
    if current_resource.data['description']
      opts[:og][:description] = current_resource.data['description']
    elsif content_for?(:description)
      opts[:og][:description] = yield_content(:description)
    end
  end
  if Middleman::OGP::Helper.auto.include?('url') &&
     Middleman::OGP::Helper.base_url
    opts[:og][:url] = URI.join(Middleman::OGP::Helper.base_url, current_resource.url)
  end

  Middleman::OGP::Helper.ogp_tags(opts) do |name, value|
    if block_given?
      block.call name, value
    else
      concat_content tag(:meta, name: name, property: value)
    end
  end
end