Sha256: fa42955f14a367b3e503301ee9a80831b91e040293c96c665d5c0831d1473637

Contents?: true

Size: 1.14 KB

Versions: 5

Compression:

Stored size: 1.14 KB

Contents

module GovukPublishingComponents
  module Presenters
    class FaqPageSchema
      attr_reader :page

      def initialize(page)
        @page = page
      end

      def structured_data
        # http://schema.org/FAQPage
        data = CreativeWorkSchema.new(@page).structured_data
          .merge(main_entity)
        data["@type"] = "FAQPage"
        data
      end

    private

      def main_entity
        {
          "mainEntity" => questions_and_answers
        }
      end

      def questions_and_answers
        page.parts.each_with_index.map do |part, index|
          part_url = part_url(part, index)

          {
            "@type" => "Question",
            "name" => part['title'],
            "url" => part_url,
            "acceptedAnswer" => {
              "@type" => "Answer",
              "url" => part_url,
              "text" => part['body']
            }
          }
        end
      end

      def part_url(part, index)
        if index.zero?
          guide_url
        else
          guide_url + "/" + part["slug"]
        end
      end

      def guide_url
        Plek.new.website_root + page.base_path
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
govuk_publishing_components-20.5.2 lib/govuk_publishing_components/presenters/machine_readable/faq_page_schema.rb
govuk_publishing_components-20.5.1 lib/govuk_publishing_components/presenters/machine_readable/faq_page_schema.rb
govuk_publishing_components-20.5.0 lib/govuk_publishing_components/presenters/machine_readable/faq_page_schema.rb
govuk_publishing_components-20.4.0 lib/govuk_publishing_components/presenters/machine_readable/faq_page_schema.rb
govuk_publishing_components-20.3.0 lib/govuk_publishing_components/presenters/machine_readable/faq_page_schema.rb