Sha256: 871ba2fc1feca87384152d61179a3229b93497f9de0ca4263674507345718bd1

Contents?: true

Size: 1.87 KB

Versions: 20

Compression:

Stored size: 1.87 KB

Contents

module GovukPublishingComponents
  module Presenters
    class ArticleSchema
      attr_reader :page

      def initialize(page)
        @page = page
      end

      def structured_data
        # http://schema.org/Article
        {
          "@context" => "http://schema.org",
          "@type" => "Article",
          "mainEntityOfPage" => {
            "@type" => "WebPage",
            "@id" => page.canonical_url,
          },
          "headline" => page.title,
          "datePublished" => page.content_item["first_published_at"],
          "dateModified" => page.content_item["public_updated_at"],
          "description" => page.description,
          "publisher" => {
            "@type" => "Organization",
            "name" => "GOV.UK",
            "url" => "https://www.gov.uk",
            "logo" => {
              "@type" => "ImageObject",
              "url" => page.logo_url,
            }
          }
        }.merge(image_schema).merge(author_schema).merge(body)
      end

    private

      attr_reader :presenter

      # Not all formats have a `body` - some have their content split over
      # multiple fields. In this case we'll skip the `articleBody` field
      def body
        return {} unless page.body.present?

        {
          "articleBody" => page.body
        }
      end

      def image_schema
        {
          "image" => page.has_image? ? [page.image_url] : page.image_placeholders
        }
      end

      def author_schema
        return {} unless publishing_organisation

        {
          "author" => {
            "@type" => "Organization",
            "name" => publishing_organisation["title"],
            "url" => Plek.current.website_root + publishing_organisation["base_path"],
          }
        }
      end

      def publishing_organisation
        page.content_item.dig("links", "primary_publishing_organisation").to_a.first
      end
    end
  end
end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
govuk_publishing_components-9.8.0 lib/govuk_publishing_components/presenters/machine_readable/article_schema.rb
govuk_publishing_components-9.7.0 lib/govuk_publishing_components/presenters/machine_readable/article_schema.rb
govuk_publishing_components-9.6.0 lib/govuk_publishing_components/presenters/machine_readable/article_schema.rb
govuk_publishing_components-9.5.3 lib/govuk_publishing_components/presenters/machine_readable/article_schema.rb
govuk_publishing_components-9.5.2 lib/govuk_publishing_components/presenters/machine_readable/article_schema.rb
govuk_publishing_components-9.5.1 lib/govuk_publishing_components/presenters/machine_readable/article_schema.rb
govuk_publishing_components-9.5.0 lib/govuk_publishing_components/presenters/machine_readable/article_schema.rb
govuk_publishing_components-9.4.0 lib/govuk_publishing_components/presenters/machine_readable/article_schema.rb
govuk_publishing_components-9.3.6 lib/govuk_publishing_components/presenters/machine_readable/article_schema.rb
govuk_publishing_components-9.3.5 lib/govuk_publishing_components/presenters/machine_readable/article_schema.rb
govuk_publishing_components-9.3.4 lib/govuk_publishing_components/presenters/machine_readable/article_schema.rb
govuk_publishing_components-9.3.3 lib/govuk_publishing_components/presenters/machine_readable/article_schema.rb
govuk_publishing_components-9.3.2 lib/govuk_publishing_components/presenters/machine_readable/article_schema.rb
govuk_publishing_components-9.3.1 lib/govuk_publishing_components/presenters/machine_readable/article_schema.rb
govuk_publishing_components-9.3.0 lib/govuk_publishing_components/presenters/machine_readable/article_schema.rb
govuk_publishing_components-9.2.3 lib/govuk_publishing_components/presenters/machine_readable/article_schema.rb
govuk_publishing_components-9.2.2 lib/govuk_publishing_components/presenters/machine_readable/article_schema.rb
govuk_publishing_components-9.2.1 lib/govuk_publishing_components/presenters/machine_readable/article_schema.rb
govuk_publishing_components-9.2.0 lib/govuk_publishing_components/presenters/machine_readable/article_schema.rb
govuk_publishing_components-9.1.1 lib/govuk_publishing_components/presenters/machine_readable/article_schema.rb