class GovukPublishingComponents::Presenters::OrganisationSchema

Attributes

page[R]

Public Class Methods

new(page) click to toggle source
# File lib/govuk_publishing_components/presenters/machine_readable/organisation_schema.rb, line 6
def initialize(page)
  @page = page
end

Public Instance Methods

structured_data() click to toggle source
# File lib/govuk_publishing_components/presenters/machine_readable/organisation_schema.rb, line 10
def structured_data
  # http://schema.org/GovernmentOrganization
  {
    "@context" => "http://schema.org",
    "@type" => "GovernmentOrganization",
    "mainEntityOfPage" => {
      "@type" => "WebPage",
      "@id" => page.canonical_url,
    },
    "name" => page.title,
    "description" => page.description || page.body,
  }
  .merge(members)
  .merge(parent_organisations)
  .merge(sub_organisations)
  .merge(search_action)
end

Private Instance Methods

linked_org(url) click to toggle source
# File lib/govuk_publishing_components/presenters/machine_readable/organisation_schema.rb, line 113
def linked_org(url)
  {
    "@context" => "http://schema.org",
    "@type" => "GovernmentOrganization",
    "sameAs" => url,
  }
end
members() click to toggle source
# File lib/govuk_publishing_components/presenters/machine_readable/organisation_schema.rb, line 30
def members
  return {} unless ministers.present?

  members = ministers_with_grouped_roles.map do |person, roles|
    person.merge("hasOccupation" => roles)
  end

  {
    "member" => members,
  }
end
minister_url(minister) click to toggle source
# File lib/govuk_publishing_components/presenters/machine_readable/organisation_schema.rb, line 78
def minister_url(minister)
  "#{website_root}#{minister['href']}"
end
ministers() click to toggle source
# File lib/govuk_publishing_components/presenters/machine_readable/organisation_schema.rb, line 42
def ministers
  page.content_item.dig("details", "ordered_ministers") || []
end
ministers_with_grouped_roles() click to toggle source
# File lib/govuk_publishing_components/presenters/machine_readable/organisation_schema.rb, line 46
def ministers_with_grouped_roles
  ministers.each_with_object({}) do |minister, grouped|
    person_schema = person_schema_for_minister(minister)

    if grouped.key? person_schema
      grouped[person_schema] << role_for_minister(minister)
    else
      grouped[person_schema] = [role_for_minister(minister)]
    end
  end
end
organisation_facet_params() click to toggle source
# File lib/govuk_publishing_components/presenters/machine_readable/organisation_schema.rb, line 134
def organisation_facet_params
  { organisations: [slug] }
end
parent_organisations() click to toggle source
# File lib/govuk_publishing_components/presenters/machine_readable/organisation_schema.rb, line 90
def parent_organisations
  related_organisations("ordered_parent_organisations", "parentOrganization")
end
person_schema_for_minister(minister) click to toggle source
# File lib/govuk_publishing_components/presenters/machine_readable/organisation_schema.rb, line 58
def person_schema_for_minister(minister)
  {
    "@type" => "Person",
    "honorificPrefix" => minister["name_prefix"],
    "image" => minister.dig("image", "url"),
    "name" => minister["name"],
    "url" => minister_url(minister),
  }
end
role_for_minister(minister) click to toggle source
# File lib/govuk_publishing_components/presenters/machine_readable/organisation_schema.rb, line 68
def role_for_minister(minister)
  return {} unless minister["role"].present?

  {
    "@type" => "Role",
    "name" => minister["role"],
    "url" => role_url(minister),
  }
end
role_url(minister) click to toggle source
# File lib/govuk_publishing_components/presenters/machine_readable/organisation_schema.rb, line 82
def role_url(minister)
  "#{website_root}#{minister['role_href']}"
end
search_action() click to toggle source
# File lib/govuk_publishing_components/presenters/machine_readable/organisation_schema.rb, line 121
def search_action
  PotentialSearchActionSchema.new(organisation_facet_params, search_description).structured_data
end
search_description() click to toggle source
# File lib/govuk_publishing_components/presenters/machine_readable/organisation_schema.rb, line 130
def search_description
  I18n.t(:all_content_search_description, scope: %i[components organisation_schema], organisation: page.title)
end
slug() click to toggle source
# File lib/govuk_publishing_components/presenters/machine_readable/organisation_schema.rb, line 125
def slug
  uri = URI.parse(page.canonical_url)
  File.basename(uri.path)
end
sub_organisations() click to toggle source
# File lib/govuk_publishing_components/presenters/machine_readable/organisation_schema.rb, line 94
def sub_organisations
  related_organisations("ordered_child_organisations", "subOrganization")
end
website_root() click to toggle source
# File lib/govuk_publishing_components/presenters/machine_readable/organisation_schema.rb, line 86
def website_root
  @website_root ||= Plek.new.website_root
end